微机原理与接口技术(徐惠民主编)第3章.ppt.ppt

上传人:仙人指路1688 文档编号:2897973 上传时间:2023-03-01 格式:PPT 页数:126 大小:1.20MB
返回 下载 相关 举报
微机原理与接口技术(徐惠民主编)第3章.ppt.ppt_第1页
第1页 / 共126页
微机原理与接口技术(徐惠民主编)第3章.ppt.ppt_第2页
第2页 / 共126页
微机原理与接口技术(徐惠民主编)第3章.ppt.ppt_第3页
第3页 / 共126页
微机原理与接口技术(徐惠民主编)第3章.ppt.ppt_第4页
第4页 / 共126页
微机原理与接口技术(徐惠民主编)第3章.ppt.ppt_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《微机原理与接口技术(徐惠民主编)第3章.ppt.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术(徐惠民主编)第3章.ppt.ppt(126页珍藏版)》请在三一办公上搜索。

1、第 三 章 8086/8088 指 令 系 统1.1 8086/8088寻址方式1.2 8086/8088指令系统,指令及指令集计算机能够识别和执行的基本操作命令,指令的作用,告诉CPU干什么?What?告诉CPU从哪儿取数据?Where?告诉CPU下一条指令在哪儿?Where?,指令的格式,10111011 00110100 00010010,指令的数量,数值计算信息处理多媒体,指令数量取决于CPU的功能,80X86CPU指令数量,8086:133条整数运算输入输出程序控制扩充:多媒体指令 浮点运算指令Cache处理指令,指令系统(CISC复杂与 RISC精简),指令数量影响:,程序的执行速

2、度CPU的复杂程度,指令的通用格式 标号:指令助记符 操作数1,操作数2;注释,80X86指令在内存的存放形式,80X86的指令操作码和操作数由一或多个字节(8位)组成二进制与助记符(把十六进制数1234送CPU的BX寄存器)双操作数:操作码 目的操作数,源操作数,低字节在前(34H)高字节在后(12H),指令的助记符格式,标号:指明指令所在地址。操作码:用来说明该指令所要完成的操作。操作数1:称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果。操作数2:常被称为源操作数src,它表示参与指令操作的一个对象。注释:分号后的内容是对指令的解释。,标号:操作码

3、操作数1,操作数2;注释,操作数类型 按操作数在指令中的所起的作用,可以分为 目的操作数:不仅可以作为指令操作的一个对象,还可 以用来存放指令操作的结果源操作数:表示参与指令操作的一个对象 按操作数的存储位置分,可以分为立即数。就是在指令中直接给出常数。寄存器操作数。其书写形式就是寄存器名。存储器操作数。其书写形式是存储单元的逻辑地址。,指令的操作码和操作数,每种指令的操作码:用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码指令中的操作数:可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址,3.1 8086/8088 寻址方式,指令系统设计了多

4、种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做(操作数)寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率另一方面,对程序设计也很重要,MOV指令的功能,3.1.1 立即数寻址方式,指令中的源操作数为常数,称为立即数寻址.立即数寻址方式常用来给寄存器赋值,多以常量形式出现,MOV AX,0102H;AX0102H,例:MOV AX,1C8FH MOV BYTE PTR2A00H,8FH 错误例:MOV 2A00H,AX;错误!,注:立即数不能作目的操作数。以AF打头的数字,前面要加一个0,如 MOV AX,0F

5、F00H,立即数寻址方式,3.1.2 寄存器寻址方式,操作数存放在CPU的内部寄存器中。源操作数与目的操作数字长要相同不允许将立即数传送到段寄存器,MOV AX,BX;AXBX,例:MOV AX,BX MOV CL,AL 错误例:MOV AX,BL;字长不同,注意:源、目的操作数的长度一致,3.1.3 直接寻址,直接寻址方式的有效地址在指令中直接给出用中括号包含有效地址,表达存储单元的内容默认的段地址在DS段寄存器,可使用段超越前缀改变。偏移地址也可用符号地址来表示,如ADDR、VAR,MOV AX,2000H;AXDS:2000H,MOV AX,2A00H MOV DX,ES:2A00H M

