四章指令系统.ppt

上传人:sccc 文档编号:5387994 上传时间:2023-07-02 格式:PPT 页数:126 大小:1.64MB
返回 下载 相关 举报
四章指令系统.ppt_第1页
第1页 / 共126页
四章指令系统.ppt_第2页
第2页 / 共126页
四章指令系统.ppt_第3页
第3页 / 共126页
四章指令系统.ppt_第4页
第4页 / 共126页
四章指令系统.ppt_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《四章指令系统.ppt》由会员分享,可在线阅读,更多相关《四章指令系统.ppt(126页珍藏版)》请在三一办公上搜索。

1、1,第四章 指令系统,4.1 8086/8088指令系统概述4.2 8086指令系统,2,一、8086/8088指令系统的特点 1.指令系统的兼容性 2.指令格式的灵活性 3.寻址方式的多样性 4.可对多种类型的数据进行处理 5.可构成多处理机系统,3,二、指令格式,指令:指令是指示计算机完成特定操作的命令指令系统:指令系统是计算机能够执行全部命令的集合,它取决于计算机的硬件设计。指令系统因机而异,没有通用性。,4,指令格式:,操作码 操作数,操作数,源操作数:指令加工之前的数据目的操作数:指令加工之后形成的数据,5,指令中的操作数表征方法:,表征参加操作的数据本身 立即数 表征数据存放的地址

2、,寄存器 存储器,6,操作数类型,1、立即数操作数:表示参加操作的数据本身,可以是8位或16位 例:MOV AX,1234H;AX 1234H MOV BL,22H 立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内,7,2、寄存器操作数:表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOV AX,BX MOV DL,CH,8,3、存储器操作数:例:MOV AX,1200H MOV AL,1200H,9,例如:MOV AL,BP 该指令生成的机器码是8A4600H,10,三、寻址方式 计算机可以对存储器、寄存器中的数据进行各种操作,如取数、存数、加

3、运算、减运算等,这就需要找到数据的存放地址,再对其中的数据执行相应的操作,最后将运算结果送往指定的地址单元或寄存器。指令的寻址方式就是寻找指令操作数所在地址的方式,以确定数据的来源和去处。熟练地掌握寻址方式对学习指令系统和汇编语言程序设计具有重要作用。下面介绍8086/8088的几种寻址方式。,11,1.立即寻址指令操作数部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码段中。立即数有 8位和16位之分。,12,注意:(1)立即寻址方式只能用于源操作数,主要用于给寄存器赋值。(2)立即寻址方式不执行总线周期,执行速度快。,2.寄存器寻址操作数放在寄存器内,由指令直接给出某个寄存器的名

4、字,以寄存器的内容作为操作数。寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。,13,例2:MOVAX,CX DECAL 注意:(1)寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快。(2)寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数。,14,3.直接寻址操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址EA,即段内偏移地址,表示操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的16位二进制数。例3:MOV A

5、H,2100H;将DS段中2100H单元的内 容送给AH MOV AX,2100H;将DS段中2100H单元的内 容送给AL;2101H单元的 内容送给AH。MOV 1000H,AH;DS:1000H(AH),15,DS=3000H MOV AX,2000H,16,注意:(1)直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中。(2)如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名。,例4:MOV AH,ES 2000H 将附加段寄存器ES的内容乘16,再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中。,17,4.寄存器间接寻址

6、 操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址EA(偏移地址)。寄存器仅限于BX、BP,SI、DI。当使用BX、SI、DI时,操作数所在存储单元的段地址存在数据段寄存器DS中 当使用BP时,操作数所在存储单元的段地址存在堆栈段寄存器SS中。,18,MOV BX,SI,19,例5:已知:DS=2100H,DI=2000H 指令:MOV AX,DI 解:物理地址=16DS+DI=162100H+2000H=23000H 指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。注意:1.只有SI,DI,BX,BP 可作为间址寄存器。2.若操作数所在存储单元不在数

7、据段DS中,需要在指令中用段超越前缀表明其所在段的段名。,20,5.基址寻址操作数在存储器内,指令中寄存器(BX或BP)的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。使用BX时,段地址为DS的内容;使用BP时,段地址为SS的内容。,21,例6:SS=2000H,BP=1000H,COUNT=2000H(16位偏移量)指令:MOV AX,COUNTBP 解:物理地址=16SS+BP+16位偏移量=20000H+1000H+2000H=23000H 指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。MOV BL,2BX或 MOV BL,BX+2;

