这是我的说明:
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。
进程的返回码只有 8 位。您的代码将得到 2**18,即 0x4000,因此低位字节为 0。