6、OV ES:2A00H,DX MOV SI,TABLE_PTR,例 MOV AX,1000H;若 DS=2000H,(21000H)=32H,(21001H)=45H,功能:是将一个有效地址是1000H的存储单元的内容传送到AX。该存储单元的物理地址为:PA=2000H*10H+1000H=20000H+1000H=21000H指令执行结果为:AX=4532H。,3.1.4 寄存器间接寻址方式,操作数的 偏移地址放在间址寄存器中。只有SI、DI、BX和BP可作间址寄存器。,1)以SI、DI、BX间址寻址时,操作数在数据段(DS)区域中,即:DX*10H+(SI、DI、BX)中的偏移量=操作数物

7、理地址。2)以BP间址寻址时,操作数在堆栈段(SS)区域中,即:SS*10H+(BP)中的偏移量=操作数物理地址。,1选择SI、DI、BX作为间址寄存器操作数在数据段(没有使用段超越时)MOV AX,DI 若已知(DS)=5000H,(DI)=1600H,则操作数的物理地址为:5000H10H+1600H=51600H 执行的结果为(AX)=789AH,2选择BP作为间址寄存器 操作数在堆栈段 MOV BP,AX 若已知(SS)=6000H,(BP)=1500H,则操作数的物理地址为:6000H10H+1500H=61500H 若已知(AX)=5566H,则指令的执行结果为:66H送到6150

8、0H内存单元,55H送到61501H内存单元,3.1.5 变址寻址 以指定的寄存器内容,加上指令中给出的8位或16位位移量(必须要以一个段寄存器作为基地址),作为操作数的地址。作为变址寻址的寄存器可以是SI、DI、BX、BP四个寄存器中的任一个.若用SI、DI和BX作为变址寄存器,操作数在数据段,即段地址在DS寄存器;若用BP变址,则操作数在堆栈段,即段地址在SS寄存器 例:MOV AX,2000HSI 若(SI)=1200H,(DS)=1500H,则操作数的地址为18200H,MOV AX,SI+06H;AXDS:SI+06H,MOV AX,06HSI;AXDS:SI+06H,3.1.6 基

9、址-变址相对寻址方式 这种寻址方式的有效地址是一个基址寄存器内容和一个变址寄存器内容与由指令中指定的8位或16位偏移量之和。,(1)若用BX作为基地址,则操作数在数据段中。DS10H+BX+(SI/DI)+(disp8/disp16)(2)若用BP作为基地址,则操作数在堆栈段中。SS10H+BP+(SI/DI)+(disp8/disp16)例 MOV AX,BX+SI+4500H 若DS=3000H,BX=2000H,SI=1000H,(37500H)=56H,(37501H)=12H,指令执行情况如图所示,执行结果为:AX=1256H。,基址加变址相对寻址方式也可以表示成几种不同的形式,其中

10、COUNT为位移量。MOV AX,BX+SI+COUNT MOV AX,COUNT BX SI MOV AX,BX+COUNT SI MOV AX,BX COUNT SI MOV AX,BX+SI COUNT MOV AX,COUNTSI BX 注意:上述寻址方式中,除立即寻址和寄存器寻址外,其它寻址方式的操作数都是通过访问存储器取得,对这几种寻址方式的段寄存器的使用情况如下:(1)若不指出段基址,80868088会采用默认的段寄存器。规则为:偏移量表达式出现BP则使用SS;否则使用DS。(2)可以用“段寄存器名:”的形式指出段基址,此时默认规则不再起作用。如:“MOV AX,DS:BP”中段

11、基址采用DS值,而不是默认的SS的值。在这里将“DS:”称为段超越或段前缀,它超越了默认的访问段。,注意,1.区别立即数寻址和直接寻址MOV AX,126MOV AX,1262.区别寄存器寻址和寄存器间接寻址 MOV AX,BXMOV AX,BX3.双操作数指令中,不能同为存储器操作数。4.CS不能为目的寄存器。,3.2 8086/8088指令系统,数据传送(Data transfer)算术运算(Arithmetic)逻辑运算和移位(Logic)串操作(String manipulation)控制转移(Control transfer)处理器控制(Processor control),1.通用

12、数据传送指令 一般传送指令MOV 堆栈操作指令PUSH和POP 交换指令XCHG 查表转移指令XLAT 字位扩展指令,3.2.1 数据传送指令,(1)数据传送指令 格式:MOV OPD,OPS 操作:OPD OPS 说明:MOV指令将源操作数OPS的内容传送到目的地OPD。指令执行后OPD与OPS的内容相等,即OPD=OPS,源操作数本身不变。,CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。MOV AL,BL;字节传送MOV CX,BX;字传送MOV DS,BX,立即数传送至CPU内部的通用寄存器组(即AX、BX、CX、DX、BP、SP、SI、DI)MOV CL