8、(DS:BX+2)BL,22,6.变址寻址操作数在存储器内,指令将变址寄存器SI、DI内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。段地址规定为DS的内容。,例7:DS=3000H,SI=1000H,COUNT=2000H 指令:MOV AX,COUNTSI 解:物理地址=16DS+SI+16位偏移量=30000H+1000H+2000H=33000H 指令执行结果是将33000H和33001H单元的内容送入寄存器AX中。,23,MOV AX,2DI;AX(DS:(DI)+2)MOV AX,DI+2;AX(DS:(DI)+2)MOV BX,COUNT SI,24,

9、7.基址加变址寻址操作数在存储器内。指令将基址寄存器BX、BP与变址寄存器SI、DI的内容之和再加上偏移量(8位或16位),得到操作数所在存储单元的有效地址EA。当使用BX时,段寄存器为DS。当使用BP时,段寄存器为SS。,25,例8:已知:DS=2000H,BX=1000H,SI=0500H,MK=1120H 指令:MOV AX,MKBXSI 解:物理地址=20000H1000H0500H 1120H=22620H指令执行结果是将22620H、22621H单元的内容送入寄存器AX中。,26,MOV AX,BXSI,27,8.字符串寻址用于字符串操作指令。规定变址寄存器SI中的内容是源数据串的

10、段内偏移地址,而变址寄存器DI中的内容是目标数据串的段内偏移地址。源数据串的段地址规定是数据段DS,目标数据串的段地址规定是附加段ES。指令执行后SI和DI的内容自动增量(或减量),增(或减)值为1或2。例:MOVSB 执行后:DISI SISI1 DIDI1,28,9.I/O端口寻址寻找输入输出设备的端口地址,可分为直接端口寻 址和间接端口寻址。直接端口寻址:由指令直接给出I/O设备的端口地址。它规定端口地址为8位,能寻址256 个端口间接端口寻址:由DX给出I/O设备的端口地址。由于DX 是16位,因此间接端口寻址能寻址多达64K 个端口。,例:IN AL,20H;将地址为20H的外设内容

11、读入AL中 OUT DX,AL;AL中内容输出给以DX的内容为地址 的外设,29,10、隐含寻址 指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中。例:AAA;对AL中的内容进行十进制加法调整,并 把调整后的结果放入AH和AL中。这条指令的隐含操作数是AH和AL。,30,例:设BX=0158H,DI=10A5H,位移量=1B57H,DS=2100H,求各寻址方式下的有效地址和物理地址。1)直接寻址 MOV AX,1B57H 有效地址=1B57H 物理地址=21000H+1B57H=22B57H2)寄存器间接寻址 MOV AX,BX 有效地址=0158H 物理地址=21000H+015

12、8H=21158H3)基址寻址 MOV AX,BX+1B57H 有效地址=0158H+1B57H=1CAFH 物理地址=21000H+1CAFH=22CAFH4)变址寻址 MOV AX,DI+1B57H EA=10A5H+1B57H=2BFCH 物理地址=21000H+2BFCH=23BFCH5)基址加变址寻址 MOV AX,BX+DI+1B57H EA=0158H+10A5H+1B57H=2D54H 物理地址=21000H+2D54H=23D54H,31,4.2 8086的指令系统,指令系统包括九大类、133种基本指令,通过寻址方式的变化与数据形式(字节、字型)的组合,可构成上千条指令。指令

13、系统按功能分为数据传送类、算术运算类、逻辑运算与移位类、串操作类、控制转移类、处理机控制、输入输出、中断等,本节将分别说明。,32,4.2.1数据传送指令数据传送类指令实现CPU内部寄存器之间、CPU与存储器之间、CPU与I/O端口之间的数据传送。1.通用数据传送指令包括 MOV、进栈、出栈指令、交换指令和换码指令。(1)一般数据传送指令 MOV(8位/16位)格式:MOV OP目,OP源 功能:OP源 OP目 要求:OP目 可以是寄存器(除CS外)、存储器 OP源可以是寄存器、存储器和立即数,33,34,例:MOV AL,BL;BL寄存器的内容送ALMOV SP,2AC0H;立即数2AC0H

