寻址方式和指令系统_第1页
寻址方式和指令系统_第2页
寻址方式和指令系统_第3页
寻址方式和指令系统_第4页
寻址方式和指令系统_第5页
已阅读5页,还剩216页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

寻址方式和指令系统第一页,共二百二十一页,2022年,8月28日重点8086的寻址方式8086指令系统第二页,共二百二十一页,2022年,8月28日3-18086的寻址方式计算机的指令包含操作码和操作数,操作码指明指令的操作性质,操作数指明操作的对象。例:MOVAX,BX操作码操作数寻址方式就是指令中确定操作数的方法,操作码在3-3中介绍。第三页,共二百二十一页,2022年,8月28日指令通常涉及执行前与执行后的数据,执行前的称为源操作数,执行后的结果称为目的操作数。MOVAX,BX源操作数目的操作数指令有单操作数、双操作数以及隐含操作数之分。单操作数的源和目的相同;双操作数用“,”分隔,左边为目的,右边为源;隐含操作数不在指令码中指明,而是预先规定死的。第四页,共二百二十一页,2022年,8月28日从数学角度来说,操作数分为常数与变量两类。常数是指程序运行过程中数值保持不变的数,变量是指程序运行中数值可以改变的量。计算机中能够存放操作数的有寄存器和存储器,而存储器又分为程序与数据两种。寄存器中的内容可在程序运行中改变。数据RAM单元的值在程序运行中可以改变的。程序通常存放在ROM中,存放在代码段,由CS管理,运行中不会改变。第五页,共二百二十一页,2022年,8月28日数据传送指令

MOV 目的,源操作: 将源操作数的值复制到目的操作数中,原操作数保持不变

第六页,共二百二十一页,2022年,8月28日一、立即数寻址立即数是直接包含在指令中的8位或16位的常数,程序编译完成后,其值在运行过程中不变,是软件处理常数的最广泛的方法。立即数是指令码的一部分,紧跟在操作码之后存放在代码段。执行时,EU从指令队列中获得该操作数。若是16位数据,则低字节存放在低地址单元中,高字节存放在高地址单元中。立即数只能做源操作数,不能做目的。以A~F打头的立即数,前面加0,以与其它字符区别开来。第七页,共二百二十一页,2022年,8月28日外部总线内部暂存器

IP

ES

SSDSCS输入/输出控制电路执行部分控制电路123456∑ALU标志寄存器AHALBHBLCHCLDHDLSPBPSIDI通用寄存器地址加法器指令队列缓冲器执行部件(EU)总线接口部件(BIU)16位20位16位8位第八页,共二百二十一页,2022年,8月28日例: MOV AL,80H MOV AH,0ABH MOV AX,1234H操作码34H12H寄存器与立即数两种寻址方式不需要计算存储单元地址,执行速度最快。第九页,共二百二十一页,2022年,8月28日二、寄存器寻址以寄存器的内容作为操作数。16位寄存器:AX,BX,CX,DX,SI,DI,BP,SP。8位寄存器:AH,AL,BH,BL,CH,CL,DH,DL。寄存器既能做源操作数,又能做目的。例: MOV AL,AH ;ALAH MOV DX,1234H ;DX=1234H第十页,共二百二十一页,2022年,8月28日存储器操作数的寻址对于存放在数据存储器中的操作数,要确定其物理地址,然后由BIU从指定的单元中读取操作数的值,送到EU中运算,执行速度较慢。要计算物理地址,需要确定其逻辑地址。段基址通常是默认(隐含的、缺省的、预先规定)的,也可以是指令中指定的。在IBMPC机中,偏移地址被称为有效地址EA。不同的存储器寻址方式之间的区别在于确定有效地址的方法不同。注意概念:物理地址、逻辑地址、段基址、段内偏移地址、有效地址第十一页,共二百二十一页,2022年,8月28日外部总线内部暂存器

IP

ES

SSDSCS输入/输出控制电路执行部分控制电路123456∑ALU标志寄存器AHALBHBLCHCLDHDLSPBPSIDI通用寄存器地址加法器指令队列缓冲器执行部件(EU)总线接口部件(BIU)16位20位16位8位第十二页,共二百二十一页,2022年,8月28日三、直接寻址方式在指令中以常数形式直接给出操作数的16位有效地址EA,EA作为指令码的一部分,紧跟操作码存放在代码段中。EA要用[]括起来,以与立即数区分。有效地址EA的存储顺序与16位立即数相同,低字节存放在低地址单元中,高字节存放在高地址单元中指令执行时,BIU从指令队列中获得EA。段基址的默认值是DS。第十三页,共二百二十一页,2022年,8月28日例:设DS=5000H MOV AX,[4321H]操作码21H43H内容物理地址54322H54321H54320H90H78H56HALAH操作数物理地址:PA=DS×16+EA=54321H操作数为字数据,PA对应低字节所在单元,该单元内容AL,(PA+1)对应高字节单元,该单元内容AH,结果:AX=9078H7890第十四页,共二百二十一页,2022年,8月28日段超越如果直接寻址的数据不在DS段中,则要在指令中使用段超越前缀指明段的名称。例如对附加段的寻址,在有效地址前用“ES:”标明。“:”是属性修改运算符,表示计算物理地址时,不再使用缺省的DS,而改用ES。例: MOV AL,ES:[3024H]PA=ES×16+3024H

