我试图学习一些汇编,但是我很难理解一些基本的东西是做什么的。EAX、EBX和ECX仅仅是变量吗?或者它们除了存储值之外都有独特的特定用途吗?
zujrkrfu1#
eax、ebx、ecx等实际上是寄存器,可以将其视为 “硬件” 变量,有点类似于高级语言的变量。寄存器可以直接在您的软件中使用,例如mov、add或cmp。前导的e代表eextended,表示您的寄存器是32位宽。另一方面,64位寄存器以r开始。这些寄存器并不总是用于下面说明的用途。此图显示了Linux 64位ABI的寄存器使用情况。
eax
ebx
ecx
mov
add
cmp
e
r
不过,并不是所有的寄存器都在这个捕获中描述。例如,*ip是一个特殊的寄存器(process counter),它保存了下一条要执行的指令。您可以在full ABI there.中找到一些特定于Linux的信息,但大多数信息仍与任何POSIX兼容系统相关。
*ip
z5btuh9x2#
EAX、EBX、ECX、EDX、EBP、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都提供在线手册。
movsb
2条答案
按热度按时间zujrkrfu1#
eax
、ebx
、ecx
等实际上是寄存器,可以将其视为 “硬件” 变量,有点类似于高级语言的变量。寄存器可以直接在您的软件中使用,例如mov
、add
或cmp
。前导的e
代表eextended,表示您的寄存器是32位宽。另一方面,64位寄存器以r
开始。这些寄存器并不总是用于下面说明的用途。此图显示了Linux 64位ABI的寄存器使用情况。
不过,并不是所有的寄存器都在这个捕获中描述。例如,
*ip
是一个特殊的寄存器(process counter),它保存了下一条要执行的指令。您可以在full ABI there.中找到一些特定于Linux的信息,但大多数信息仍与任何POSIX兼容系统相关。
z5btuh9x2#
EAX、EBX、ECX、EDX、EBP、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都提供在线手册。