14、送SPMOV DI,AX;AX中的16位数送DI和DI+1单元 MOV SI,ES:BP;附加段中BP所指向的两个单 元的内容送SI寄存器 MOV WORD PTR SI,6070H,35,注意:MOV指令的两个操作数(源、目的)均可采用不同的寻址方式。源操作数和目的操作数的类型必须一致不允许把立即数作目的操作数,也不允许向段寄存器送立即数。不允许在段寄存器之间、存储器单元之间传送数据。CS、IP寄存器不能用作目的操作数。MOV CS,AX 一般传送指令不影响标志位。,36,例:判断下列指令正确与否:MOV AL,BL MOV CX,BX MOV BX,DL MOV DX,34H MOV DS

15、,1234H MOV ES,AX MOV CS,BX MOV SI,CX MOV DI,SI MOV 2000H,AX,类型不一致,类型不一致,类型不一致 立即数不能送段寄存器,类型不一致 立即数不能送段寄存器,类型不一致 立即数不能送段寄存器 CS不能作目的操作数,类型不一致 立即数不能送段寄存器 CS不能作目的操作数,类型不一致 立即数不能送段寄存器 CS不能作目的操作数 不能同时为存储器操作数,类型不一致 立即数不能送段寄存器 CS不能作目的操作数 不能同时为存储器操作数 目的不能为立即数,37,(2)堆栈操作指令堆栈:是按“后进先出”原则工作的一段存储器区域。堆栈寄存器SS段地址堆栈指

16、针SP始终当前栈顶所在的存储单元地址,即最新入栈数据所在的存储单元的地址。压栈操作:PUSH OP 功能:把OP字数据压入栈中,结果SP-2SP 原则:高字节压在高地址,低字节压在低地址 执行过程:SPSP-1;SP OPH SPSP-1;SP OPL,38,例:PUSH AX SP-1 SP,压AH(2)SP-1 SP,压AL,SP,SP SP-1,SP,AH,AL,SP SP-1,39,出栈操作:POP OP 功能:从栈中弹出数据 OP,结果SP+2SP 执行过程:OPL SP;SPSP+1 OPHSP;SPSP+1,例:POP DX 弹出AL DL,SP+1 SP(2)弹出AH DH,S

17、P+1 SP,SP,SP SP+1,SP SP+1,40,例:已知:AX=1122H,BX=3344H,SP=1010H 执行指令:PUSH AX PUSH BX POP AX POP BX 执行后AX,BX,SP的结果?,解:执行结果为 AX=3344H BX=1122H SP=1010H,41,注意:堆栈操作总是按字进行的。压入指令,SP-2,数据在栈顶。弹出指令正好相反。操作数可以是存储器、寄存器或段寄存器操作数(CS不能用于POP),不能是立即数。PUSH CS POP CS PUSH 1200H POP 2300H 这两条指令主要用来进行现场保护和恢复,以保证子程序调用或中断程序的正

18、常返回。,42,(3)数据交换指令(8/16位)格式:XCHG OP1,OP2 功能:实现OP1和OP2内容的相互交换。操作数:通用寄存器或存储器,但不能均为内存 单元。注意:段寄存器和IP不能作为交换指令的操作数。,例:XCHG AX,BX XCHG BH,BL XCHG AX,1122H XCHG DS,AX XCHG SI,BP XCHG SI,DI,43,46,(4)换码指令(查表指令、翻译指令)换码指令是一条完成字节翻译功能的指令。它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。,44,注意:1.使用前,先建立被转换代码(字节型)的数据表。2.换码指令只

19、能使用寄存器BX、AL,不影响标志位。,45,例:数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第9个代码的ASCII码(设DS=4000H)。,可用如下指令实现:MOV BX,2000H;BX表首地址MOV AL,09H;AL序号XALT;查表转换 执行后得到:AL=39H,46,2.目标地址传送指令此类指令的功能是将操作数所在存储器的地址送入目标寄存器。注意:1.OP源必须是存储器操作数,OP目必须是16位的通用寄存器。2.地址传送指令不影响状态标志位。,(1)取有效地址EA指令:格式:LEA OP目,OP源 功能:将源操作数的有效地址EA送到目的操作数。例:LE