第十五页,共二百二十一页,2022年,8月28日符号地址在汇编语言中,可以事先把一个存储单元的有效地址定义为一个符号,在程序中使用符号地址而不直接使用数值地址。定义字节数据用DB,定义字数据用DW。例:ARRAY1 DW 0506H MOV AX,ARRAY1 ;AX=0506H对符号地址,可以不加[],等价于直接寻址。MOV AX,ARRAY1==MOV AX,[ARRAY1]第十六页,共二百二十一页,2022年,8月28日四、寄存器间接寻址以某个16位寄存器的内容作为存储器操作数的有效地址。可用于间接寻址的寄存器只能是两个基址寄存器BX、BP,以及两个变址寄存器SI、DI。间接寻址的寄存器要用[]括起来,以与寄存器寻址方式区别。[]有“取有效地址”的含义。默认的段基址,BPSS,BX、SI、DIDS也可以使用段超越前缀指定非缺省的段基址。第十七页,共二百二十一页,2022年,8月28日例:设AX=0102H,BX=2346H, DS=1000H,ES=2000H MOV AX,[BX]由地址加法器生成源操作数物理:PA=DS×16+EA=10000H+2346H=12346H取物理地址为12346H的字数据送AX中,即取(12346H)单元的内容送AL中,(12347H)单元的内容送到AH中。AX=3344H…33H44H…12346H第十八页,共二百二十一页,2022年,8月28日1、以BX寄存器进行间接寻址——数据段基址寻址

例:若DS=2000H,ES=3000H,BX=1000H

1)MOVAX,[BX]AX←(21000H)(21001H)AX=5B40H

MOVCX,ES:[BX]

AX←(31000H)(31001H)40

5B

21000H21001H第十九页,共二百二十一页,2022年,8月28日2、以BP寄存器进行间接寻址——堆栈段基址寻址MOVAX,[BP]

若SS=5000H,BP=3020H,将53020H、53021H单元的内容送AX。执行结果:

AX=4A56H34000H34001H1AH20H56H4AH53020H53021H3、以SI、DI寄存器进行间接寻址——变址寻址

1)MOVAX,ES:[SI]

若ES=3000H,SI=4000H,EA=4000H,物理地址=34000H,执行结果:AX=201AH

第二十页,共二百二十一页,2022年,8月28日2)MOVBX,[DI]若DS=0FFF0H,DI=0200H执行结果:BX(?)(?)20H32H00100H00101H

BX=3220H

PA=DSx10H+DI=0FFF00H+0200H=100100H最高位(D20)的“1”自然丢失,实际物理地址为PA=00100H第二十一页,共二百二十一页,2022年,8月28日五、寄存器相对寻址操作数的有效地址是一个基址或变址寄存器的内容与一个8位或16位位移量的和。默认的段基址由寄存器决定,BPSS,BX、SI、DIDS也可以使用段超越前缀指定非缺省的段基址。例: MOV AX,[BX+12H] MOV AL,COUNT[BP] MOV BX,ES:ARRAY[DI]第二十二页,共二百二十一页,2022年,8月28日寄存器相对寻址的物理地址形成分两步进行。第一步计算有效地址EA,这一步在执行部件EU中完成,需要注意的是,EA的计算是16位数据运算,通过16位内部总线传送,超过16位的数据会自然丢失。第二步是根据EA和段基址计算物理地址,这一步在地址加法器中完成。第二十三页,共二百二十一页,2022年,8月28日例:设DS=2000H,BX=0AB00H,ARRAY=0F000H MOV AL,[BX+12H]EA=BX+12H=0AB00H+12H=0AB12HPA=DS×10H+EA=20000H+0AB12H=2AB12H MOV AL,ARRAY[BX]EA=BX+ARRAY=0AB00H+0F000H=1

9B00H产生进位,而EA只能取低16位,故EA=9B00HPA=DS×10H+EA=20000H+9B00H=29B00H第二十四页,共二百二十一页,2022年,8月28日六、基址变址寻址操作数的有效地址是一个基址寄存器(BX,BP)与一个变址寄存器(SI,DI)的内容之和。默认的段由基址寄存器决定,BPSS,BXDS,也可以使用段超越前缀指定非缺省的段基址。注意计算EA时的进位的自然丢失。例: MOV AX,[BX+SI] ;EA=BX+SI,段=DS MOV AL,[BP][DI] ;EA=BP+DI,段=

SS MOV BX,ES:[BX][DI] ;EA=BX+DI,段=

ES第二十五页,共二百二十一页,2022年,8月28日七、相对基址变址寻址操作数的有效地址是一个基址寄存器(BX,BP)与一个变址寄存器(SI,DI)的内容之和,再加上一个8位或16位的位移量。默认的段由基址寄存器决定,BPSS,BXDS,也可以使用段超越前缀指定非缺省的段基址。注意计算EA时的进位的自然丢失。例:MOV AX,[BX+SI+12H] ;EA=BX+SI+12H,DSMOV AL,BUF[BP][DI] ;EA=BP+DI+BUF,SSMOV BX,ES:ARY[BX][DI];EA=BX+DI+ARY,ES第二十六页,共二百二十一页,2022年,8月28日例:若BX=5000H,SI=2000H,DS=4000H,SS=1000H,BP=3100H。则:

MOVAX,[BX+SI];

EA=5000+2000=7000HAX[47001H][47000H]AX=2A32H MOVAX,[BP+SI+0020H];

