在x86汇编中,助记符的使用让人们更容易阅读汇编代码。每一个助记符指令都被汇编成能够控制处理器的机器码。所以,处理器对助记符一无所知,只知道机器码。例如,助记符add被汇编成机器码值0x04。
在x86中,指令采用特定的格式编写。下面是一个简单的x86指令示例:
在这里,add是指示处理器所需执行任务的助记符。这条指令也包含了一些操作数,这些操作数表示此次操作需使用的数据。在此示例中,操作数就是寄存器eax和数值1。在正常情况下,x86指令最多可以有三个操作数。虽然x86语言有特殊扩展,可以允许最多有四个操作(VEX前缀),但我们不会深入探讨这个方面。
x86指令的操作数可以是寄存器、立即数或内存位置。寄存器通常是通用寄存器,而内存位置则由地址指定,立即数则是如12345这样的数字或常数。
虽然x86指令可以包含上述任何内容,但最多只能包含一个内存位置。例如,指令add eax,ebx和add eax,[0x12345678]都是有效的,因为前者访问两个寄存器,后者访问一个寄存器和一个内存位置。但是,指令add[0x12345678],[0x87654321]是无效的,因为它一次使用了两个内存地址。这是因为处理器管线(pipeline)是一个精妙的设计,每条指令只能执行一次内存读取。