20、A AX,5678H;AX 5678H LEABX,BP+SI;BX BP+SI,47,符号地址,48,(2)指针送寄存器和DS指令 格式:LDS OP目,OP源 功能:把OP源指定的4个字节内容取出,低地址的两字节OP目,高地址的两字节DS。例:LDS DI,2130H;2130H和2131H单元中的内容DI;2132H和2133H单元中的内容DS,49,结果:DI=1234H AX=2233H,例:下列指令执行后DI,AX的值是多少?LDS DI,1200H MOV AX,DI,50,(3)指针送寄存器和ES指令,格式:LES OP目,OP源功能:本指令与LDS指令的操作基本相同,所不同的

21、是将OP源4个字节中高地址的两字节ES。例:LES DI,2130H;2130H和2131H单元中的内容DI;2132H和2133H单元中的内容ES,51,3.标志寄存器传送指令 读取标志指令 格式:LAHF;AH标志寄存器低8位 特点:此指令操作结果不影响标志寄存器。(2)设置标志指令 格式:SAHF;标志寄存器低8位AH 特点:此指令直接为标志寄存器的低8位赋值。,52,(3)对标志寄存器的堆栈操作指令 格式:PUSHF;将标志寄存器的值压栈。POPF;从栈顶弹出一个字送标志寄存器。特点:1.PUSHF不影响标志寄存器,而POPF直接为标志寄存器赋值。2.通常两指令成对出现,用来保护和恢复

22、标志寄存器的内容。,53,4.2.2 算术运算指令 8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。1.加法指令(1)不带进位的加法指令:格式:ADD OP目,OP源;功能:OP目 OP源+OP目,根据结果设置标志位 例:ADD AL,50H;AL+50HAL ADD DI,SI;DI+SI DI ADD AX,DI;(DI)、(DI+1)内容+AX AX,54,ADD BX+DI,AX;(BX+DI)和(BX+DI+1)2个单元的内容+AX,结果放在BX+DI和BX+DI+1所指单元 ADD AX,BX

23、+2000H;BX+2000H 和BX+2001H所指单元内容和AX的内容相加,结果在AX中,注意:两操作数的类型相同,类型明确,不能同为存储器操作数,55,例:判断下列指令正确与否 ADD AL,BX ADD CL,CH ADD AX,BX ADD BX,SI ADD 1000H,AX ADD SI,BX,56,(2)进位的加法指令:格式:ADC OP目,OP源;功能:OP目 OP源+OP目+CF,置标志位,CF为前面指令产生的CF,说明:主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。例:ADC AX,SI;AX+SI+CFAX例:两个双字(32位)相加。123FAB5H+0

24、ABC212AH,MOV DX,0123H MOV AX,0FAB5H ADD AX,212AH;先加低字,CF=1 AX=1BDFH ADC DX,0ABCH;高字带进位加 CF=0 DX=0BE0H,57,MOV AX,FIRST ADD AX,SECOND MOV FIRST,AX MOV AX,FIRST+2 ADC AX,SECOND+2 MOV FIRST+2,AX,例:有两个4字节数分别放在自FIRST和SECOND开始的存储区中,低字节在低地址处,编一程序段将两数相加,结果存放于从FIRST开始的存储区中。,58,(3)加1指令 格式:INC OP 功能:OPOP+1 说明:常

25、用于修改偏移地址和计数次数。操作数可以是8/16位通用寄存器或存储器操作数,不能为立即数。例:INCAL;ALAL+1 INC BYTE PTR BX+DI;BX+DIBX+DI+1,例:判断对错 INC CL INC DI INC BYTE PTRDI INC 2000H,59,注意:INC指令不影响CF 位,影响标志位AF、OF、PF、SF和ZF。操作数视为无符号数。,总结:以上三条指令运算结果将影响状态标志位,但 INC不影响标志CF。,60,2.减法指令(1)不带借位的减法指令 格式:SUB OP目,OP源 功能:OP目 OP目-OP源,并根据结果设置标志 例:SUB BX,CX;BX

26、-CXBX SUB AL,SI+2;AL-(SI+2)单元中的数 AL SUB AL,20;AL-20 AL,61,(2)带借位的减法指令 格式:SBB OP目,OP源 功能:OP目 OP目-OP源-CF,根据结果设置标志 说明:主要用于多字节或多精度数据相减的运算例:SBB AX,2030H;AX-2030H-CF AX SBB WORD PTR DI+2,1000H;将DI+2和DI+3所指两单元的内容-1000H-CF,结果存在DI+2和DI+3所指的单元,62,(3)减1指令 格式:DEC OP 功能:OPOP-1;根据结果置标志位,不影响CF。例:DEC AX;AX-1AX DEC

