汇编始终返回 0

问题描述 投票:0回答:1

这是我的说明:

global _start


_start:
    mov ecx, 0x12
    mov ebx, 0x2

label:
    add ebx, ebx
    dec ecx
    cmp ecx, 0
    jg label
    mov eax, 1
    int 0x80

我是汇编新手,本质上是在尝试将两个数字相乘。我使用 nasm -f elf32 ./ex1.asm && ld -m elf_i386 编译上述代码,运行输出二进制文件 ./a.out 并使用 echo $? 检查返回值?在我运行 ./a.out 之后。我得到 0 作为返回值,但是我期望得到存储在 ebx 中的内容作为返回值。此外,当我分别用 0x2、0x3 替换 0x12 和 0x2 时,我得到的返回值是 12。我尝试增加这个数字,直到某个点我得到一些不相关的值作为返回值,然后我只得到 0。

此外,当我分别用 0x2、0x3 替换 0x12 和 0x2 时,我得到的返回值是 12。我尝试增加这个数字,直到某个点我得到一些不相关的值作为返回值,然后我只得到 0。

assembly addition nasm return-value ld
1个回答
0
投票

进程的返回码只有 8 位。您的代码将得到 2**18,即 0x4000,因此低位字节为 0。

© www.soinside.com 2019 - 2024. All rights reserved.