您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 3.2指令的机器码表示
第3章8086指令系统一.机器语言指令的编码目的和特点•1.机器语言指令•用汇编语言(主要由指令系统组成的语言)编写的程序称为汇编语言源程序•由汇编程序将源程序翻译成计算机能认识的二进制机器语言指令(机器码)第3章8086指令系统•2.机器语言指令的编码特点•例如,在指令“MOV目的操作数BX”•可以作目的操作数的16位寄存器就有8个,如果用存储器寻址方式指定目的操作数,又可以多达24中编码,这样,目的操作数编码就有32种。•可见,8086指令的二进制编码是非常多的。第3章8086指令系统•我们可以为每种基本指令类型给出一个编码格式,对照格式上填写不同的数字来表示不同的寻址方式、数据类型。•操作数不外乎由寄存器、存储器、立即数和端口地址等这几部分组成。对于寄存器和存储器寻址方式可以列表给出编码方式,立即数和端口地址可以直接填入指令的编码格式中。第3章8086指令系统指令长度与字长的关系指令的长度主要取决于指令操作码的长度、操作数的长度和操作数的个数。通常指令字长位数越多,所能表示的操作信息也就越多,指令功能就越丰富。但位数多则指令所占的存储空间就多,读取指令的时间就增加。字长(一般是指CPU的机器字长)是指CUP一次能够处理的二进制数位数,它都是字节长度(8位二进制数)的1、2、4或8倍,也就是8、16、32或64位。因此,指令字长也是字节的简单倍数,如一字节指令,二字节指令、三字节指令……。第3章8086指令系统一条指令中的信息按其含义分成若干个信息段,每一信息段占一个字节或多个字节,且按一定的顺序排列,这便于CPU解释执行。如8086/8088CPU的指令系统,它采用1~6个指令字节的变字长指令格式:操作码寻址方式与寄存器号位移量/立即数位移量/立即数立即数立即数第1字节第2字节第3字节第4字节第5字节第6字节第3章8086指令系统二、8086/8088指令(编码)格式指令中包含操作码和操作数两部分。操作码表示计算机执行什么操作,操作数可能指明了参与操作的数的本身,或规定了操作数的地址。如何寻找操作数,这就是指令的寻址方式,也是由指令编码格式指出。opcodemodregr/mdispdata操作码寻址方式位移量立即数第3章8086指令系统8086/8088指令编码由1~6个字节组成,它包括操作码(第一字节)、寻址方式(第二字节)和操作数(第三到第六字节)三部分组成。opcodeopcodeMod字节opcodeMod字节opcodeMod字节opcodeMod字节opcodeMod字节Data/dispdisp(低)Data/disp(低)Data/disp(高)disp(高)disp(低)disp(高)DataData(低)Data(高)操作码部分寻址方式部分操作数部分第3章8086指令系统操作码MODREGR/M第一字节操作码字段表明该指令要完成什么操作。第二字节表明参加操作数据的地址,用来表明参入本次操作的数据及其类型,双操作数不能同为存储器操作数。其中:◆MOD段(2Bit):表示操作数的类型◆REG段(3Bit):表示其中一个操作数为寄存器操作数◆R/M段(3Bit):表示另外一个操作数为寄存器或存储器操作数第3章8086指令系统disp(低)/Data(低)disp(高)/Data(高)Data(低)Data(高)modregr/mWDOP765432100172目的操作数源操作数源操作数目的操作数D=1D=0000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIregW=0W=1寄存器寻址BX+SI+disp8BX+DI+disp8BP+SI+disp8BP+DI+disp8SI+disp8DI+disp8BP+disp8BX+disp8BX+SI+disp16BX+DI+disp16BP+SI+disp16BP+DI+disp16SI+disp16DI+disp16BP+disp16BX+disp16BX+SIBX+DIBP+SIBP+DISIDI直接地址BX000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIW=0W=1寄存器寻址mod=11modr/m存储器地址有效地址的计算公式mod=00mod=01mod=10双操作数指令中各字段定义第3章8086指令系统前节介绍的指令格式中的MOD段,MOD=11时表示两个操作数都为寄存器操作数;MOD≠11时表示R/M段所表示的操作数为存储器操作数,具体如下表所示。MODR/M存储器寻址REG寻址逻辑地址的计算公式W=0W=1mod=00mod=01mod=10mod=11000001010011100101110111DS:[BX+SI]DS:[BX+DI]SS:[BP+SI]SS:[BP+DI]DS:[SI]DS:[DI]DS:[direct16]DS:[BX]DS:[BX+SI+disp8]DS:[BX+DI+disp8]SS:[BP+SI+disp8]SS:[BP+DI+disp8]DS:[SI+disp8]DS:[DI+disp8]SS:[BP+disp8]DS:[BX+disp8]DS:[BX+SI+disp16]DS:[BX+DI+disp16]SS:[BP+SI+disp16]SS:[BP+DI+disp16]DS:[SI+disp16]DS:[DI+disp16]SS:[BP+disp16]DS:[BX+disp16]ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIR/M字段为寄存器操作数R/M字段为存储器操作数直接寻址寄存器间接寻址基址+变址寻址相对寻址相对的基址+变址寻址没有位移量8位位移量16位位移量第3章8086指令系统•我们用寄存器之间或寄存器与存储器之间交换数据的MOV指令来说明指令的编码•具体的编码如下100010DWmodr/mreg第3章8086指令系统•1.寄存器之间传送的指令编码•MOVSP,BX第3章8086指令系统•2.寄存器与存储器间传送指令的编码•MOVCL,[BX+1234H]第3章8086指令系统•3.立即数寻址指令的编码•MOVDX,5678H•MOV[BX+2100H],0FA50H第3章8086指令系统例:写出下面指令的机器语言编码。MOV[BX+DI-6],CL=88H、49H、FAH100010DWmodr/mregdisp8100010001111101001001001100010000100100111111010第3章8086指令系统000000DWmodr/mregDisp-L000000110010011010001000Disp-H0000100003H81H26H08H例:写出下面指令的机器语言编码。ADDAX,[BX+DI-0826]00000011100000010010011000001000
本文标题:3.2指令的机器码表示
链接地址:https://www.777doc.com/doc-3256849 .html