27、BL;BL-1 BL DEC BYTE PTRDI+2;将DI+2所指单元的内容减1,结果送回此单元,63,(4)取补指令 格式:NEG OP 功能:0-OP OP,将操作数取补后送回原操作数 OP可以是8/16位通用寄存器和存储器操作数,不能为立即数。例:NEG AL;0-AL AL 注意:(1)对80H或8000H取补时,操作数没有变化,但OF=1。(2)对CF影响较特殊,只要操作数不是0,总是使CF=1。,64,(5)比较指令:格式:CMP OP目,OP源 功能:OP目-OP源,不回送结果,只根据结果置标志位。例:CMP AX,BX;AX-BX,根据结果置标志位 CMP AL,20H;A

28、L-20H,根据结果置标志位说明:本指令主要通过比较(相减)结果置标志位,表示两个操作数的关系,指令执行的结果不影响目标操作数。用途:用于比较两个数的大小,可作为条件转移指令转移的条件,65,比较有以下几种情况(以CMP A,B示例说明)1.判断两个操作数是否相等:根据ZF判断 2.判断两个操作数的大小,可分两种情况:(1)判断两个无符号操作数的大小:根据CF判断,66,67,例:有两组50个字节的数据,分别放在自FIRST和SECOND开始的存储区中,试比较两组数据是否相同。相同则0AL,否则0FFHAL。,68,3.乘法指令(1)无符号数乘法格式:MUL OP 功能:AXALOP 8位数乘

29、法(DX、AX)AXOP 16位数乘法(2)带符号数乘法格式:IMUL OP 功能:操作同上,但是操作数为带符号数,69,例:MUL BYTE PTRBX,70,注意:(1)进行字节运算时,OP目必须是AL,乘积在AX中;进行字运算时,OP目必须是AX,乘积在DX、AX中。源操作数不允许使用立即数寻址方式。(2)运算结果只影响CF、OF,其他的无定义。(3)对于MUL,若字节型数据相乘之积AH=0或字数据相乘之积DX=0,则CF=OF=0,否则CF=OF=1;对于IMUL指令,若字节数据相乘之积AH或字数据相乘之积DX的内容是低一半的符号扩展,则CF=OF=0,否则CF=OF=1。,71,例:

30、MUL BL;ALBLAX中MUL CX;AXCX DX AXMUL BYTE PTR DI;AL(DI)AXIMUL BX;AX和BX中的两个有符号数相乘,结果在DX和AX中,例:设在M1和M2单元中各有一个16位无符号数,求其乘积,将结果存于从R开始的字单元中。MOV AX,M1 MUL M2 MOV R,AX MOV R+2,DX,72,4.除法指令 指令要求被除数是除数的双倍字长,即当除数是8/16位时,要求被除数是16/32位的二进制数。(1)无符号数除法 格式:DIV OP 功能:(2)带符号数除法 格式:IDIV OP 功能:操作同DIV,但是操作数为带符号数,73,注意:(1)

31、当除数是字节时,被除数必须放在AX中,当除数是字时,被除数必须放在DX,AX中。(2)商超出规定的范围时,将产生0号中断。(3)IDIV运算结果余数的符号与被除数相同。(4)带符号数除法运算中,当被除数位数不够时,则需将被除数扩展到所需的位数。(8086/8088设有带符号数扩展指令),74,例:DIV CL;AX/CL,商AL,余数AH IDIV BYTE PTRDI;AX中16位数除以DI所指单元中的8位数,商AL,余数AH,75,(3)符号扩展指令格式:字节扩展指令(8位16位)格式:CBW 功能:将AL中的数的符号位扩展到AH 规则:若最高位=1,则执行后AH=FFH 若最高位=0,则

32、 执行后AH=00H字扩展指令(16位32位)格式:CWD;功能:将AX中的数的符号位扩展到DX,规则:若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H 这两条指令不影响标志位。,76,例:分析指令执行后的结果 MOV AL,44H CBW MOV AX,0AFDEH CWD,结果:AX=0044H结果DX=FFFFH,AX=0AFDEH,77,例:在内存中,有一个从DATA1开始的存储区。此存储区的前两个字节是一个16位带符号的被除数,第三、四字节是一个16位带符号的除数,其后的四个单元依次存放商和余数。LEA BX,DATA1 MOV AX,BX CWD ID