13、,4MOV AX,03FFHMOV SI,057BH CPU内部寄存器与存储器之间的数据传送。MOV AL,2000HMOV AX,SIMOV DI,CXMOV SI,BLOCKBPMOV DS,DATASI+BXMOV DESTBP+DI,ES,能实现用立即数给存储单元赋值MOV BYTE PTR 2000H,25HMOV WORD PTR SI,35H注意:BYTE PTR 指字节单元;WORD PTR指字单元,对于MOV 指令应注意几个问题:MOV传送指令中,不允许对CS和IP进行操作;两个存储器操作数之间不允许直接进行信息传送;若要将2000H单元的内容,传送至同一段的3000H单元中

14、去,MOV指令不能直接完成这样的传送,必须借助寄存器来完成传送:MOV AL,2000H;MOV 3000H,AL,两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;(X)MOV DS,100H;(X)MOV DS,ES;目的操作数,不能用立即寻址方式。MOV指令不影响标志位,2.堆栈操作指令。堆栈:按后进先出的原则组织的内存区域即堆栈段。用SS指示段地址。堆栈指针SP总是指向栈顶(最后压入的数的地址)。SP的初值规定了所用堆栈的大小(堆栈的深度),一个栈的深度最大为64kB。堆栈用途:临时存放数据、传递参数、保存和恢复寄存器 堆栈指令:入栈和出栈,1)入栈指令 格式:

15、PUSH OPS 操作:SP SP-2,SP+1 SP OPS 操作数类型:OPS可以是存储器、通用寄存器和段寄存器,但不能是立即数。说明:PUSH指令先将SP的内容减2,然后再将操作数OPS的内容送入由SP指出的栈顶即偏移地址为SP和SP+1的两个连续字节中。例10 PUSH AX;通用寄存器内容入栈 PUSHCS;段寄存器内容入栈 PUSHSI;字存储单元内容入栈,2)出栈指令 格式:POP OPD 操作:OPD SP+1 SP,SP SP+2 操作数类型:OPD可以是存储器、通用寄存器或段寄存器(但不能是CS),同样,不能是立即数。说明:POP指令先将堆栈指针SP所指示的栈顶存储单元的值

16、弹出到操作数OPD中,然后再将SP的内容加2。入栈和出栈操作如图所示。,例:POP AX;栈顶内容弹出至通用寄存器 POP ES;栈顶内容弹出段寄存器 POP MEMDI;栈顶内容弹出至字存储单元,(3)数据交换指令 格式:XCHG OPD,OPS 操作:OPD OPS 操作数类型:可以是寄存器或存储器,但不能二者同时为存储器。说明:XCHG指令将两个操作数内容进行交换。交换的内容可以是一个字节(8位),也可以是一个字(16位),两个操作数的长度必须一致。(段寄存器不能参加交换)例XCHGAL,CL;8位寄存器间内容交换XCHGAX,DX;16位寄存器间内容交换XCHGBX,DATASI;寄存

17、器与存储单元间交换,4累加器专用传送指令 输入输出指令IN,OUT输入输出指令完成外设与CPU之间的数据传送。输入指令IN用于从外设端口接收数据,输出指令OUT则向端口发送数据。IN指令一般格式:IN AL,n;ALnIN AX,n;AXn+1nIN AL,DX;ALDX IN AX,DX;AXDX+1DX 功能:从I/O端口输入数据至AL或AX.输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。,输出指令 格式:OUT PORT,AL/AX 操作:(PORT)AL/AX 操作数类型:同输入指令 说明:将累加器AL(8位)或AX(16位)的内容输出到指 令指定的I/O端口中。注意

18、:输入输出指令不影响标志位例 OUT 40H,AL;(40H)AL OUT 20H,AX;(21H,20H AX)OUT DX,AL;(DX)AL OUT DX,AX;(DX1,DX)AX,(2)查表转换指令格式:XLAT 功能:完成一个字节的查表转换:AL=(DS)16(BX)+(AL)要求:寄存器AL的内容作为一个256字节的表的下标;表的基地址在BX中,转换后的结果存放在AL中。,例:设(DS)=A000H,(BX)=0010H,表的起始地址为A0010H,表中放数字0-9的ASCII码 MOVBX,0010H MOVAL,06H XLAT 执行该程序后,(AL)=36H本指令可用在数制

