首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >%eax不会减少吗?(ATT大会)

%eax不会减少吗?(ATT大会)
EN

Stack Overflow用户
提问于 2015-10-16 14:37:35
回答 2查看 494关注 0票数 2

我是AT&T程序集的新手,我正在学习如何使用减量操作符decl来创建一个打印Hello world! 5次的程序。

下面是代码:

代码语言:javascript
运行
复制
.data

hello:
    .ascii  "Hello world!"

   .text
loop:
    decl    %eax
    leaq    hello(%rip), %rdi
    call    _puts
    jnz     loop
    leave
    ret

.globl _main
_main:
    pushq   %rbp
    movq    %rsp, %rbp

    movl    $5, %eax
    jmp     loop

    movl    $0, %eax

    leave
    ret

然而,程序无限期地打印Hello world!,尽管它编译时没有错误。怎么了?

编辑

在提出以下建议之后:

  1. %eax更改为%rax
  2. 添加pushpop
  3. 重新排序decq调用
  4. call loop而不是jmp

以下是生成的代码:

代码语言:javascript
运行
复制
.data

hello:
    .asciz  "Hello world!"

   .text
loop:
    leaq    hello(%rip), %rdi
    pushq   %rax
    call    _puts
    popq    %rax
    decq    %rax
    jnz     loop

.globl _main
_main:
    pushq   %rbp
    movq    %rsp, %rbp

    movq    $5, %rax
    call    loop

    movq    $0, %rax

    leave
    ret
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-16 15:44:46

如“Fifoernik”和“Jester”所作:

  1. %eax更改为%rax
  2. 添加pushpop
  3. 重新排序decq调用

正如@rhkb所做的那样,拼图的最后一部分是:

  1. leaveret插入loop的最后一部分

共:

代码语言:javascript
运行
复制
.data

hello:
    .asciz  "Hello world!"

    .text
loop:
    leaq    hello(%rip), %rdi
    pushq   %rax
    call    _puts
    popq    %rax
    decq    %rax
    jnz     loop
    movq    $0, %rax
    leave
    ret

.globl _main
_main:
    pushq   %rbp
    movq    %rsp, %rbp

    movq    $5, %rax
    jmp     loop
票数 0
EN

Stack Overflow用户

发布于 2015-10-16 14:57:45

这将帮助你:

  • 在64位代码中,使用%rax代替%eax。
  • 你不能指望你的call _puts保留%rax。所以pushpop
  • 您不能期望您的call _puts保留这些标志。所以把decq %rax放在jnz loop前面。

下面是循环:

代码语言:javascript
运行
复制
loop:
  leaq    hello(%rip), %rdi
  pushq   %rax
  call    _puts
  popq    %rax
  decq    %rax
  jnz     loop
  RET

call loop添加建议

代码语言:javascript
运行
复制
.globl _main
_main:
  pushq   %rbp
  movq    %rsp, %rbp
  movl    $5, %rax
  CALL    loop
  movl    $0, %rax
  leave
  ret
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33173131

复制
相关文章

相似问题

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