33、IV WORD PTR BX+2 MOV BX+4,AX MOV BX+6,DX,78,5.十进制运算调整指令BCD码:二进制编码的十进制数,又称为二十进制数。非组合(非压缩)BCD码:用一个字节表示一位十进制数。组合(压缩)BCD码:用一个字节表示二位十进制数。,79,80,(1)非组合BCD码的加法调整指令格式:AAA 功能:对AL中的由两个非组合BCD码相加的和进行调整,结果(非组合BCD码)存于AX中。调整过程:若AL的低4位大于9或AF=1,则ALAL+6,AF1,CF1,AHAH+1,清除AL的高四位;否则清除AL的高4位以及AF和CF标志;,81,(2)组合BCD码的加法调整指令

34、 格式:DAA 功能:对AL中的由两个组合BCD码相加的和进行调整,将结果(组合BCD码)存于 AL中。调整过程:调整方法与AAA类似,只是此指令要分别考虑AL的高4位和低4位。若AL低4位大于9或AF=1,则AL+6AL,置AF=1;若AL高4位大于9或CF=1,则AL+60HAL,置CF=1 注意:以上两条指令使用时必须紧跟在ADD或ADC之后。,82,(3)非组合BCD码的减法调整指令 格式:AAS 功能:对AL中由两个非组合BCD码相减的差进行调整,将结果(非组合BCD码)存于AL中。调整过程:调整方法与AAA类似,不同的是当AL的低4位表示的数大于9或AF=1时,将AL-6AL,AH

35、-AH,并将AF和CF置1,清除AL的高四位。(4)组合BCD码的减法调整指令 格式:DAS 功能:对AL中由两个组合BCD码相减所得的结果进行调整,并将结果(组合BCD码)存于AL中。调整过程:调整方法与DAA类似,不同的是当AL的低4位9或者 AF=1,则AL-6AL,并置AF=1;而当 AL的高4位大于9或者 CF=1时,则AL-60H AL,并置CF=1。注意:使用AAS、DAS指令必须紧跟在减法指令之后。,83,(5)非组合BCD码的乘法调整指令格式:AAM功能:对AX中的由两个非组合BCD码相乘所得的结果进行调整,并将调整后的结果存于AX中。调整过程:AHAL/0AH(商),ALA

36、L%0AH(余数)注意:本指令必须紧跟在MUL指令之后使用。(6)非组合BCD码的除法调整指令格式:AAD功能:把AX中的两个非组合BCD码进行调整,然后可用DIV指令实现两个非组合BCD码的除法运算 调整过程:AL10AHAL,AH0 注意:本指令必须在DIV运算前使用。,84,总结:DAA或DAS必须用在ADD(ADC)或SUB(SBB)之后,结果对OF无影响,对其他状态标志位均有影响。AAA或AAS必须用在ADD(ADC)或SUB(SBB)之后,结果影响AF和CF,对其他标志位均无意义。AAM必须用在MUL之后,结果影响SF、ZF和PF,对AF、CF和OF无影响。AAD必须用在DIV之前

37、,结果影响SF、ZF和PF,对AF、CF和OF无影响。,85,例:设在AX和BX中分别存有用组合BCD码表示的十进制数,编写程序段将两个数相加(设相加之后的和仍为4位十进制数),结果存于AX中。ADD AL,BL;低字节相加DAA;低字节调整MOV CL,AL;暂存低字节MOV AL,AHADC AL,BH;高字节相加DAA;高字节调整MOV AH,ALMOV AL,CL;存放结果于AX中,86,4.2.3 逻辑运算指令 OP源:8/16位通用寄存器、存储器操作数或立即数 OP目:通用寄存器和存储器操作数。除“非”运算外,其余指令都会使OF=CF=0,1.逻辑与运算指令 格式:AND OP目,

38、OP源 功能:对两个操作数按位进行与操作,结果回送OP目。说明:该指令常用于截取(或屏蔽)若干位二进制数例:已知AL46H,将AL的低位保留,高位屏蔽。ANDAL,0FH;AL=06H,87,2.逻辑或运算指令格式:OROP目,OP源功能:对两个操作数进行或运算,结果回送到OP目。说明:可用于组合某个字,或将某位置1。例:MOV AX,8888H;OR AX,00FFH;AX=88FFH,将AX的低8位置1,其他位不变。即对应1位置1,对应0位则不变。例:将AL中的非组合BCD码转换成ASC码。OR AL,30H,88,3.逻辑异或运算指令格式:XOROP目,OP源功能:对两个操作数进行异或运