EA=3100+2000+0020=5120H第二十七页,共二百二十一页,2022年,8月28日例:设BX=0158H,DI=10A5H,DS=2100H,位移量=1B57H,DS作为操作数的段寄存器。1)直接寻址:MOVAX,[1B57H]有效地址=1B57H物理地址=21000H+1B57H=22B57H2)寄存器间接寻址:MOVAX,[BX]有效地址=0158H物理地址=21000H+0158H=21158H3)BX寄存器相对间接寻址:MOVAX,[BX+1B57H]有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH第二十八页,共二百二十一页,2022年,8月28日4)变址寻址:MOVAX,[DI]有效地址=105AH物理地址=21000H+105AH=220A5H5)DI寄存器相对变址寻址:MOVAX,[DI+1B57H]有效地址=105AH+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCH6)基址加变址的寻址:MOVAX,[BX+DI]有效地址=0158H+105AH=11FDH物理地址=21000H+11FDH=221FDH第二十九页,共二百二十一页,2022年,8月28日7)相对的基址加变址的寻址:MOVAX,[BX+DI+1B57H]有效地址=0158H+105AH+1B57H=2D54H物理地址=21000H+2D54H=23D54H第三十页,共二百二十一页,2022年,8月28日寄存器寻址:指令中给出寄存器,操作数是该寄存器的内容寄存器数据指令寄存器指令内存EA数据直接寻址:指令中以常数形式直接给出操作数的有效地址第三十一页,共二百二十一页,2022年,8月28日指令寄存器内存寄存器数据EA寄存器间接寻址:指令中给出寄存器,该寄存器值作为存储单元的有效地址,操作数是该存储单元的内容。第三十二页,共二百二十一页,2022年,8月28日指令寄存器位移量地址+数据寄存器内存寄存器相对寻址:指令中给出寄存器以及相对位移量,以该寄存器值于位移量的和作为存储单元的有效地址,操作数是该存储单元的内容。第三十三页,共二百二十一页,2022年,8月28日基址寄存器变址寄存器变址值基址值+数据内存指令基址加变址寻址指令中给出基址寄存器以及变址寄存器,以两个寄存器值的和作为存储单元的有效地址,操作数是该存储单元的内容。第三十四页,共二百二十一页,2022年,8月28日基址寄存器变址寄存器位移量指令变址值基址值数据内存+相对的基址加变址指令中给出基址寄存器、变址寄存器以及相对位移量,以三者的和作为存储单元的有效地址,操作数是该存储单元的内容。第三十五页,共二百二十一页,2022年,8月28日八、其它1、隐含寻址 指令中不显性指明操作数,此类指令的操作数是预先规定的,称为隐含寻址方式。例:MOV AX,[BX+SI+12H] ;EA=BX+SI+12H,DS源操作数: 相对基址变址寻址方式目的操作数:寄存器寻址方式例: STC ;CF1 DAA ;对AL中数据进行十进制加法调整2、每个操作数都有对应的寻址方式,双操作数的指令就可能有两种寻址方式第三十六页,共二百二十一页,2022年,8月28日思考题已知:DS=22A7H,SS=0FE20H,ES=0BBA2H,CS=3400H,BX=2013H,BP=4215H,SI=312EH,DI=D055H,试写出下面每条指令中存储器操作数的物理地址。1、 MOV BX,[4800H] 2、 ADD SS:[BX+DI+7650H],AL3、 SUB [BP+SI+3],CX 4、 XCHG AX,[DI+5]第三十七页,共二百二十一页,2022年,8月28日3-2指令的机器码表示方法一、机器语言指令的编码目的和特点1、机器语言指令 CPU只能识别和执行二进制机器码指令。2、机器语言指令的编码特点一般通过查表即可找到对应的机器码; 指令机器码有单字节、双字节、多字节之分,8086CPU最长指令有6字节。第三十八页,共二百二十一页,2022年,8月28日二、机器语言指令代码的编制8086的指令为1~6字节,分为“操作码域”和“操作数域”两个部分;1、操作码域:

一般用指令的第一个字节或者头两个字节表示指令的操作码和寻址方式——操作码域。2、操作数域: 操作码域后面所跟的字节一般统称为操作数域第三十九页,共二百二十一页,2022年,8月28日单字节指令(隐含的操作数)单字节指令(寄存器模式)寄存器到寄存器不带位移量的寄存器和内存之间的传送带位移量的寄存器和内存之间的传送(设位移量为16位)立即数送寄存器(设立即数为16位)立即数送内存(设带16位位移量)

图3-38086指令格式举例操作码操作码REG操作码操作码操作码操作码操作码11REGR/MMODREGR/MMODREGR/M11REGR/MMOD操作码R/M位移量低位位移量高位位移量高位位移量低位数据低位数据高位数据高位数据低位REG——寄存器MOD——模式R/M——寄存器或内存第四十页,共二百二十一页,2022年,8月28日操作码:指出执行这条指令时,CPU要做什么操作。(OP)一般用指令的一个字节表示,有时由于用8位还不够,常在指令的第二个字节中还可占有3位操作码。指令的第一字节:wd立即方式寻址时,操作码中用S位表示符号扩展

s=1,将8位立即数扩展成16位数时OPd/sww=1,对字进行操作w=0,对字节进行操作d=1,寄存器作为目的操作数d=0,寄存器作为源操作数第四十一页,共二百二十一页,2022年,8月28日2、操作数域:操作码域后面所跟的字节一般统称为操作数域。•2字节的有效地址(直接寻址);•1字节或者2字节的位移量;•1字节或者2字节的立即数;•1字节或者2字节的位移量,后面再跟1字节或者2字节的立即数;•2字节的位移量和2字节的段地址(只对段间接转移而言)。单操作数指令双操作数指令指令:第四十二页,共二百二十一页,2022年,8月28日例:指令编码字节1字节2字节3字节4字节5字节6C787002150FAMOV [BX+2100H],0FA50H操作码两字节位移量低字节位移量高字节立即数低字节立即数高字节C787002150FA012345第四十三页,共二百二十一页,2022年,8月28日指令地址指令在存储器中的地址,是指该指令第一个字节所在存储单元的地址;其段基址由CS确定,段内偏移地址由IP决定每执行完一条指令后,IP的值指向下一条指令的首地址。IP的值不是连续变化的,每次变化按照一条指令的字节数变化;CS:IP的改变是通过专门的指令——跳转类指令来实现。第四十四页,共二百二十一页,2022年,8月28日3-38086指令系统数据传送指令算术运算指令逻辑运算、移位、循环指令串操作指令控制转移指令处理器控制指令第四十五页,共二百二十一页,2022年,8月28日一、数据传送指令MOV XCHGXLATPUSH POPLEA LDS LESPUSHF POPF LAHF SAHF INOUT数据传送实际上是复制操作,因此源操作数保持不变。除SAHF和POPF两条指令外,其它传送指令都不影响标志寄存器的标志位。第四十六页,共二百二十一页,2022年,8月28日1.通用型(1)MOV传送指令

