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

und*_*all 1 x86 assembly nasm

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

test.s:

section .data
section .text

global _start
_start:
    mov eax, 1
    mov ebx, 256
    int 80h
Run Code Online (Sandbox Code Playgroud)

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

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

pax*_*blo 7

这不是寄存器包装,它是exit系统调用,它只使用ebx返回码的低8位.

exit手册页:

exit()函数导致正常的进程终止,并将值status & 0377返回给父进程(请参阅参考资料wait(2)).

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