32位寄存器用作8位寄存器

时间:2014-09-24 01:40:20

标签: assembly x86 nasm

我遇到了最奇怪的问题。在x86汇编中,32位寄存器(eax,ebx等)在256处溢出,表明由于某种原因它们实际上是8位。例如:

test.s:

section .data
section .text

global _start
_start:
    mov eax, 1
    mov ebx, 256
    int 80h

如果我随后使用nasm -felf32 -g test.s && ld -m elf_i386 -s -o test test.s编译此代码,并运行生成的可执行文件,则返回0.对于eax,ecx,edx等也会出现同样的问题。

为什么32位寄存器在任何情况下都会像8位寄存器一样?

1 个答案:

答案 0 :(得分:7)

这不是寄存器,它是exit系统调用,它只使用ebx的低8位作为返回码。

来自exit手册页:

  

exit()函数会导致正常的流程终止,status & 0377的值会返回到父级(请参阅wait(2))。

03770xff(二进制1111 1111)的八进制等效,意味着只使用低八位。从wait()(在父项中)返回的其他位用于诸如子进程是否终止,如果是,使用了什么信号,是否发生核心转储等等。< / p>