格式:MOVdst,src;dstsrc源和目的数据长度相等。至少有一个操作数能指定是字节数据还是字数据立即数只能做源操作数,不能做目的。立即数不能直接传送到段寄存器,不能在两个段寄存器,或者两个存储单元之间直接传送。CS与IP不能作为传送目的操作数,CS、IP的修改要通过跳转类指令实现。第四十七页,共二百二十一页,2022年,8月28日MOV指令传送途径AX,BXCX,DXSP,BPSI,DICS,DS,SS,ESMEMDATA第四十八页,共二百二十一页,2022年,8月28日例: MOV DS, AX ;DSAXMOV CH, 20 ;CH20MOV BL, AH ;BLAHMOV AX, [BX] ;AX[BX]MOV [DX],AX ;[DX]AXMOV AX, [BX+0060H]第四十九页,共二百二十一页,2022年,8月28日例(2)、交换指令格式:XCHGdst,src功能: 把dst与src的内容互换,即执行后的src等于执行前dst的内容,而执行后dst等于执行前src的内容。 XCHGAX,BX XCHGAL,BH XCHGBX,[1000H] XCHG[2100H],DH XCHGSI,AX注意:1、dst与src不能同时为内存单元;2、不能使用立即数、CS、IP作为操作数。第五十页,共二百二十一页,2022年,8月28日(3)堆栈操作指令

PUSHsrc;把src推入堆栈POPdst;从堆栈弹出到dst堆栈是存储器中的一个连续区域,用于存放中断和子程序的返回地址,以及运算过程的中间结果。堆栈的存储单元的逻辑地址常用SS:SP表示,SP称为堆栈指针,其值是最后一个入栈的字数据所在单元的有效地址,专业术语叫做“指向栈顶”,常通过入栈指令PUSH和出栈指令POP来访问。PUSH和POP都是字操作指令,故src和dst都是16位数据,不能进行8位数据入栈和出栈。指令中的SS和SP都是隐含寻址方式。第五十一页,共二百二十一页,2022年,8月28日堆栈指令的操作数src或dst只能是寄存器或存储器,不能是立即数。不能把CS和IP作为POP的操作数,但可以作为PUSH的源。先进后出的操作原则。原因:只有一个出口。多个数据入栈、出栈操作时,为恢复原来数据,出栈顺序必须与入栈顺序相反。第五十二页,共二百二十一页,2022年,8月28日PUSH指令的执行过程:第一步修改指针:SPSP–2第二步数据入栈:把src拷贝到逻辑地址为SS:SP的字存储单元中。POP指令的执行过程:第一步数据出栈:把逻辑地址为SS:SP的字存储单元中的数据拷贝到dst中。第二步修改指针:SPSP+2第五十三页,共二百二十一页,2022年,8月28日PUSH、POP指令执行前后,SS寄存器的值没有改变,只改变堆栈指针SP的值,SP的范围0000H~0FFFFH,大小为64kB空间。堆栈溢出:(1)当SP=0000H,再次执行PUSH指令,进行入栈操作,则SP=?(2)当SP=0FFFEH,再次执行POP指令,进行出栈操作,则SP=?第五十四页,共二百二十一页,2022年,8月28日01005H01006H01007H01008HSP(原栈顶)SP-2(新栈顶)SP例:设SS=0100H,SP=0008H,AX=12C3H,BX=5070H

PUSHAX;(1)SPSP-2;SP=0006(2)(01007H)(01006H)AX

01000008SSSP16-212C3第五十五页,共二百二十一页,2022年,8月28日POPAX;(1)将栈顶两单元内容送AX;(2)SPSP+2

01000006SSSP16C31201005H01006H01007H01008HSP+2(新栈顶)SP12C3AXSP(原栈顶)第五十六页,共二百二十一页,2022年,8月28日例设SS=2000H,SP=0100H,AX=1234H,BX=5678H,执行以下指令序列,画出堆栈变化过程,写出结果

PUSH AX PUSH BX POP AX POP CXXXSP=0100堆栈原来状态3412XXSP=00FE执行PUSHAX以后第五十七页,共二百二十一页,2022年,8月28日78563412XXSP=00FC执行PUSHBX以后3412XXSP=00FE执行POPAX以后AX=5678HXXSP=0100执行POPCX以后CX=1234H结果:AX=5678HBX=5678HCX=1234H第五十八页,共二百二十一页,2022年,8月28日(4)换码指令(查表指令)

格式:XLAT(无参数);AL[BX+AL]

以BX与AL的和作为有效地址确定数据段中的某个单元,再把该单元的内容送入AL中。用来实现查表,要求:BX寄存器指向表的首地址,AL中为位移量。BX+0BX+1BX+2BX+AL+BXALXXALXX第五十九页,共二百二十一页,2022年,8月28日十进制数gfedcba

00100000040H10111100179H20010010024H30011000030Hafgbecd第六十页,共二百二十一页,2022年,8月28日十进制数字0~9转换成七段显示码的译码表,现在要取 3的对应的七段译码。

MOVAL,3MOVBX,2000HXLAT