19、转换、函数表查表、代码转换等场合。,A000:0010,30H,31H,A000:0016,36H,3地址传送指令(1)有效地址送寄存器指令 格式:LEA REG,OPS 操作数类型:OPS为存储器操作数,REG为16位通用寄存器。说明:将源操作数OPS的有效地址即16位偏移地址装入到16位通用 寄存器REG中。,例 设DS=3000H,BX=2000H,SI=1000H,LEA AX,BX+SI+1000H 执行的结果是:AX=BX+SI+1000H=4000H区别:MOV AX,BX+SI+1000H指令是将偏移地址为BX+SI+1000H的内存单元的内容送到AX中,结果是AX=1256H

20、。,例 LDS SI,0100H设:原来DS=3000H,(30100H)=60H,(30101H)=05H,(30102H)=18H,(30103H)=20H,上述指令执行后,SI=0560H,DS=2018H,执行过程如图3-11所示。,(2)地址指针装入DS指令 格式:LDS REG,OPS 操作数类型:OPS为存储器操作数,REG为16位通用寄存器。说明:将OPS指定的内存中读取双字存储单元内容,将其中的 低字的内容赋给REG,高字内容传赋给DS。,(3)地址指针装入ES指令 格式:LES REG,OPS 操作数类型:OPS为存储器操作数,REG为16位通用寄存器。这条指令除将地址指针

21、的段地址部分送入ES外,与LDS类似。例如:LES DI,BX,6.标志传送指令指令格式:LAHF;AH FLAGS的低8位 SAHF;FLAGS的低8位 AH说明:LAHF和SAHF指令隐含的操作数为AH寄存器和标志寄存器FLAGS的低半字节。涉及标志寄存器FLAGS中的5个状态标志位为SF、ZF、AF、PF以及CF。,(2)标志入、出栈指令 指令格式:PUSHF;SP SP-2,SP+1SP FLAGS POPF;FLAGS SP+1SP,SP SP+2 这两条指令可以用来修改标志寄存器中标志位的值。此指令不影响标志位。,3.2.2 算术运算指令,算术运算类指令用来执行二进制的算术运算:加

22、、减、乘、除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志重点掌握加法指令:ADD、ADC、INC 减法指令:SUB、SBB、DEC、CMP、NEG,加法和减法指令,加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位,1加法指令(1)加法指令 格式:ADD OPD,OPS 操作:OPD OPD+OPS 说明:ADD指令将OPD与OPS相加,并将结果存回OPD。加法指令影响全部6个状态标志位。操作数类型:OPD

23、可以是寄存器或存储器,OPS可以是寄存器、存储器或立即数。但是OPS和OPD不能同时为存储器。另外,OPD、OPS不能为段寄存器。(段寄存器不能参加、减、乘、除运算)。具体操作数组合见表3-1,适合加、减、乘、除运算。,表3-1加、减、乘、除运算操作数类型组合,例:ADD AL,20;累加器内容与立即数相加 ADD DX,SI;寄存器内容相加 ADD AX,BX;寄存器与存储器内容相加 ADD DATADI,AL ADD BYTE PTRBPSI,50H;存储器内容与立即数 相加,例题1 加法,MOV AX,7348H;AX7348HADD AL,27H;AL48H27H6FH,AX736FH

24、;OF0,SF0,ZF0,PF1,CF0ADD AX,3FFFH;AX736FH3FFFHB36EH;OF1,SF1,ZF0,PF0,CF0,(2)带进位加法指令 格式:ADC OPD,OPS 操作:OPD OPD+OPS+CF 说明:ADC指令与ADD指令有些相似,但是它将OPD与OPS相加时,同时还要加上进位标志CF的内容,然后将结果送回OPD。ADC指令也将根据运算结果修改状态标志位。带进位加法指令主要用于数据位数较长、需要分段运算的加法运算。在进行多字加法运算时,低位字用ADD指令相加,高位用ADC指令相加,以接受低位产生的进位。,例2 计算两个四字节长整数之和,数NA=7A546C0

25、8H,NB=12F0497DH,求NA+NB。分析:这是两个32位二进制数的加法,ADD指令一次只能完成两个16位二进制数的加法,32位数的加法要分两次进行:用ADD指令先加低16位,低16位产生的CF值,通过高16位ADC指令加进去,以保证结果的正确。解:MOV BX,6C08H;取加数的低字 ADD BX,497DH;和另一个加数的相应字相加 MOVAX,7A54H;取加数的高字 ADCAX,12F0H;和另一个加数的相应字相加 程序段的运行结果:AX中为和的高字,BX中为和的低字。,(3)加1指令 格式:INC OPD 操作:OPD OPD+1 说明:INC指令将OPD加1。注意:指令可

