IA-32指令寻址方式

来源:互联网 发布:匡威衣服 知乎 编辑:程序博客网 时间:2024/05/18 00:30

 

intel 64和IA-32架构中的指令编码通常包括以下几个部分:可选的指令前缀(前缀的顺序任意),主操作码字节(最多3个字节),一个寻址方式指定字节(可选,该字节包含ModR/M字节以及可选的SIB字节<scale-index-base>),一个displacement(1,2,4或0个字节,可选),此外还有一个立即数域(可选,0,1,2,4字节)。

 

   大多以存储器做操作数的指令在主操作码后面都会跟随一个寻址方式字节(ModR/M),ModR/M包含三类信息:

   mod结合r/m可以组合出32种不同的值:8个寄存器(mod=11时)已经24个不同的寻址方式(mod!=11)

     reg/opcode用来指定8个寄存器种的一个或者作为指令操作码的扩展部分

   r/m部分可以被用来指定一个寄存器操作数或者可以结合mod来指定一种寻址模式,某些特殊情形下,mod和r/m被用来指  

      定操作码的信息(当mod和r/m指定寻址方式不同的时候,需要额外的一个寻址字节<SIB>。32为寻址方式下的base-plus-index和             scale-plus-index需要这个字节,SIB字节包含下面三个信息:

scale: 指定度长

index: 指定用作index的寄存器号

base:指定用作base的寄存器号

 

   displacement和立即数字节

   在一些寻址模式中,ModR/M后面可以跟随一个displacement(或者是一个SIB字节),displacement应该是一个立即数偏移

       如果一个指令使用了一个立即数,这个立即数往往跟在一个displacement后面

 

下图是 ModR/M编码规则

 

下图是 SIB字节编码规则

 

 

 

 

原创粉丝点击