执行XLAT指令后:AL=30H例2000H40792430191202780010BX+AL第六十一页,共二百二十一页,2022年,8月28日2、目标地址传送指令(1)取有效地址LEAreg16,men功能: 取存储器源操作数mem的有效地址(而不是单元内容)送16位寄存器

源操作数必须是存储器数据。目标寄存器只能用16位,不能用8位,不用段寄存器。对于存储器数据,有四个属性:数据值(内容)、有效地址、段基址、数据长度。MOV指令操作的是存储单元的内容(数据值),而LEA操作的是存储单元的有效地址。第六十二页,共二百二十一页,2022年,8月28日MOV AX,[1000H];AX=1122H1122331000HLEA AX,[1000H];AX=1000HLEA SP,[0500H];SP=0500HLEA BX,[BP+SI];BX=BP+SI例:第六十三页,共二百二十一页,2022年,8月28日(2)将地址指针送DS和另一寄存器:LDS reg16,men32前2个字节送寄存器,后2个字节送DS。

LES reg16,mem32前2个字节送寄存器后,2个字节送ES。要传送的源操作数是指定存储器的32位数据,即连续4个存储单元的内容。目标操作数包含一个段寄存器(DS或ES,隐含寻址),以及一个16位寄存器(寄存器寻址)。在8086系统中,逻辑地址占用4个字节,该指令可一次把双字指针送段寄存器与指针寄存器中。第六十四页,共二百二十一页,2022年,8月28日LDSDI,[2100H]2100H2101H2102H2103H2104H1CH20H21HB5HDI=201CHDS=B521H第六十五页,共二百二十一页,2022年,8月28日D7D6D5D4D3D2D1D0SFZFAFPFCFFLAG3、标志传送1)、取标志:LAHF;将标志送AH置标志:SAHF;将AH送标志寄存器AH第六十六页,共二百二十一页,2022年,8月28日(2)PUSHF:把标志推入堆栈。SPSP-2,FLAGH入栈(3)POPF:把标志弹出堆栈。FLAG(SP+1,SP)SPSP+2第六十七页,共二百二十一页,2022年,8月28日最小模式下的总线写操作第六十八页,共二百二十一页,2022年,8月28日传送指令的总线操作两个寄存器之间传送数据时,或者立即数送寄存器,在EU中即可完成,不涉及总线操作。若访问存储器,则涉及总线操作。若存储器为源操作数,则执行“存储器读”总线周期,在T3状态M/IO=1,RD=0,WR=1。若存储器为目标操作数,则执行“存储器写”总线周期,此时M/IO=1,RD=1,WR=0。分两次进行,先奇地址字节,再偶地址字节访问奇地址字数据BHE=0A0=0访问偶地址字数据BHE=0A0=1访问奇地址字节数据BHE=1A0=0访问偶地址字节数据第六十九页,共二百二十一页,2022年,8月28日SELA18~A0

512k8

D7~D0SELA18~A0

512k8

D7~D0D7~D0D15~D8BHEA0奇存储体偶存储体AHAL偶地址字数据ALAH奇地址字数据第七十页,共二百二十一页,2022年,8月28日例1:MOV AX,[2000H](3)偶地址:故A0=0;(1)传送方向从存储器向CPU,故RD=0,WR=1(2)访问存储器:故M/IO=1(4)偶地址的字操作,故BHE=0,使用D15~D0,一次总线操作即可完成传送。第七十一页,共二百二十一页,2022年,8月28日例2:MOV AX,[2001H](1)传送方向从存储器向CPU,故RD=0,WR=1(2)访问存储器:故M/IO=1(3)奇地址的字操作,分两次总线操作完成。第一次:A0=1,BHE=0,读(2001H)单元字节AL,使用D15~D8第二次:A0=0,BHE=1,读(2002H)单元字节AH,使用D7~D0第七十二页,共二百二十一页,2022年,8月28日传送指令的总线操作分析MOV [2000H],AXMOV [2001H],AXMOV AH,[2001H]MOV AL,[2001H]MOV [2010H],5678H;写出该指令执行时T1、T2、T3、T4各个状态的外部总线AD0—AD15,A16/S3—A19/S6,BHE/S7,RD、WR、M/IO引脚内容的值例3:写出执行以下指令时的M/IO,RD,WR,BHE,A0,以及数据总线D15—D0使用情况,设DS=1234H第七十三页,共二百二十一页,2022年,8月28日2)、间接寻址

INAL,DXOUTDX,AL INAX,DXOUTDX,AX 寻址空间为:0000H~FFFFH4、输入输出指令1)、直接寻址

INAL,nOUTn,ALINAX,NOUTN,AX寻址空间为:0~255字节第七十四页,共二百二十一页,2022年,8月28日I/O端口是I/O接口电路中的寄存器,只能用输入指令IN以及输出指令OUT来访问。I/O端口只用低16位地址线,寻址范围64KB空间。I/O端口按字节分配,字端口是地址连续的两个字节端口,低地址存放低字节,高地址存放高字节。只能用累加器作为执行输入/输出过程的机构,字节端口用AL,字端口用AX。用直接输入/输出指令时,寻址范围为0~255,因为直接寻址指令中分配给端口号的操作数域为一个字节。注意间接寻址只能用DX,并且不加[]。第七十五页,共二百二十一页,2022年,8月28日执行IN/OUT指令时,8086的M/IO=0,而执行MOV指令时,M/IO=1;IN是读操作,RD=0,WR=1;分两次进行,先奇地址字节,再偶地址字节访问奇地址字端口BHE=0A0=0访问偶地址字端口BHE=0A0=1访问奇地址字节端口BHE=1A0=0访问偶地址字节端口OUT是写操作WR=0,RD=1;第七十六页,共二百二十一页,2022年,8月28日例 IN AL,20H ;读字节端口IN AX,30H ;读字端口OUT 46H,AL ;写字节端口OUT 80H,AX ;写字端口 MOV DX,1000HIN AL,DX

