首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇编语言代码不能正确添加

汇编语言代码不能正确添加
EN

Stack Overflow用户
提问于 2020-09-24 08:49:04
回答 1查看 47关注 0票数 1

我试图写一段将一个数乘以2的汇编语言代码(不使用乘法)并打印出来,但我的汇编语言代码不工作-它打印0,而它应该打印20。我检查并确实将%r10初始化为10,但是在我将%r10复制到%r11之后,%r10的值变成了一个不相关的数字(582)。有人能帮我指出我做错了什么吗?我应该如何实现它?谢谢!

代码语言:javascript
运行
复制
    .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
EN

回答 1

Stack Overflow用户

发布于 2020-09-24 08:58:56

代码语言:javascript
运行
复制
movq $10,  %r10
movq %r11, %r10

AT&T语法(与Intel语法相反)先有源,后有目标。因此,上面的第一行正确地将10加载到r10中,然后第二行将r11中的任何内容(根据您的结果可能为零)加载到r10中,覆盖它。

如果您希望r11以double r10结尾,序列将类似于:

代码语言:javascript
运行
复制
movq %r10, %r11  ; r11 <- r10
addq %r10, %r11  ; r11 <- r11 + r10

注意,这里有一个mov和一个add。您的原始代码有一个后跟两个add指令的mov,这意味着您最终将乘以三而不是两个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64038082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档