26、以是寄存器或存储器,但不能是段寄存器和立即数。INC指令常常用于循环程序中修改地址或者进行加法计数。例 INC SI;将SI寄存器内容加1 INC BYTE PTRBX;将存储器字节单元BX内容加1 INC WORD PTRSI;将存储器字单元SI内容加1,2减法指令(1)减法指令 格式:SUB OPD,OPS 操作:OPD OPD-OPS 说明:SUB指令用OPD减去OPS,结果送回OPD。SUB指令对状态标志位有影响。对操作数类型组合的要求与加法指令相同,见表3-1。(2)带借位减法指令 格式:SBB OPD,OPS 操作:OPD OPD OPS CF 说明:SBB指令将OPD减去OPS,

27、同时减进位标志CF,并将结果送回OPD。该指令主要用于多字节数的分段减法。SBB指令对标志位的影响与SUB指令相同。SBB指令中操作数的类型组合也与SUB指令相同。,例3:SUB SI+14H,0136H 执行前:(DS)=3000H,(SI)=0040H,(30054H)=4336H 执行后:(30054H)=4200H,SF=0,ZF=0,CF=0,OF=0,例4:SBB SI+14H,0136H 执行前:(DS)=3000H,(SI)=0040H,(30054H)=4336H,CF=1 执行后:(30054H)=41FFH,(3)减1指令 格式:DEC OPD 操作:OPD OPD-1

28、说明:DEC指令使OPD减1例DEC CX;寄存器内容减1 DEC BYTE PTRDI;存储单元内容减1(4)求补指令 格式:NEG OPD 操作:OPD 0-OPD 说明:NEG指令使操作数求补,即用“0”减去OPD,结果送回OPD。,(5)比较指令 格式:CMP OPD,OPS 操作:OPD-OPS 说明:,不保存结果,只影响标志位,用于转移,判断相等:用ZF标志,1表示相等,判断大小,有符号数:用SF与OF的异或结果。1表示小于,无符号数:用CF标志。1表示小于,例:CMP AL,100CMP DX,DI 比较指令主要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是

29、否相等。,相等的比较:若两者相等,相减以后结果为零,ZF标志为1,否则为0。若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。大小的比较:如果是两个无符号数(如CMPAX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0),显然AXBX;若产生了借位(即CF1),则AXBX。,大小的比较:如果是两个符号数(如CMP AX,BX)进行比较,则可以根据OF标志与SF标志的状态判断两数大小。若结果的OF与SF的值相同,则AXBX;反之,则AXBX。,例4:判断寄存器AX与BX的内容是否相等,若相等,使DX=1,否则,使DX=0。解:程序如下:CM

30、PAX,BX;比较AX与BX的内容 JZEQUAL;相等,转EQUAL MOVDX,0;不等,向DX送0 JMPNEXTEQUAL:MOV DX,1;向DX送1NEXT:HLT,说明:乘法指令中只列出OPS,OPD是隐含的。两条指令的功能是一样的,但是对同样的数其运算结果 是不同的。,3乘法指令 乘法指令有两条,分别用于无符号数和符号数的乘法。格式:MUL OPS;无符号数乘法 IMUL OPS;带符号数乘法,操作:字节乘法:AX ALOPS 字乘法:(DX,AX)AXOPS 操作数:OPS可以是寄存器或存储器,OPD只能是AL/AX,影响标志,隐含寄存器,MOV AL,20HMOV BL,1

31、0HMUL BL,结果默认为(DX)(AX)或(AX),乘数默认为AX或AL,OF、CF,结果超过16位或32位时,CF(OF)=1,4除法指令 格式:DIV OPS;无符号数除法 IDIV OPS;带符号数除法 操作:字节除法:AL AX/OPS的商;AH AX/OPS的余数 做字除法:AX(DX,AX)/OPS的商 DX(DX,AX)/OPS的余数 说明:除法规定:除数只能是被除数的一半字长。当被除数为16位时,除数应为8位;被除数为32位时,除数应为16位。被除数为16位时,应存放在AX中。被除数为32位时,应存放在DX(高位)和AX(低位)中。,隐含寄存器,MOV AX,1234HMO