39、算,结果回送到OP目。说明:用于对某个二进制数按位取反或对某寄存器清0。例:XOR AL,0FFH;AL数据按位求反例:MOV AX,3333H XOR AX,00FFH;结果:AX=33CCH,AH数据保持不变,对AL数据求反。即对应0不变,对应1求反。,例:寄存器清0(有4条指令可达到AX清0目的):XOR AL,AL;AL清0 MOV AX,0 SUB AX,AX AND AX,0,89,4.逻辑非运算指令格式:NOTOP 功能:对操作数逐位取反后回送到原处。例:MOV AX,1 NOT AX;AX=0FFFEH注意:(1)该指令只是执行求反操作,而不是求反码指令,对符号位也求反。(2)

40、不影响标志位。,90,5.测试指令格式:TESTOP目,OP源 功能:将OP目与OP源进行与运算,不回送结果,只根据结果置标志位。说明:主要用来检测目的操作数的某些位是1或0,根据测试结果,决定转向例:测试AX中的D15位是1还是0 TEST AX,8000H;若D15为1,ZF=0,否则ZF=1,总结:(1)AND OR XOR TEST均影响标志,CF=0,OF=0,而PF,SF,ZF由结果而定,AF无意义。此类指令可用来清CF,常用于拆字,拼字。(2)NOT 不影响标志。,91,4.2.4 移位指令,规定:移动一位时由指令中的计数值直接给出;移动两位及以上,则移位次数由CL指定,即必须将

41、移位位数N事先装入CL中。,92,一般移位指令,算术左移与逻辑左移相同,可用于无符号数乘2操作;逻辑右移可用于无符号数除2操作;算术右移可以用于有符号数除2操作。,93,2.循环移位指令,94,例:将一组BCD码转换成ASCII码。设某缓冲区从BUF单元开始连续存放着8个组合BCD码,要求将它们转换成ASCII码,存放在以RES单元开始的缓冲区。高位BCD码转换成的ASCII码,放在地址较高的单元。,95,96,4.2.5 字符串操作指令 串操作指令实现对一串字符或数据的操作,分为基本串操作指令和重复前缀指令。基本串操作指令每执行一次只能处理一个数据,与重复前缀指令结合可以处理一串数据。,97

42、,串操作有如下共同点:(1)源串一般存放在数据段(DS),偏移地址由SI指定,目标串在附加段(ES),偏移地址由DI指定。(2)每执行一次串操作后自动修改指针SI、DI。若方向标志DF=0,则每次操作后SI和DI自动加1(或加2);若DF=1,则每次操作后SI和DI自动减1(或减2)修改。(3)串长(字或字节个数)存放在CX中。注意:在执行指令前必须DS、ES、SI、DI、DF、CX置好需要的值,它们是串操作指令的隐含操作数。,98,1.字符串操作指令(1)字符串传送指令 格式:MOVS OP目,OP源 MOVSB字节传送 MOVSW字传送 功能:把位于数据段由SI指定的内存单元的字节/字数据

43、传送到附加段由DI指定的内存单元,指令不影响状态标志位。过程:DISI 若DF=0 SISI+1/2,DIDI+1/2 DISI 若DF=1 SISI-1/2,DIDI-1/2,说明:串传送指令常与无条件重复前缀连用,99,(2)字符串比较指令 格式:CMPS OP目,OP源 CMPSB 字节比较 CMPSW 字比较 功能:把位于数据段由SI指定的字节/字数据与附加段由DI指定的字节/字数据进行比较,结果不保存,但影响状态标志位,并由DF状态决定SI、DI的修改方向。,过程:SI-DI SISI1/2,DIDI1/2说明:串比较指令常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。,

44、100,(3)字符串搜索指令 格式:SCAS OP SCASB SCASW功能:把AL/AX中的内容与附加段由DI指定的一个字节/字数据进行比较,结果不保存,但影响状态标志位,并由DF状态决定DI的修改方向。过程:字节AL-DI,DIDI1 字AX-DI,DIDI2,101,条件重复,2.重复前缀指令 基本串操作指令每执行一次只能处理一个数据,与重复前缀指令结合可以处理一串数据。,102,注意:重复前缀指令不能单独使用,其后必须紧跟基本串操作指令,控制基本串操作指令重复执行。其执行过程相当于一个循环程序的运行。在每次重复之后,地址指针SI和DI都被修改,但指令指针IP仍保持指向带有前缀的串操作

