您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术(楼顺天)-第3章2
3.28086指令分类指令系统是指CPU能完成的所有指令的集合,它是在CPU设计时就确定了的。8088/8086CPU的指令系统可分成下面13类:(1)数据传送指令;(2)算术运算指令;(3)逻辑运算指令;(4)移位指令;3.28086指令分类(5)标志位操作指令;(6)转移指令(7)循环控制指令;(8)子程序调用和返回指令;(9)中断调用和返回指令;(10)字符串操作指令;3.28086指令分类(11)输入、输出指令(12)其它指令(13)宏指令3.28086指令分类3.3数据与转移地址的寻址方式在指令中,用于说明操作数所在地址的方法就称为寻址方式。8086CPU指令系统的寻址方式分为两类:1.数据的寻址方式:寻找指令操作所需数据的方法;2.转移地址的寻址方式:寻找转移指令所需的程序地址。下面讲关于数据的寻址方式时,均以数据传送指令MOV为例讲解。MOV指令格式如下:MOVDST,SRC目的操作数源操作数助记符指令完成的功能:(DST)(SRC)3.3数据寻址方式数据的寻址方式(共8种):立即寻址(ImmediateAddressing)寄存器寻址(RegisterAddressing)存储器寻址(MemoryAddressing)(5种):直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和基址变址且相对寻址隐含寻址(HiddenAddressing)数据的寻址方式就是告诉CPU存/取数据的地方。3.3数据寻址方式1.立即寻址操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码段里,这种操作数称为立即数。立即寻址主要用来给REG或M赋初值。注意:只能用于源操作数字段,不能用于目的操作数字段。如:MOV12H,AL(语法错误)3.3数据寻址方式AHALAXCS段…………操作码存储器例:MOVAX,1234HB8H34H12H∴(AX)=1234H3.3数据寻址方式2.寄存器寻址数据放在指令规定的寄存器中,对16位数据,REG可以是AX、BX、CX、DX、SI、DI、SP、BP以及段寄存器,而对于8位数据,REG可以是AH、AL、BH、BL、CH、CL、DH、DL。在程序设计中,一般存放数据时,寄存器选择通用寄存器,而存放结果时尽可能的使用AX累加器,因为使用AX累加器要比用其它寄存器指令执行时间要短一些。寄存器寻址既可以作DST,也可以作SRC。3.3数据寻址方式例:MOVAX,BXAXBX若(AX)=1234H,(BX)=5678H,则CPU执行上条指令后,(AX)=5678H,而(BX)不变。又如:MOVCX,DL(语法错误)错误原因:类型不一致。3.3数据寻址方式这类寻址方式,操作数在存储器中,而存储器单元的地址由以下五种寻址方式的任何一种均可以找到。3.存储器寻址3.3数据寻址方式指令中直接给出了要寻找操作数所在单元的16位偏移地址。操作数所在单元的物理地址:PA=(段寄存器)×16+指令中给出的偏移地址①直接寻址(DirectAddressing)指令中直接给出的操作数所在单元的16位偏移地址默认在数据段。也可以通过增加段前缀来改变操作数所在的段地址。3.3数据寻址方式AXCS段操作码例1:MOVAX,[2000H]若DS为3000H,则:AHAL32000H32001H30000H+DS…………存储器数据段20H00HA1H2000HPA=32000H3.3数据寻址方式CS段操作码例2:MOV[2000H],AL若DS为3000H,则:AL32000H30000H+DS…………存储器数据段20H00H2000HPA=32000H3.3数据寻址方式CS段操作码例3:MOVES:[2000H],AL若ES为2050H,则:AL22500H20500H+ES………存储器附加数据段20H00H2000HPA=22500H前缀码3.3数据寻址方式在实际的汇编语言程序设计中,如果程序比较复杂,而用到的存放数据的单元又很多,那么在直接寻址方式当中,用户就要记住存放数据的每个单元的地址,对设计程序带来了很大的困难。3.3数据寻址方式所以在实际的汇编语言程序设计中,常常采用给存放数据的单元,定义一个符号地址名,即变量名/变量。变量名一但定义了,就具有了:该单元的段地址该单元的偏移地址类型大小长度五个属性这样,在程序设计中就可以用这个变量名代替原来的存储器单元的实际地址。3.3数据寻址方式例4:若(DS)=1500H,TABLE为在DS段定义的一个字变量,且偏移地址为0004H。则CPU执行MOVAX,TABLE指令完成的操作如下:15000H+DS……存储器数据段0004HPA=15004HAHAL15004H15005HTABLE3.3数据寻址方式这种寻址方式,要寻找的操作数在某存储器单元中,该存储器单元的16位偏移地址在指令中以BX、SI、DI某一个寄存器给出。其段地址默认在DS段。SIDIBXEA=②寄存器间接寻址RegisterIndirectAddressing3.3数据寻址方式例1:MOVAX,[BX]其SRC为寄存器间接寻址;DST为寄存器寻址;指令完成的功能为:(AX)((DS):(BX))若:(DS)=3000H,(BX)=1050H则:SRC所在单元的物理地址为:PA=(DS)×16+(BX)=30000H+1050H=31050H3.3数据寻址方式CS段操作码AHAL31050H31051H…………存储器数据段AX8BH07H30000HDS:+1050H31050HBX:PA:3.3数据寻址方式例2:MOVES:[SI],AL指令完成的功能为:((ES):(SI))(AL)若:(ES)=4000H,(SI)=1234H,(AL)=23H则:DST所在单元的物理地址为:PA=(ES)×16+(SI)=40000H+1234H=41234H∴指令执行后(41234H)=23H.3.3数据寻址方式要寻找的操作数在某存储器单元之中,该单元的有效地址的一部分在中,另一部分为一个DISP。BPSIBXDI③寄存器相对寻址RegisterRelativeAddressing8位16位其中,DISP相对位移量3.3数据寻址方式EA=BPSIBXDI8位DISP16位DISP+在DISP为常数时,操作数所在单元的段地址以寄存器为准,若寄存器为BX、SI、DI,操作数默认在DS段中。若寄存器为BP,操作数默认在SS段中。在DISP为变量时,操作数所在单元的段地址以变量为准,变量在哪个段定义的,就取该段的段地址。3.3数据寻址方式例1:MOVAX,[BX]+05H其中,SRC也可以写成:若:(DS)=2000H,(BX)=0008H,存放操作数单元的物理地址为:PA=(DS)×16+(BX)+05H=20000H+0008H+05H=2000DH[BX+05H]05H[BX]05H+[BX]3.3数据寻址方式CS段操作码AHAL2000DH2000EH+…………存储器数据段AX8BH47H05H20000H0008H2000DH0005H3.3数据寻址方式例2:MOVAX,[BP]若:(SS)=1050H,(BP)=0050H,存放操作数的存储单元的物理地址为:PA=(SS)×16+(BP)+00H=10500H+0050H+00H=10550H3.3数据寻址方式CS段操作码AHAL10550H10551H+…………存储器SS段10550H0050H10500H3.3数据寻址方式例3:若(DS)=1500H,TABLE为在DS段定义的一个字变量,且偏移地址为0004H,(BP)=0003H。MOVAX,TABLE[BP]SRC的寻址方式为寄存器相对寻址。指令完成的操作为:(AX)((DS):OFFSETTABLE+(BP))3.3数据寻址方式要寻找的操作数在某存储器单元之中,该单元有效地址的一部分在中,另一部分在中。BPBXSIDI④基址变址寻址BasedIndexedAddressingEA=+BPBXSIDI该单元的段地址以基址寄存器为准,若基址寄存器为BX,则段地址默认在DS中,若基址寄存器为BP,则段地址默认在SS中。3.3数据寻址方式例1:MOVAX,[BX][SI](AX)((DS):(BX+SI))例2:MOVAX,[BP][SI](AX)((SS):(BP+SI))例3:MOV[BP][DI],AL((SS):(BP+DI))(AL)3.3数据寻址方式它是基址变址寻址的扩充,操作数仍在存储器中,存储器单元的有效地址为:同样,如果用BX作为基地址,操作数默认在DS段中;如果用BP作为基地址,则在SS段中。在DISP为变量时,操作数所在单元的段地址以变量为准,变量在哪个段定义的,就取该段的段地址。BPBXEA=8位DISP16位DISP+SIDI+⑤基址变址且相对寻址BasedIndexedRelativeAddressing3.3数据寻址方式例1:MOVAX,[BX][DI]04(AX)((DS):(BX+DI+04H))例2:MOVAX,[BP][DI]04(AX)((SS):(BP+DI+04H))例3:MOVDS:[BP][DI]+04H,AL((DS):(BP+DI+04H))(AL)3.3数据寻址方式8.隐含寻址HiddenAddressing有些指令的指令码中不包含指明操作数地址的部分,而其操作码本身隐含的指明了操作数地址。如:乘除法指令、字符串操作类指令等。3.3数据寻址方式例1.若(BX)=0158H,(DI)=10A5H,(DS)=2100H,DISP=1B57H,(BP)=0100H,(SS)=1100H,段寄存器按默认段寄存器,则相对于各种寻址方式的EA的求法如下:直接寻址:EA=1B57HPA=21000H+1B57H=22B57H3.3数据寻址方式例1.若(BX)=0158H,(DI)=10A5H,(DS)=2100H,DISP=1B57H,(BP)=0100H,(SS)=1100H,段寄存器按默认段寄存器,则相对于各种寻址方式的EA的求法如下:寄存器间接寻址(设寄存器为BX):EA=0158HPA=21000H+0158H=21158H3.3数据寻址方式例1.若(BX)=0158H,(DI)=10A5H,(DS)=2100H,DISP=1B57H,(BP)=0100H,(SS)=1100H,段寄存器按默认段寄存器,则相对于各种寻址方式的EA的求法如下:寄存器相对寻址(以BP为例):EA=0100H+1B57H=1C57HPA=11000H+1C57H=12C57H3.3数据寻址方式例1.若(BX)=0158H,(DI)=10A5H,(DS)=2100H,DISP=1B57H,(BP)=0100H,(SS)=1100H,段寄存器按默认段寄存器,则相对于各种寻址方式的EA的求法如下:基址变址寻址(BX、DI):EA=0158H+10A5H=11FDHPA=21000H+11FDH=221FDH3.3数据寻址方式例1.若(BX)=0158H,(DI)=10A5H,(DS)=2100H,DISP=1B57H,(BP)=0100H,(SS)=1100H,段寄存器按默认段寄存器,则相对于各种寻址方式的EA的求法如下:基址变址相对寻址(BP、DI):EA=0100H+10A5H+1B57H=2CFCHPA=11000H+2CFCH=13CFCH3.3数据寻址方式例2:判断下列指令的书写格式是否正确,正确的说出SRC和DST的寻址方式,不正确说出错误原因。MOVAX,[BX][SI]MOVAX,BLMOV[BP],[DI+01H]MOV[BX][DI]+02H,12H3.3数据寻址方式√SRC为基址变址寻址DST为寄存器寻址╳类型不一致╳两存储器单元之间不能直接传送数据╳类型不明确当CPU执行转移指令时,通过改变IP或CS:IP,从而实现程序的转移。如果程序转移后只有IP发生了改变,则称为段内转移或者称为近程转移(也称为NEAR型转移)。如果程序转移后CS
本文标题:微机原理与接口技术(楼顺天)-第3章2
链接地址:https://www.777doc.com/doc-4720442 .html