80x86采用变字节的指令格式
80x86采用变字节的指令格式,指令由1~16个字节组成。一条指令通常由6个字段组成,字段1为前缀字段,字段2~6为基本字段。下面将各个字段加以说明。
1.前缀字段
前缀字段用于修改指令操作的某些属性,为可选字段。常用的前缀有以下五类。
(1)段超越前缀:用于指明某个段寄存器取代指令中默认的段寄存器。
(2)操作数宽度前缀:用于改变当前操作数的默认宽度值。
(3)地址宽度前缀:用于改变当前地址的默认宽度值。
(4)重复前缀:用于重复串的操作。
(5)总线锁定前缀:用于产生LOCK信号,防止其他设备中断CPU在总线上的操作。
每个前缀的编码为1个字节,在一条指令前可同时使用多个指令前缀。不同前缀的前后顺序是无关紧要的,但同类指令前缀用于同一指令前时,只有最后一个是有效的。当指令前缀过多而使指令长度超过16字节时,会导致指令非法。
2.操作码字段(OP Code)
它规定了指令的操作性质。此字段不可省略。
3.寻址方式字段(mod r/m和sib)
此两个字段称为寻址方式说明符字段。mod r/m为主寻址字节,而sib为第二寻址字节。mod r/m字节规定了操作数的寻址方式,包括操作数长 度、采用的寻址方式、操作数的存放位置及EA的计算方法;sib为比例-变址-基址字节,它是否需要是由modr/m字节规定的寻址方式来决定的。一般访 问存储器的指令中都含有mod r/m字节。
4.位移量字段(Displ)
当寻址方式中需要位移量时,指令中将出现此字段。其长度为1,2,4个字节,通常用带符号数(补码)表示。
5.立即数字段(Data)
当寻址方式是立即数寻址时需用此字段,其长度为l,2,4个字节。立即数字段总是该指令的最后字段。
从上面可以看出,除操作码字段为必选字段外,其他各字段都是可选字段,可根据不同的寻址方式选用。
计算机学习推荐