汇编中的eax ebx ecx有什么区别

Fri*_*sck 3 x86 assembly

我正在尝试学习一些汇编,但我很难理解一些基本的东西是做什么的。eax ebx ecx 只是变量还是除了存储值之外它们都有独特的特定用途?

Ale*_* V. 10

EAX 、EBX、ECX、EDX、EBP、EDIESI寄存器都是 32 位通用寄存器,用于临时数据存储和内存访问。

https://web.archive.org/web/20191114093028/https://gerardnico.com/computer/cpu/register/general

一些CPU指令会修改特定的寄存器。例如,从ESImovsb获取地址,从EDI获取目标地址,复制一个字节并更改 ESI 和 EDI 寄存器。

换句话说,您可以将它们用作变量,但在使用特定指令时它们也可能有特定用途。

您可能需要查阅参考资料。Intel 和 AMD 都提供手册,可在线获取。


Max*_* B. 6

eax, ebx, ecx 等实际上是registers,可以看作是“硬件”变量,与高级语言的变量含义不同。寄存器可以直接在您的软件中使用,如movadd或等指令cmpe扩展的主要手段是您的寄存器是 32 位宽。另一方面,64 位寄存器以r.

这些寄存器并非都用于如下所示的相同目的。此图显示了 Linux 64 位ABI的寄存器用法。

Linux 64 位 ABI

但是,此捕获中并未描述所有寄存器。例如*ip是一个特殊寄存器(进程计数器),它保存要执行的下一条指令。

您可以在那里找到完整的 ABI。一些信息是特定于 Linux 的,但大多数信息仍然与任何符合POSIX的系统相关。