IN AX,DXOUT DX,AL第七十七页,共二百二十一页,2022年,8月28日二、算术运算指令二进制加法:ADD、ADC、INC二进制减法:SUB、SBB、DEC、DAS二进制乘法:MUL、IMUL、AAM二进制除法:DIV、IDIV、AAM调整类:AAA、DAA、DAS、AAM、AAD第七十八页,共二百二十一页,2022年,8月28日计算机中的数据表示方法对于真值“69”,可用不同的方法表示二进制数(十六进制数)表示: “69”=01000101B=45H压缩BCD数表示: “69”=01101001B=69H非压缩BCD数表示: “69”=0000011000001001B=0609HASCII码表示: “69”=0011011000111001B=3639H第七十九页,共二百二十一页,2022年,8月28日计算机中的数据运算表示方法“69+46=115”,二进制数(十六进制数)表示:被加数的二进制表示:“69”=01000101B=45H加数的二进制表示:“46”=00101110B=2EH和数的二进制表示:“115”=01110011B=73H则二进制算式为:45H二进制加2EH=73H45H二进制加2EH73H第八十页,共二百二十一页,2022年,8月28日计算机中的数据运算表示方法“69+46=115”,BCD数表示:被加数的BCD表示:“69”=01101001B=69H加数的BCD表示:“46”=01000110B=46H和数的BCD表示:“115”=000100010101B=115H则二进制算式为:69HBCD加46H=115H69HBCD加46H115H第八十一页,共二百二十一页,2022年,8月28日计算机中的数据运算表示方法“69+46=115”,非压缩BCD数表示:被加数的非压缩BCD表示:“69”=0000011000001001B=0609H加数的非压缩BCD表示:“46”=000001000000110B=0406H和数的非压缩BCD表示:“115”=00000001000000010000101B=010105H则二进制算式为:0609H非压缩BCD加0406H=010105H0609H非压缩BCD加0406H010105H第八十二页,共二百二十一页,2022年,8月28日1、二进制加法指令1)不带进位位的加法格式:ADDDST,SRC功能:DSTDST+SRC例:(1).ADDAL,50H;ALAL+50H(2).ADDCX,1000H ;CXCX+1000H(3).ADDDI,SI;DIDI+SI第八十三页,共二百二十一页,2022年,8月28日例:(4).ADD[BX+DI],AX若执行前: BX=1000H,DI=2000H,AX=1234H,DS=4000H则执行中: EA=BX+DI=3000H PA=DSx16+EA=13000H和数为:1234+4025H=5259H执行后: (43000H)5259H思考题:执行过程中,控制总线与数据总线的数值如何变化?第八十四页,共二百二十一页,2022年,8月28日2).带进位位的加法

格式:ADCDST,SRCDSTDST+SRC+CF

例:ADCAX,SI;

AXAX+SI+CF

ADCDX,[SI]

DXDX+[SI]+CF

ADCBX,3000H

BXBX+3000H+CFADCAL,5

ALAL+5+CF第八十五页,共二百二十一页,2022年,8月28日例:有两个4字节无符号数放在2000H和3000H单元中,低位在前,高位在后,将两个数相加,结果放2000H开始的单元中。

10008432H+20007F00H=?1).算法分析:(1)可以将两个4字节无符号数相加看成2个字相加;(2)两个数的低位字相加后,将可能产生进位CF;(3)高位字相加,应再加上低位运算的进位位;

2000H3000H32840010007F0020SIDI第八十六页,共二百二十一页,2022年,8月28日2).程序:

MOVDI,2000H ;取第一个字的首地址MOVSI,3000H ;取第二个数的首地址MOVAX,[SI] ;第一个数的低字ADD[DI],AX ;第一个数和第二个数 ;的低字相加MOVAX,[SI+2] ;第二个数的高字送AXADC[DI+2],AX ;高16位数据相加,并 ;加上低16位的进位位第八十七页,共二百二十一页,2022年,8月28日3).增量指令

格式:INCsrc ;srcsrc+1将操作数内容加一,再回送操作数。

INCAX ;AXAX+1INCBL ;BLBL+1INCBYTEPTR[BX+DI+500]注意:INC指令影响标志AF、OF、PF、SF、ZF,

但不影响进位标志CF。第八十八页,共二百二十一页,2022年,8月28日4).加法的十进制调整二进制加法与压缩十进制数加法的区别1233489+十进制加法BD3489+二进制加法+66H123H第八十九页,共二百二十一页,2022年,8月28日加法的十进制调整指令

