我试图写一段将一个数乘以2的汇编语言代码(不使用乘法)并打印出来,但我的汇编语言代码不工作-它打印0,而它应该打印20。我检查并确实将%r10初始化为10,但是在我将%r10复制到%r11之后,%r10的值变成了一个不相关的数字(582)。有人能帮我指出我做错了什么吗?我应该如何实现它?谢谢!
.section .rodata
sOutputFmt: .string "%ld\n"
.section .text
.globl main
main:
subq $8,%rsp
movq $10,%r10
movq %r11,%r10
addq %r11,%r10
addq %r11,%r10
movq $sOutputFmt,%rdi
movq %r10,%rsi
call printf
addq $8,%rsp
ret发布于 2020-09-24 08:58:56
movq $10, %r10
movq %r11, %r10AT&T语法(与Intel语法相反)先有源,后有目标。因此,上面的第一行正确地将10加载到r10中,然后第二行将r11中的任何内容(根据您的结果可能为零)加载到r10中,覆盖它。
如果您希望r11以double r10结尾,序列将类似于:
movq %r10, %r11 ; r11 <- r10
addq %r10, %r11 ; r11 <- r11 + r10注意,这里有一个mov和一个add。您的原始代码有一个后跟两个add指令的mov,这意味着您最终将乘以三而不是两个。
https://stackoverflow.com/questions/64038082
复制相似问题