Assembly 组件中的数字:(
我正在尝试做一些我认为相当简单的事情,尽管我被证明是大错特错。我可能在做一些非常愚蠢的事情。在我解释之前,这里是我的代码:Assembly 组件中的数字:(,assembly,Assembly,我正在尝试做一些我认为相当简单的事情,尽管我被证明是大错特错。我可能在做一些非常愚蠢的事情。在我解释之前,这里是我的代码: .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 %e
.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
部分声明)值:75
,而是给我值:134518172
我的假设是,有一堆应该被传递的比特正在被传递。我不确定它们来自哪里。事实上,我甚至不知道它们是什么
我尝试过的一件事是使用movb
清除累加器的上半部分和下半部分,但没有产生任何显著差异(它改变了数字,但在两个方向上都只改变了约1000):
及
提前谢谢
addl $mynum, %eax
mynum是一个地址。因此,您将在寄存器中获得一个指针值。您需要取消对它的引用
顺便说一句,如果你正在逐行调试它,这一点应该很明显。你真的应该试一试。在我的脑海中:
addl[$mynum,]%eax
-这不是取消引用的方法吗?@dboarman FissureStudio。不是。他使用AT&t风格。但由于这是作业,我认为说如何做并不合适。幸运的是,这不是一个汇编类……这是Comp-Arc。教授没有真正解释“六个CPU寄存器”以外的内容。您可以告诉我如何取消引用所有您想要的内容:D.只想添加我的最终解决方案:addl(mynum),%eax
谢谢您的帮助,伙计们
movb $0, %al
addl $mynum, %eax