【问题标题】:32 bit registers act as 8 bit ones32 位寄存器充当 8 位寄存器
【发布时间】:2014-11-18 09:00:15
【问题描述】:

我遇到了最奇怪的问题。在 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 位寄存器一样工作?

【问题讨论】:

    标签: assembly x86 nasm


    【解决方案1】:

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

    来自exit 手册页:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2015-12-26
      • 2011-01-14
      • 2014-11-17
      • 2011-10-26
      • 2012-02-26
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多