45、指令的地址。重复执行次数由数据串长度决定,数据串长度应预置在寄存器CX中。执行重复前缀指令不影响标志位。,103,例1:将从DATA1开始的100个字节的数据传送到从DATA2开始的存储区中。用一般传送指令实现:MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2MOV CX,64HPL1:MOV AL,SIMOV DI,ALINC SIINC DIDEC CXJNZ PL1 DONE:HLT,104,(2)用串传送指令实现:MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 MOV CX,64H CLD;DF=0 PL1:MOVSB DE

46、C CX JNZ PL1 DONE:HLT,用重复传送指令 MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 MOV CX,64H CLD REP MOVSB HLT,105,例2:比较存储器中的两串数是否相同,如完全相同则AL=0,否则AL=0FFH。MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CLD MOV CX,50 REPZ CMPSB JZ EQQ MOV AL,0FFH JMP STOPEQQ:MOV AL,0STOP:HLT,106,例3:在某字串中查找是否存在字符“$”。MOV DI,OFFSET DATA1 M

47、OV AL,$MOV CX,64H CLD REPNZ SCASB JZ FOUND MOV BX,0 JMP STOPFOUND:DEC DI MOV BX,DI STOP:HLT,107,1.寻址方式 控制转移指令在段内、段间转移时,使用直接(相对)寻址或间接寻址方式。,4.2.5 转移指令,(1)直接寻址方式段内直接寻址方式目标程序和源程序在同一个程序段内,只给出源地址和目标地址的差值,此差值是偏移量,它是一个以IP为基准的8位或16位的带符号补码数。段间直接寻址方式直接给出转移目标地址的段地址和段内位移量,用前者取代CS当前的值,用后者取代IP中当前的值,使程序从一个代码段转移到另一个

48、代码段。,108,(2)间接寻址方式 段内间接寻址方式指令转移的有效地址存在一个寄存器或存储器单元中,用它取代当前IP的值,实现程序转移。段间间接寻址方式指令给出一个存储器地址,从该地址开始的4个字节单元中存放转移目标地址的段内偏移量和段地址,这两个地址在指令执行时用于取代当前的IP和CS的内容,使程序从一个代码段转移到另一个代码段。,109,2.转移指令通过修改指令的偏移地址或段地址及偏移地址实现程序的转移,110,一、无条件转移指令 JMP指令 格式:JMP OP功能:无条件地将控制转移到目标地址去。,111,调用指令 格式:CALL OP 功能:将CALL指令的下一条指令的地址(断点地址

49、)IP或IP与CS)压栈,新的目标地址(子程序首地址)装入IP或IP与CS中,控制程序转移到由OP指明入口的子程序。其中OP为子程序(过程)的名字。操作过程:(1)SP-2 SP,当前CS压栈,OP所在段地址 CS(2)SP-2 SP,当前IP压栈,OP的偏移地址 IP对于段内调用只有(2)。,二、调用和返回指令(CALL和RET指令),112,例:CALL ABC CALL FAR CDE,113,返回指令格式:RET功能:通常作为一个子程序的最后一条指令,用以返回到 调用子程序的断点处,即从堆栈弹出断点送IP和CS。操作过程:(1)从栈顶弹出一个字给IP,SP+2SP(2)从栈顶弹出一个字

50、给CS,SP+2SP对于段内调用只有(1)。,114,三、条件转移指令条件转移指令将前一条指令执行结果对状态标志位的影响,作为程序转移的条件。满足条件时转移到指令指定的地址,否则将顺序执行下条指令。可作为判断条件的状态标志位有CF、PF、ZF、SF和OF。条件转移指令只能在当前段中实现短转移,不影响状态标志。,115,对无符号数 高于/不低于也不等于转移 JA/JNBE 目标标号 CF AND ZF=O 高于或等于/不低于转移 JAE/JNB 目标标号 CF=0 低于/不高于也不等于转移 JB/JNAE 目标标号 CF=1 低于或等于/不高于转移 JBE/JNA 目标标号 CF OR ZF=1

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号