格式:DAA ;功能: 把AL中两个压缩BCD数按二进制加法运算得到的和调整为压缩BCD数,再回送AL。AF=1或低4位>9?CF=1或高4位>9?ALAL+06HALAL+60HNN加法十进制调整过程第九十页,共二百二十一页,2022年,8月28日说明:隐含寻址方式,源和目的操作数都是AL以及标志位AF、CF。DAA紧跟在ADD/ADC之后,与ADD/ADC一起实现两位十进制数(BCD码)加法。执行ADD/ADC指令的两个操作数必须为压缩BCD数,且相加的结果必须存放在AL中。第九十一页,共二百二十一页,2022年,8月28日例:求BCD数BL与DL的和,结果送到BL中MOVAL,BL;取第一个加数ADD AL,DL;与第二个数进行二进制加 DAA ;加法的十进制调整 MOV BL,AL;回送结果假设执行前BL=38H,DL=76H,则执行结果:AL=?BL=?DL=?AF=?CF=?第九十二页,共二百二十一页,2022年,8月28日假设执行前BL=3AH,DL=76H,则执行结果:AL=?BL=?DL=?AF=?CF=?第九十三页,共二百二十一页,2022年,8月28日例:多字节十进制数加法例:有两个4字节BCD数放在2000H和3000H单元中,低位在前,高位在后,将两个数相加,结果放2000H开始的单元中。2000H3000H3284001033775520SIDI第九十四页,共二百二十一页,2022年,8月28日2).程序:MOV BX,0000H ;第1个字节MOV AL,[BX+2000H]ADD AL,[BX+3000H]DAA MOV [BX+2000H],ALINC BX ;第2个字节MOV AL,[BX+2000H]ADC AL,[BX+3000H]DAA MOV [BX+2000H],AL第九十五页,共二百二十一页,2022年,8月28日2).程序:INC BX ;第3个字节MOV AL,[BX+2000H]ADD AL,[BX+3000H]DAA MOV [BX+2000H],ALINC BX ;第4个字节MOV AL,[BX+2000H]ADD AL,[BX+3000H]DAA MOV [BX+2000H],AL第九十六页,共二百二十一页,2022年,8月28日5).加法的ASCII调整

格式:AAA ;功能:在用ADD/ADC指令对两个非压缩BCD数或ASCII码表示的十进制数按二进制相加,并把和值存放在AL的条件下,用此指令将AL中的结果调整为1位非压缩BCD数,其进位位累加到AH中。二进制加法与非压缩BCD吗加法的区别01030409+十进制加法0D0409+二进制加法+06H0103H第九十七页,共二百二十一页,2022年,8月28日AF=1或低4位>9?ALAL+06HAHAH+01AF1,CF1AL高4位清零NAAA调整过程第九十八页,共二百二十一页,2022年,8月28日说明:隐含寻址方式,源操作数都是AL以及标志位AF、CF,目的操作数为AL、AH以及标志位AF、CF。AAA紧跟在ADD/ADC之后,与ADD/ADC一起实现一位非压缩十进制数加法。执行ADD/ADC指令的两个操作数必须为非压缩压缩BCD数或ASCII码,且相加的结果必须存放在AL中。第九十九页,共二百二十一页,2022年,8月28日例:ASCII十进制数加法第一百页,共二百二十一页,2022年,8月28日2、减法指令(1)不带借位的减法

格式:SUBDST,SRC

DSTDST-SRC例:SUBBX,CX;BXBX-CXSUB[BP+2],CL;[BP+2][BP+2]-CLSUBAL,20;ALAL-20SUBSI,5010H;SISI-5010HSUBWORDPTR[DI],1000H;[DI+1][DI][DI+1][DI]-1000H

第一百零一页,共二百二十一页,2022年,8月28日(2)带借位的减法

格式:SBBDST,SRCDSTDSTSRCCF例:SBBAX,2030H;执行:AXAX2030HCF

SBBWORDPTR[DI+2],1000H;

SBBDX,[BX+20H]

(3)减量指令

将操作数内容减一,再回送操作数。

格式:

DECDST;DSTDST1

例:DECAX;AX-1,结果送AX

DECBL;BLBL-1

DECBYTEPTR[DI+2]

;将DI+2所指向的一个字节的内存单元加一第一百零二页,共二百二十一页,2022年,8月28日4)、求补指令

格式:NEGDST对DST求补,0-DST例:NEGAL;对AL中的数求补,结果送ALNEGCX;对CX中的数求补,结果送CX

第一百零三页,共二百二十一页,2022年,8月28日

5)、比较指令格式:CMPDST,SRC;DST-SRC

注意:CMP指令执行相减,但不回送结果,两个操作数的值都保持不变,结果只影响标志位CF、OF、SF、ZF。

大小的比较方法无符号数的比较:用借位标志CF判断若ZF=1被减数=减数;否则:CF=1被减数<减数、CF=0被减数>减数第一百零四页,共二百二十一页,2022年,8月28日带符号数大小比较带符号数的最高位为符号位,减法运算借位标志CF反映的是符号位的借位状态,不能真正反映数值的大小,所以不能用CF来判断,需要用差值的符号来判断。差为正(含等于0)时被减数≥减数,差值为负被减数<减数。在不发生溢出情况OF=0下,此时差是正确的,则SF=1被减数<减数,SF=0被减数≥减数。在发生溢出情况OF=1下,此时差是错误的,则SF=0被减数<减数,SF=1被减数≥减数。综上所述:OF⊕SF=1被减数<减数,OF⊕SF=0被减数≥减数第一百零五页,共二百二十一页,2022年,8月28日6).减法的十进制调整

格式:DAS ;功能:把AL中两个压缩BCD数按二进制减法运算得到的差调整为压缩BCD数,再回送AL。二进制减法与压缩十进制数减法的区别458439-十进制减法4B8439-二进制减法-06H45H第一百零六页,共二百二十一页,2022年,8月28日AF=1或低4位>9?CF=1或高4位>9?ALAL-06HALAL-60HNN减法十进制调整过程第一百零七页,共二百二十一页,2022年,8月28日说明:隐含寻址方式,源和目的操作数都是AL以及标志位AF、CF。DAS紧跟在SUB/SBB之后,实现两位十进制数(BCD码)减法。执行SUB/SBB指令的两个操作数必须为压缩BCD数,且相加的结果必须存放在AL中。第一百零八页,共二百二十一页,2022年,8月28日例:多字节十进制数减法第一百零九页,共二百二十一页,2022年,8月28日7).减法的ASCII调整

格式:AAS ;功能:在用SUB/SBB指令对两个非压缩BCD数或ASCII码表示的十进制数按二进制相减,并把差值存放在AL的条件下,用此指令将AL中的结果调整为1位非压缩BCD数,其借位位累计到AH中。二进制加法与非压缩BCD减法的区别05H05