32、V BL,21HDIV BL,商默认为(AL)或(AX),被除数默认为(AX)或(DX)(AX),余数默认为(AH)或(DX),被0除,停止继续执行,产生0号中断,显示“被零除”信息,4.2 符号扩展指令(1)字节扩展指令 格式:CBW 操作:把AL中的符号扩展到AH。如果AL80H,则AH00H,否则AH0FFH。(2)字扩展指令 格式:CWD 操作:把AX的符号扩展到DX。如果AX8000H,则DX0000H,否则DX0FFFFH。注意:上述两条指令仅限于将扩展数放在AL或AX中进行。,例 若AL=100,BL=15,试编写程序段,求出AL除以 BL的商和余数分别存放在DL和DH中。解:程

33、序如下:CBW;字节扩展到字 DIVBL;除法 MOVDL,AL;存商 MOVDH,AH;存余数 HLT,5十进制数(BCD码)运算调整指令 BCD码有两类:压缩BCD码:就是通常的8421码;非压缩BCD码:用8个二进制位表示一个十进制位BCD码运算时,应分两步进行:(1)先按二进制数运算规则进行运算,得到中间结果。(2)用十进制调整指令对结果进行修正,得到运算结果。注意:BCD码的运算只能在8位累加器AL中进行;十进制数的乘、除运算只能用非压缩的BCD格式;除法运算时,应先调整,后运算。,(1)压缩型BCD码调整指令 格式:DAA;加法调整 DAS;减法调整 说明:将加法(ADD或ADC)

34、或减法(SUB或SBC)运算的结果(在AL寄存器中)调整为压缩BCD码。(2)非压缩型BCD码调整指令、加减法调整 格式:AAA;加法调整 AAS;减法调整 说明:将加法(ADD或ADC)或减法(SUB或SBC)运算的结果(在AL寄存器中)调整为非压缩BCD码。调整后的AL寄存器中高4位被清0,如有进位或借位,则在AH中。,、乘法调整 格式:AAM 说明:把AL中的数值调整为非压缩BCD码,并存入AX中。、除法调整 格式:AAD 操作:AL AH10+AL,AH 0 说明:将AH寄存器的内容乘以10并加上AL寄存器的内容,结果送回AL,同时将AH清0。其操作实质是将AX寄存器中的非压缩BCD码

35、转换成二进制数,存放在AL中。,7+5=12 用组合的BCD码表示运算过程:,16进制加法,AAA指令调整为10进制结果,BCD码逢十进一,16进制逢16进1,因为低4位大于9,所以在个位上加6,使其产生进位,同时AF=1,CF=1。,3.2.3 逻辑运算和移位指令,1逻辑运算指令(1)逻辑“非”运算,对一个操作数执行逻辑非运算,NOT OPRD;OPRD OPRD,按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”,对两个操作数执行逻辑与运算,结果送目的操作数,AND OPD1,OPD2;OPD1OPD1OPD2,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,(

36、2)逻辑“与”运算,对两个操作数执行逻辑或运算,结果送目的操作数,OR OPRD1,OPRD2;OPRD1OPRD1OPRD2,只要相“或”的两位有一位是1,结果就是1;否则,结果为0,(3)逻辑“或”运算,对两个操作数执行逻辑异或运算,结果送目的操作数,XOR OPRD1,OPRD1;OPRD1OPRD1OPRD1,只有相“异或”的两位不相同,结果才是1;否则,结果为0,(4)逻辑“异或”运算,对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志,TEST OPRD1,OPRD1;OPRD1OPRD1,AND与TEST指令的关系,同SUB与CMP指令的关系一样,(5)逻辑

37、测试指令,TEST AL,01HJNZ P1,;检验AL最低位是否为1,例 逻辑运算指令的应用,AND BL,11110110B;BL中D0和D3清0,其余位不变OR BL,00001001B;BL中D0和D3置1,其余位不变XOR BL,00001001B;BL中D0和D3求反,其余位不变,AND指令可用于复位某些位(同0相与),不影响其他位,OR指令可用于置位某些位(同1相或),不影响其他位,XOR指令可用于求反某些位(同1相异或),不影响其他位,2移位指令,将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存

38、储单元;后一个操作数表示移位位数:该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数(移位位数 大于1只能CL表示)按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF,(1)逻辑左移/算术左移指令 格式:SHL OPD,M;逻辑左移指令 SAL OPD,M;算术左移指令 操作:如图所示。,说明:左移1位时,相当于无符号数乘上2。例 SHL AH,1;AH内容左移1位 MOV CL,3 SAL SI,CL;SI内容左移3位,(2)逻辑右移指令 格式:SHR OPD,MT 操作:如图所示。说明:SHR指令将OPD顺序向右移1位或移CL寄存器中指定的位数。无符号数右移

