如何解决AT&T Debian 32位操作系统如何将值列表反向转换为Assembly中的另一个变量
因此,此(学校)作业的目标是获取一个长度不超过16个字符的16个单词的输入文件(包括\ n),颠倒其顺序,然后将其输出到新文件中。输入文件的内容如下。
input.txt:
1. First.......
2. Second......
3. Third.......
4. Fourth......
5. Fifth.......
6. Sixth.......
7. Seventh.....
8. Eighth......
9. Ninth.......
10. Tenth......
11. Eleventh...
12. Twelfth....
13. Thirteenth.
14. Fourteenth.
15. Fifteenth..
16. Sixteenth..
到目前为止,我已经设法接收输入文件并将其分配给变量。我已经用临时打印语句验证了这一点(在下面的代码中进行了评论)。但是,当我必须将其反转为Output变量(在将所述变量写入新文件之前)时,它不起作用。
下面是我当前的代码,运行后得到的结果如下。我已经为此工作了好几个小时,这令人非常沮丧,因为关于Assembly的这种特殊语法的信息很少,因此任何明确的帮助将不胜感激。请注意-我是这里的新手,因此我可能不了解可能会遇到的汇编术语或概念。请和我一起裸露!
我的代码:
.section .data
InFileName:
.asciz "input.txt"
InFileHandle:
.int 0
OutFileName:
.asciz "output.txt"
OutFileHandle:
.int 0
Output:
.fill 256
.section .bss
Input:
.fill 256
.section .text
.globl _start
_start:
movl $5,%eax # Open file
movl $InFileName,%ebx
movl $02,%ecx
movl $0777,%edx
int $0x80
test %eax,%eax # Check for file error
js Error
movl %eax,InFileHandle # Puts Input file handle into variable
movl $3,%eax # Writes file to variable
movl InFileHandle,%ebx
movl $Input,%ecx
movl $InputLen,%edx
int $0x80
# call PrintVariable # Temporary call for testing
call Reverse
PrintVariable:
movl $4,%eax
movl $1,%ebx
int $0x80
ret
Error:
call ExitProg
Reverse:
movl $Input,%esi # Move %esi to Input
movl $(Output+240),%edi # Move %edi to end of Output
cld # Clear direction flag
movl $16,%ecx # Move input length to %ecx
subl $32,%edi # Subtract twice input length from %edi
rep movsb # Repeat until %ecx is 0
movl $Output,%ecx # Assign output for printing
movl $256,%edx
call PrintVariable # Printing value for testing purposes
ExitProg:
movl $1,%eax
movl $0,%ebx
int $0x80
运行此代码后的输出:
1. First.......
不知道我在哪里出问题了,因此我们将不胜感激。解决此问题(将输入的数据转换为新变量)后,需要将这些数据推送到输出文件中。我确定我可以自己弄清楚这部分,但是我也不会拒绝帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。