0409+非压缩BCD减法CF=1FB

0409+二进制减法CF=1-06H高4位清零第一百一十页,共二百二十一页,2022年,8月28日AF=1或低4位>9?ALAL-06HAHAH-01AF1,CF1AL高4位清零NAAS调整过程第一百一十一页,共二百二十一页,2022年,8月28日说明:隐含寻址方式,源操作数都是AL以及标志位AF、CF,目的操作数为AL、AH以及标志位AF、CF。AAS紧跟在SUB/SBB之后,实现一位非压缩十进制数加法。执行SUB/SBB指令的两个操作数必须为非压缩压缩BCD数或ASCII码,且相加的结果必须存放在AL中。第一百一十二页,共二百二十一页,2022年,8月28日例:ASCII十进制数减法第一百一十三页,共二百二十一页,2022年,8月28日3、乘法指令

€二进制乘法特点:

两个8位数相乘,结果为16位数。两个16位数相乘,结果为32位数。€

8086乘法指令特点:

一个乘数总是放在AL(8位)或AX(16位)中;将DX看成是AX的扩展第一百一十四页,共二百二十一页,2022年,8月28日乘法指令分:无符号数MUL

有符号数IMUL例:3×(-2)=63×14=42(2AH)3的补码:0011,-2的补码:111014的补码:11101)直接相乘:对无符号数,结果正确。0011(3)

×1110(-2或14)00101010(2A)

第一百一十五页,共二百二十一页,2022年,8月28日2)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。

0011(3)

×0010(2)00000110(6)

结果添上负号,1

0000110,再取补码:11111001+1=11111010=FAH=-6

3×(-2)=-6,结果正确对于3×14,结果错误。第一百一十六页,共二百二十一页,2022年,8月28日(1)、无符号数乘法

格式:

MULsrc;AXAL×src,字节;DX,AXAX×src,字AL操作数AHAL(8位)(8位)(16位)8位乘法AX操作数DXAX(16位)(16位)(32位)16位乘法第一百一十七页,共二百二十一页,2022年,8月28日MULBL;AXALBLMULCX;DX、AX

AXCXMULBYTEPTR[DI];AL与DI所指单元的8位数相乘,结果送AXMULWORDPTR[SI];AX与SI所指单元的16位数相乘,结果低位送AX,高位送DX

例1第一百一十八页,共二百二十一页,2022年,8月28日4902H×403AH,结果送0510H~0513H单元。

MOVAX,4902HMOVBX,403AHMULBXMOV[0510H],AXMOV[0512H],DX例2第一百一十九页,共二百二十一页,2022年,8月28日(2)、带符号数的乘法

格式:IMULsrc

字节乘:

AX

AL*src,字乘:DX,AX

AX*src,字乘

例:IMULBL;AL的内容乘以BL的内容,结果送AX

IMULDI;AX的内容乘以DI的内容,结果送DX.AX

IMULBYTEPTR[DI];

AL的内容乘以DI所指单元的内容,结果送AX

第一百二十页,共二百二十一页,2022年,8月28日3).乘法的ASCII调整

格式:AAM ;功能:对存在AL中的两个非压缩BCD数相乘的乘积进行非压缩BCD调整,得到两位非压缩BCD数,存放在AX中,AL存放低位,AH存放高位。说明:把两个ASCII码相乘前,须清除高半字节,乘积不超过81。调整过程:ALAL/10的余数,AHAL/10的商影响ZF、SF、PF,但AF、OF、CF无定义。第一百二十一页,共二百二十一页,2022年,8月28日4、除法指令(1)、无符号数除法

格式:

DIVsrc:字节除:AXsrc,AL商,AH余数字除:(DX.AX)src,AX商,

DX余数

注意:被除数在累加器中,且必须是除数的两倍字长。

第一百二十二页,共二百二十一页,2022年,8月28日8位除法:

被除数(16位)除数(8位)

余数(8位)商(8位)AHAL操作数AHAL第一百二十三页,共二百二十一页,2022年,8月28日DXAX操作数DXAX16位除法:

被除数(32)除数(16)

余数(16)商(16)第一百二十四页,共二百二十一页,2022年,8月28日DIVCL;ALAX/CLDIVWORDPTR[DI]若DI=1000H,DX=2000H,AX=3500H1000H单元的值为1020H。

20003500H1020H=?商送AX,余数送DX。1000H1001H2010例第一百二十五页,共二百二十一页,2022年,8月28日(2)、有符号数除法

格式:IDIVsrc

字节除:ALAX

src(商),AH余数,字除:AX(DXAX)src(商)

DX余数

例:

IDIVBL;AL(商)AX

BLIDIVWORDPTR[DI]第一百二十六页,共二百二十一页,2022年,8月28日注意:除法运算时,标志AF、CF、OF、PF、SF、ZF、无意义除法运算时,对双字除以一个字,商的范围为16位;对一个字除以一个字节,商的范围为8位。超出上述范围,产生0号中断,常称为除数为0的中断。对有符号除法,8086指令系统规定余数的符号与被除数的符号相同。除法运算时,要求被除数的字长是除数的二倍。如果除数的字长与除数的字长相同,应对被除数进行扩展。无符号数扩展:对AH或DX清零。有符号数扩展:将低位字或字节的符号向高位扩展。第一百二十七页,共二百二十一页,2022年,8月28日

(3)、扩展字节为字CBW

将AL寄存器的符号位扩展到AH中。AL<80H,执行CBW后,AH=00H。AL>=80H,执行CBW后,AH=FFH。

例:AL=88H,执行CBW,AH=FFH10001000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论