购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.4 各种数据寻址方式的组合

至此,大家了解了绝大多数指令采用的数据寻址方式,下面做一个简单总结,以方便读者在以后的编程实践中掌握它们的具体应用。

1.立即数寻址

立即数寻址只能用于源操作数。IA-32处理器支持32位立即数(本书用符号i32表示),它同样也支持16位立即数i16和8位立即数i8,本书将这些立即数统一用imm符号表示。

2.寄存器寻址

寄存器寻址主要是指通用寄存器,可以单独或同时用于源操作数和目的操作数。IA-32处理器的通用寄存器包括8个32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)、8个16位通用寄存器(AX、BX、CX、DX、SI、DI、BP和SP)以及8个8位通用寄存器(AH、AL、BH、BL、CH、CL、DH和DL)。部分指令可以使用专用寄存器,如段寄存器:CS、DS、SS、ES、FS、GS。

3.存储器寻址

存储器寻址的数据在主存,利用逻辑地址指示。段基地址由默认或指定的段寄存器指出,指令代码只表达偏移地址(称为有效地址),有多种存储器寻址方式。存储器操作数可以是32位、16位或8位数据,依次用符号m32、m16、m8表示,统一用mem表示。

典型的指令操作数有两个,一个书写在左边(称为目的操作数DEST),另一个用逗号分隔书写在右边(称为源操作数SRC)。数据寻址方式在指令中并不是任意组合的,而是有规律的且符合逻辑。例如,绝大多数指令(数据传送、加减运算、逻辑运算等常用指令)都支持如下组合(如图2-14所示):

图2-14 数据寻址的组合

在这两个操作数中,源操作数可以由立即数、寄存器或存储器寻址,而目的操作数只能是寄存器或存储器寻址,并且两个操作数不能同时为存储器寻址方式。

从第3章开始将陆续引出IA-32处理器的常用指令,并使用约定符号,参见附录C中的表C-1。除特别说明的新符号外,凡不符合指定格式的指令都是不存在的非法指令。附录C罗列了32位主要的通用指令。

高级语言虽然不讨论数据寻址,但实际上其复杂数据类型和构造的数据结构都需要处理器数据寻址的支持,这也是处理器设计多种灵活的数据访问方式的重要原因。 5uZOHamcW3oOrHaVLUPhkZQ6aB4iHaIGt8Clsb3lBEq6NE4c8d8qHOYQNFvBaF/u

点击中间区域
呼出菜单
上一章
目录
下一章
×