组装过程中的奇怪行为

问题描述

我试图在一个过程中将eax变量增加2,然后将eax值压入堆栈/将结果传递给printf:

; nasm -f elf test.asm && gcc -m32 -o test test.o

section .text
global main
extern printf

add_by_2:
        add     eax,2
        push    eax
        push    message
        call    printf
        add     esp,8
        ret
        
main:
        mov     eax,1
        call    add_by_2
        call    add_by_2
        call    add_by_2
        ret

message db "%d",0xa,3,0

第三次调用后,eax变量不增加2。

标准输出:

3
5
5

预期的标准输出:

3
5
7

此代码有什么问题? 我如何更正代码,即使在第三次调用add_by_2之后也可以正确地将eax递增2。 我乐于接受任何将eax中存储的数字增加2的方法(即使我需要使用其他寄存器也是如此)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...