我正在尝试做一些我认为相当容易的事情,尽管我被证明是非常错误的。我可能会做一些非常愚蠢的事情。在我解释之前,这是我的代码:
.data
mynum:
.int 75
format:
.string "Value: %d\n"
.text
.globl main
main:
movl $0, %eax
# Add the number
addl $mynum, %eax
# Print it out
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
提前致谢
答案 0 :(得分:2)
addl $mynum, %eax
mynum是一个地址。所以你在寄存器中得到一个指针值。你需要取消引用它。
顺便说一句,如果你逐行调试它,这应该是显而易见的。你应该尝试一下。