我正在做一些我认为很容易的事情,尽管我被证明是大错特错的。我可能做了件很蠢的事。在我解释之前,我的代码是:
.data
mynum:
.int 75
format:
.string "Value: %d\n"
.text
.globl main
main:
movl $0, %eax
addl $mynum, %eax
pushl %eax
pushl $format
call printf
addl $8, %esp
movl $1,%eax
xorl %ebx,%ebx
int $0x80
ret
非常简单:
-
在累加器上添加一个数字(已在
.data
部分)
-
把号码打印出来
现在我遇到的问题是:当代码运行时,而不是打印
Value: 75
就像我希望的那样,它给了我
Value: 134518172
.
我的假设是,一堆应该被传递的比特正在被传递。他们从哪里来,我不确定。事实上,我甚至不知道它们是什么。
我试过的一件事是
movb
清除蓄能器的前半部分和后半部分,但没有任何显著差异(它改变了数字,但在任何方向上都只有~1000个):
movb $0, %ah
和
movb $0, %al
提前谢谢