我正在尝试学习一些汇编程序,但是我很难理解一些基本功能。 eax ebx ecx只是变量,还是除了存储值之外,它们都具有唯一的特定用途?
答案 0 :(得分:3)
EAX,EBX,ECX,EDX,EDP,EDI 和 ESI 寄存器都是32位通用寄存器,用于临时数据存储和存储访问。
https://web.archive.org/web/20191114093028/https://gerardnico.com/computer/cpu/register/general
某些CPU指令会修改特定的寄存器。例如,movsb
从 ESI 获取 S 地址,从 EDI 获得 D 目的地,复制一个字节并更改ESI和EDI寄存器。
换句话说,您可以将它们用作变量,但是在使用特定说明时它们也可能具有特定用途。
您可能需要参考参考。英特尔和AMD都提供在线手册。
答案 1 :(得分:2)
eax,ebx,ecx等实际上是寄存器,可以看作是“硬件” 变量,其含义与高级语言的变量不同。可以直接使用mov
,add
或cmp
等指令在软件中使用寄存器。前导e
表示扩展,即您的寄存器为32位宽。另一方面,64位寄存器以r
开头。
这些寄存器的使用目的并不完全相同,如下所示。此图显示了Linux 64位ABI的寄存器用法。
尽管此捕获中未描述所有寄存器。例如*ip
是一个特殊的寄存器(process counter),其中包含要执行的下一条指令。
您可以找到full ABI there.某些信息是特定于Linux的,但是大多数信息仍然与任何符合POSIX的系统有关。