IA32整数寄存器的划分
IA32(Inter Architecture 32-bit)处理器中有8个
这就是8个
其中每个32位的寄存器都由%e 开头,每个寄存器的低16位都可以作为单独的存储空间来存储16位的数据(例如short),前四个寄存器的后低16位又可以分为两个8位的寄存器,存储一个字节(byte,处理char类型)。
注意,最后两个寄存器有其特殊含义。
%ebp表示帧指针(Frame pointer),也与系统栈的调用有关不能被随意访问。
前六个寄存器被称为通用寄存器,一般来讲在它们的使用上没有太多限制。
我们将处理8个位称为一个字节(byte),
只是延续传统的命名而已,因为刚开始的时候IA是16位架构的,将其扩展为32位之后用
操作数指示符
编译器将程序解释为机器相关的汇编代码,从汇编代码我们可以看出程序对操作系统的各种资源的管理调度。
大多数汇编指令都有一个或者更多的操作算子(operands),用来指示该指令引用的源数据和它的目标位置。
源数据可以是一个常数或者是从寄存器、内存中取得的数。
目标位置可以是寄存器或者内存(通常用一个32位的地址来描述)
算子一般分为三类,我们依次介绍。
immediate : 立即数。立即数就是一个常量,在ATT-format的汇编代码中,用前导符号$表示,例如$−577`或者$0x1F。只要可以被32bit表示即可。(汇编语言有时候可能会有8位(char)或
16 位(short)编码)。register : 寄存器。寄存器被作为汇编代码中的操作算子的时候,实际上指示的是该存储器中存储的值。32位寄存器(例如%eax)存储int或者pointer,16位寄存器(例如%ax)存储short,8位寄存器(例如
%al )存储char。我们用符号Ea表示寄存器a,用R[Ea] 表示a存储的内容。即将一组寄存器看数组R 的下标。memory : 存储器。我们通过有效地址来访问存储器(内存),用符号Mbyte[Addr]表示从Addr开始的byte个字节长度的引用。常见的表达式为Imm(Eb,Ei,s),其中I