39、1位相当于除以2。例MOVBL,20H;BL=20H SHRBL,1;BL=10H,(3)算术右移指令 格式:SAR OPD,M 操作:如图3-17所示。说明:算术右移一位相当于将该数除以2。例SARAL,1 SARDI,CL,(4)循环移位指令ROL OPRD,M;左循环移位 ROR OPRD,M;右循环移位 RCL OPRD,M;带进位左循环移位RCR OPRD,M;带进位右循环移位,前两条循环指令,未把标志位CF包含在循环的环中,后两条把标志位CF包含在循环的环中,相当于9位循环。循环指令可以对字节或字进行操作。操作数可以是寄存器操作数,也可以是内存操作数。可以循环移位一次,也可由CL的

40、内容所决定的次数。左移一位,只要左移以后的数未超出一个字节或一个字的表 达范围,则原数的每一位的权增加了一倍,相当于原数乘2 右移位相当于除以2.,利用循环移位指令可以对寄存器/存储器中进行测试。例 测试AL寄存器中第5位的状态,为“0”时转向ZERO,否则向下继续执行。(用循环移位指令实现)MOV CL,6 ROR AL,CL;将AL的bit5移入CF JNC ZERO;若CF=0,则转向ZERO处;否则,继续执行ZERO:,3.2.4 串操作指令,串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字串。源操作数用寄存器SI寻址,默认在数据段DS中。目的操作数用寄

41、存器DI寻址,默认在附加段ES中。字串长度默认在CX中,存取或搜索的值默认在AL中。每执行一次串操作指令,SI和DI将自动修改:1(对于字节串)或2(对于字串)执行指令CLD指令后,DF=0,地址指针增1或2执行指令STD指令后,DF=1,地址指针减1或2,重复指令前缀串操作类指令可以与重复指令前缀配合使用。从而可以使操作得以重复进行,及时停止。重复指令前缀的几种形式见下表:,1串传送指令 格式:MOVS 目的串,源串;一般格式 MOVSB;字节格式 MOVSW;字格式 操作:ES:DI DS:SI SI SI1,DI DI 1(字节操作)或SI SI2,DI DI 2(字操作)说明:MOVS

42、指令将由DS:SI作为指针的源串中的一个字节或字内容传送到由ES:DI为指针的目的串单元中,然后自动修改地址指针,指向下一字节/字。MOVS指令可与重复前缀REP联用,实现整个数据块的传送。,例:在数据段中有一字符串,其长度为17,要求把它们传 送到附加段中的一个缓冲区中。其中源串存放在数据段中从符号地址MESS1开始的存 储区域内,每个字符占一个字节;MESS2为附加段中 用以存放字符串区域的首地址。LEA SI,MESS1;置源串偏移地址 LEA DI,MESS2;置目的串偏移地址 MOV CX,17;置串长度 CLD;方向标志复位 REP MOVSB;字符串传送,2串比较指令 格式:CM

43、PS 源串,目的串;一般格式 CMPSB;字节串比较 CMPSW;字串比较 操作:DS:SI-ES:DI SI SI1,DI DI1(字节操作)或 SI SI2,DI DI2(字操作)说明:将由SI作为指针的源串中的一个字节或字与由DI为指针 的目的串的相应元素相比较(源串减目的串,结果不送回 目的串,但影响标志位),然后自动修改地址指针,指向 下一元素。,例 试比较两个长度为N的字符串STR1和STR2是否相等。若相等,置DL=1。否则,DL=0。解:比较两字符串相等可采用对应字符逐个比较的方法。LEASI,STR1 LEADI,STR2 MOVCX,N CLD REPZCMPSB;未到串尾

44、且对应字符相等时,继续比较 JNZNOEQ;若串不等,转NOEQ MOVDL,1;若串相等,DL=1 JMPNEXTNOEQ:MOVDL,0;串不等,DL=0NEXT:HLT,3.串扫描指令 格式:SCAS 目的串 SCASB;字节操作 SCASW;字操作 操作:AL/AX-ES:DI DI DI 1(字节操作)或DI DI 2(字操作)说明:将AL或AX的内容减去由DI作为指针的目的串元素,结果影响标志位,但累加器及目的串的内容不变。注意:搜索到关键字后,DI内是该字符的下一个字符的地址。,例:在附加段中有一个字符串,存放在以符号地址MESS2 开始的区域中,长度为17,要求在该字符串中搜索

