8086/8088指令集参考和指令码编码规则.ppt

第18章 8086/8088指令集参考 18.1 指令码编码规则 18.2 按字母顺序排列的指令集 18.1 指令码编码规则 18.1.1 寄存器的编码 使用寄存器的机器指令码,可用3位指明是哪一个寄存器,并有一个用来表示其“宽度”为字节或字的“w”位。此外,只有某些指令可以存取到段寄存器。图18-1列出了所有寄存器的编码。 --------------------------------------------- 通用、基地址及段寄存器编码 编码 w=0 w=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP 101 CH BP DH SI BH DI 编码 段寄存器 00 ES 01 CS 10 SS 11 DS --------------------------------------------- 例如,下面的MOV指令具有一个字节的立即数: MOV AH,00 10110 100 ∣ ∣ w reg=AH 此例中,机器码的第一个字节,指出操作数为一个字节(w=0),并且用到AH寄存器(100)。应注意,不要从此例太早下结论,有些指令的w和reg可能在不同的位置。 18.1.2 定址形态模式字节 若机器指令码内含有定址形态模式字节,则它通常是第二个字节,并且是由下列三部分组成的: (1) mod:占2位,表示定址形态模式,11表示用到了寄存器,而00、01及10表示用到了内存单元。 (2) reg:占3位,表示用到了寄存器。 (3) r/m:占3位,表示用到了寄存器或内存,r表示哪一个寄存器,m表示内存单元地址。 机器指令码的第一个字节可能含有“d”位,表示第一个字节和第二个字节间的流向。 例如,将AX加给BX: ADD BX,AX 11 011 000 dw mod reg r/m 此例中d=1,表示mod(11)及reg(011)描述的是第一个操作数BX;而r/m(000)描述的是第二个操作数。因为w=1,所以宽度是一个字。因此这个指令就是把AX(000)加给BX(011)。机器指令码的第二个字节,通常用来指出内存的定址形态模式。下面将更详细探讨定址形态模式。 1. mod位 mod 的两个位用来区分是寄存器还是内存的定址,其用法如下: 00 以r/m位选用一种定址模式,没有“偏移地址”字节。其中当r/m=110时指定为直接寻址方式 01 以r/m位选用一种定址模式,有一个“偏移地址”字节 10 以r/m位选用一种定址模式,有两个“偏移地址”字节 11 以r/m位选用一个寄存器,“w”位(在操作码字节)决定它用到的是8位或16位的寄存器 2. reg位 reg的3个位配合w位决定实际使用的是8位或16位的寄存器。 3. r/m位 r/m的3个位(寄存器/内存)配合mod决定定址模式,见图18-2。 ----------------------------

文档评论(0)

1亿VIP精品文档

相关文档