45、空格符(ASCII码为20H)。实现上述功能的程序段如下:LEA DI,MESS2;装入目的串偏移地址 MOV AL,20H;装入关键字节 MOV CX,17;装入字符串长度 CLD REPNE SCASB 该程序段执行之后,DI的内容即为相匹配字符的下一个字符的地址,CX中是剩下还未比较的字符个数。若字符串中没有所要搜索的关键字节(或字),则当查完之后(CX)0退出重复操作状态。,4.串存储指令 格式:STOS 目的串 STOSB;字节操作 STOSW;字操作 功能:把指令中指定的一个字节/字,传送到附加段中由DI间接寻址的字节/字内存单元中去,然后,根据方向标志DF及所进行操作的数据类型(

46、字节或字)对DI进行修改操作。在指令重复前缀的控制下,可连续将AL(AX)的内容存入到附加段中的一段内存区域中去,该指令不影标志位。,例:要对附加段中从MESS2开始的5个连续的内存 字节单元进行清0操作 可用下列程序段实现:LEA DI,MESS2;装入目的区域偏移地址 MOV AL,00H;为清零操作准备 MOV CX,5;设置区域长度 CLD REP STOSB,5.串装入指令 格式:LODS 源串;一般格式 LODSB;字节操作 LODSW;字操作 操作:AL/AX DS:SI SI SI 1(字节操作)或 SI SI 2(字操作)说明:将由SI作为指针的源串元素传送到AL(字节操作)

47、或AX(字操作),然后自动修改指针,指向下一元素。LODS指令一般不用重复前缀。,3.2.5 程序控制指令,控制转移类指令用于实现程序分支、循环、过程等程序结构,是仅次于传送指令的最常用指令。控制程序流向的指令分别为:转移指令、循环控制指令、过程调用指令和中断指令。控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变。,1无条件转移指令 使程序无条件地跳转到指令中指定的目的地址去执行。格式:JMP(1)直接转移 格式:JMP 目标标号 操作:IP IP+disp16(目标标号所在处的偏移量)说明:该指令将当前IP的内容加上disp16,代码段寄存器CS的内 容不变,从而使控制转移到本

48、程序段内的一个目的地址。相对位移量可正可负,其范围在-32768+32767之间。,例 MOV AX,BX JMP NEXT;转到NEXT处执行 NEXT:MOV AX,0,(2)段内直接短转移 格式:JMP SHORT 目标标号 操作:IP IP+disp8 说明:与段内直接转移类似,只是指令转移的相对位移量用8位二进制表示,范围在-128+127之间。(3)段内间接转移 格式:JMP 字地址指针 操作:IP EA 说明:指令中的操作数可以是一个16位的寄存器或字存储单元地址。指令用指定的寄存器或存储单元的内容作为转移目标的偏移地址EA取代原来IP的内容,以实现程序的转移。由于是段内转移,C

49、S寄存器的内容不变。,例 JMP AX;IP AX JMP BX;IP BX+1BX,(4)段间直接转移 格式:JMP目标标号 操作:IP OFFSET 目标标号 CS SEG 目标标号 说明:目标标号是其他程序段内的一个标号。指令将目标标号的偏移地址取代IP的内容,同时将目标标号的段基址装入CS(SEG 是取段基址操作符)。(5)段间间接转移 格式:JMP双字地址指针 操作:IP EA CS EA+2 说明:指令中的操作数是一个32位的双字存储单元。指令将存储单元前两个字节内容送到IP寄存器,后两个字节内容送到CS寄存器,以实现向另一代码段的转移。,2.条件转移指令:8086/8088有18

50、条不同的条件转移指令。它们根据标志寄存器中各标志位的状态,决定程序是否进行转移。条件转移指令的目的地址必须在现行的代码段(CS)内,并且以当前指针寄存器IP内容为基准,其位移必须在十127-128的范围之内:一个8位位移量(带符号数),表示本条件转移指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移;8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短距离转移。条件转移指令不影响标志,但要利用标志。,(1)根据单个标志位的条件转移指令,例 根据某一字节带符号数X是正、是零还是负使程序分别转移至标号为PLUS、ZERO、MINUS处执行:MOVAL,X;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号