湖大微机原理及其应用_第4章_第1页
湖大微机原理及其应用_第4章_第2页
湖大微机原理及其应用_第4章_第3页
湖大微机原理及其应用_第4章_第4页
湖大微机原理及其应用_第4章_第5页
已阅读5页,还剩318页未读 继续免费阅读

下载本文档

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

文档简介

1、8086CPU8086CPU的指令系统的指令系统与汇编语言程序设计与汇编语言程序设计第四章 指令的基本概念和指令所包含的指令的基本概念和指令所包含的 基本内容。基本内容。 8086 8086指令的格式及编码方式。指令的格式及编码方式。 8086 8086指令的寻址方式及寻址过程。指令的寻址方式及寻址过程。 80868086指令系统的分类、功能及操指令系统的分类、功能及操 作过程,每条指令的格式及用法。作过程,每条指令的格式及用法。 汇编语言程序的格式汇编语言程序的格式 汇编语言程序的上机过程汇编语言程序的上机过程 伪指令语句伪指令语句 汇编语言程序设计的基本方法汇编语言程序设计的基本方法 掌握

2、指令及指令系统的基本概念。掌握指令及指令系统的基本概念。 掌握掌握8086各种寻址方式所执行的数各种寻址方式所执行的数 据寻址过程。据寻址过程。 牢固地掌握存储器段地址:偏移地牢固地掌握存储器段地址:偏移地 址的组织结构和段约定的基本概念。址的组织结构和段约定的基本概念。 掌握每条掌握每条8086指令的格式、功能及用法。指令的格式、功能及用法。 掌握指令的操作过程中操作数的变化情掌握指令的操作过程中操作数的变化情 况以及对标志位的影响。况以及对标志位的影响。 学会正确选用指令完成简单的任务。学会正确选用指令完成简单的任务。 了解汇编语言程序的基本格式,及其上了解汇编语言程序的基本格式,及其上机

3、过程。机过程。 熟练掌握数据定义伪指令、段定义伪指熟练掌握数据定义伪指令、段定义伪指令、符号定义伪指令、过程定义伪指令。令、符号定义伪指令、过程定义伪指令。 熟练掌握汇编语言程序设计的一般步骤熟练掌握汇编语言程序设计的一般步骤以及顺序程序、分支程序、循环程序、以及顺序程序、分支程序、循环程序、子程序设计的方法。子程序设计的方法。4.1 4.1 8086CPU的指令格式与寻址方式的指令格式与寻址方式 4.1.1 指令的基本概念指令的基本概念 指令通常以二进制代码的形式提供给计算机,指令通常以二进制代码的形式提供给计算机,这种指令称为机器指令这种指令称为机器指令。例例:10001000 11011

4、000就是一条2字节的机器指令,指示计算机执行:“把寄存器BL内容复制到寄存器AL之中” 的操作。表示为: ALBL。指令:指示计算机执行什么操作的命令命令。指令系统指令系统 (Instruction System): 程序程序 (Program): 完成某个特定任务而编制的一系列指令的有序有序集合。程序的执行一般是按指令的先后次序一条一程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的条执行,但遇到转移类指令时则可能改变指令的执行次序。执行次序。计算机所能执行的全部指令全部指令。4.1.2 指令包含的基本内容及格式指令包含的基本内容及格式1. 1. 做什么操作做

5、什么操作由指令的操作码操作码字段规定。2. 2. 操作数的来源操作数的来源操作数来自于什么地方。由指令的操作操作数数字段规定。操作数的来源可以是:操作数的来源可以是:a. CPU内的某个寄存器寄存器;b. 存储器内的某一个或几个单元单元;c. I/O端口端口; d. 立即数。3. 3. 操作结果的去向操作结果的去向操作的结果结果将存放在何处。4. 4. 下一条指令的位置下一条指令的位置指示下一条指令是顺序顺序执行还是转移转移执行。指令的表示方法指令的表示方法1. 二进制代码表示二进制代码表示机器语言指令机器语言指令2. 助记符表示助记符表示汇编语言指令汇编语言指令例:10001000 1101

6、1000例:MOV AL,BLMOV表示“传送传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个过程叫“汇编”。助记符指令助记符指令机器指令机器指令汇编汇编4.1.3 8086 CPU的寻址方式的寻址方式地址地址:数据和指令存放的位置。数据存放的位置可以是寄存器寄存器、存储器存储器或I/OI/O端口端口,指令存放的位置只能是存储器中的代码段代码段。寻址方式:寻址方式:寻找指令地址和操作数地址的方式。寻址过程:寻址过程:形成指令地址和操作数地址的过程。1. 1. 立即数

7、寻址立即数寻址操作数作为立即数立即数就在指令中给出。例例:MOV AX,1234H操作操作:把立即数1234H送寄存器AX中。机器码:B8 34 12 (低字节在地址小的单元)AHALAX.B83412.5678代码段代码段 (存储器中存储器中)操作码操作码(B8)操作数操作数(1234H)立即数立即数一条指令一条指令指令执行后,AX=1234H (原有的内容被新的内容替换)。1234MOV AX,1234H2. 2. 寄存器寻址寄存器寻址操作数在某个寄存器寄存器中。例例:INC BL操作操作:使BL中内容加1后送回+1BL00即BL=00H,则执行后BL=01H若BL=FFH,则执行后BL=

8、00H01关于存储器寻址的说明*操作数在存储器存储器中的一个或几个单元单元中。*在以下几种寻址方式中,要找到操作数,关键是必须找到该操作数所在单元的地址地址。*由于8086对存储器采用分段的组织结构,内存单元的地址由段起始地址段起始地址 (基地址基地址) 和该单元与段起始地址之间的距离距离 (即偏移量,以字字节数节数计) 两部分共同决定。 段起始地址段起始地址: 某个段寄存器的内容(又称段基值段基值)乘以16得到。 段内偏移量段内偏移量 (亦称为:有效地址EA) :该单元与段起始地址之间的距离距离(字节数字节数)。有效地址有效地址EA待寻址的内存单元待寻址的内存单元(CS, DS, ES, S

9、S)16 段基地址段基地址即:即:物理地址物理地址 =段基值段基值 16+EA内存单元物理地址内存单元物理地址8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定约定。故指令中一般只需给出EA的寻址信息,CPU将能够根据该次操作的性质自动自动选用段段寄存器寄存器,并将其与EA一起形成物理地址物理地址。因此,存储器寻址的实质就是如何形成有效地址有效地址EA。3. 直接寻址直接寻址指令中以偏移量方式直接直接给出操作数的有效地址。即EA=指令中给出的偏移量例例:MOV AX,1234H机器码机器码:A1 34 12操作操作:把偏移量1234H作为EA,在数据数据段段中找到相应的字字单元,再

10、将字单元的内容送AX。本例执行完后,本例执行完后,AX=3050HEA=1234H设DS=3000H31234H1234H+EA=1234H31234H56783050DS16=30000H30000H= 3000H16.A13412.5030.指令代码段数据段AHALAXMOV AX, 1234Ha. 直接寻址的操作过程与立即寻址不同。为表示它们的区别,直接寻址的偏移量用一对 “ ”表示。立即寻址立即寻址:MOV AX,1234H直接寻址直接寻址:MOV AX,1234Hb. 段基值乘以16,相当于段基值(二进制表示)左移4位,或段基值(十六进制表示)在末尾添一个0H。注:注:4.寄存器寄存

11、器 间接寻址间接寻址以间接间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。a. 基址寻址方式基址寻址方式以BX作为基址寻址寄存器,操作数在数据段数据段中。以BP作为基址寻址寄存器,操作数在堆栈段堆栈段中。EA=BX或BP的内容例例:MOV AX,BX机器码机器码:8B 04操作操作:以BX的内容作为有效地址EA,在数据段数据段中找到对应的字单元,再将该字单元的内容送AX中。EA=BX 设DS=2000H,BX=1000H本例执行后本例执行后 AX=50A0HDS1620000HEA=BX(=1000H)21000H50A08B.04A050代码段数据段AX

12、AHAL这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址指针寄存器。b. 变址寻址方式变址寻址方式以SI,DI寄存器作为间接寻址间接寻址寄存器,操作数在数据段数据段中。 EA=SI或DI内容 例例:ADD AX,SI EA=SI操作操作:以EA作为有效地址,在数据段数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。5.5.寄存器相对寻址寄存器相对寻址 操作数的有效地址EA由两部分合成,一部分置于某个基址或变址寄存器中,另一部分为指令中指定的8位或16位位移量。操作数所在的默认段与寄存器间接寻址类似。 例: MOV AX,4000

13、H DI 或 MOV AX,DI + 4000H设DI=1000H,则有效地址为: EA=1000H+4000H=5000H。若DS=3000H,则物理地址为: 30000H + 5000H = 35000H。6. 基址变址寻址基址变址寻址既有基址寄存器(BX或BP),又有变址寄存器参与的(SI或DI)寻址,操作数在基址基址寄存器所规定的段中。EA=(BX或BP)+(SI或DI)例例: MOV AX,BXDI 或 MOV AX,BX+DI 设BX=6000H,DI=1000H,则:EA=6000H+1000H=7000H,默认段为DS。 若DS=2000H,则源操作数所对应的物理地址为:200

14、00H+7000H=27000H。7.相对基址变址寻址 有效地址由有效地址由三部分三部分组成,组成, 即:即:EA=EA=基址寄存器内容基址寄存器内容+ +变址寄存器内容变址寄存器内容+8+8位或位或1616位位移量位位移量。 操作数所对应的默认段与基址变址寻址方式相同。操作数所对应的默认段与基址变址寻址方式相同。 例:例: MOV AXMOV AX,BX+SI+0080HBX+SI+0080H; 则:则:EA=BX+SI+0080HEA=BX+SI+0080H,操作数在,操作数在数据段数据段例例:MOV AX,0260H BX SIEA=BX+SI+0260H,操作数在数据段数据段中MOV

15、AX,INF BP+DIEA=BP+DI+位移量INF,操作数在堆栈段堆栈段中 * 以上两种基址以上两种基址+变址的格式都是合法的。变址的格式都是合法的。课堂练习与思考:课堂练习与思考:1.请指出下列每条指令源操作数的寻址方式。请指出下列每条指令源操作数的寻址方式。(1) MOV AX, BX(2) MOV CH, 3AH(3) MOV BX, 2000H(4) MOV DX, BX(5) MOV CX, BP+2(6) MOV AX, 3BX DI(7) MOV AL, ES:SI(8) MOV BX, DS:BP;寄存器寻址寄存器寻址,操作数在,操作数在BX中中;立即数寻址,操作数为立即数

16、寻址,操作数为3AH;直接寻址,直接寻址,EA=2000H,数在数据段,数在数据段;间接寻址,间接寻址,EA=BX,数在数据段,数在数据段;寄存器相对寻址,寄存器相对寻址,EA=BP+2,数在堆栈段,数在堆栈段;相对基址变址寻址,相对基址变址寻址,EA=BX+DI+3,数在数据段,数在数据段;含段超越的变址寻址,含段超越的变址寻址,EA=SI,数在附加段,数在附加段;含段超越的基址寻址,含段超越的基址寻址,EA=BP,数在数据段,数在数据段课堂练习与思考:课堂练习与思考:2. MOV AX,BX+SI+0080H,即:将BX与SI中的内容与0080H相加作有效地址。3.设BX=0123H DI

17、=1000H DS=3200H,默认DS作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV AX,BX+1A38H(4)MOV AX,BX+DI(5)MOV AX,BX+DI+1A38H课堂练习与思考:课堂练习与思考:(1)直接寻址)直接寻址 有效地址有效地址=1A38H, 物理地址物理地址=32000H+1A38H=33A38H(2)寄存器间接寻址)寄存器间接寻址 有效地址有效地址=0123H, 物理地址物理地址=32000H+0123H=32123H(3)寄存器相对寻

18、址)寄存器相对寻址 有效地址有效地址=0123H+1A38H=1B5BH, 物理地址物理地址=32000H+1B5B=33B5BH(4) 基址变址寻址基址变址寻址 有效地址有效地址=0123H+1000H=1123H, 物理地址物理地址=32000H+1123H=33123H(5)相对基址变址寻址)相对基址变址寻址 有效地址有效地址=0123H+1000H+1A38H=2B5BH, 物理地址物理地址=32000H+2B5BH=34B5BH 4.2 8086指令系统指令系统8086指令按功能分为六大类。指令按功能分为六大类。8086指令系统数据传送指令算术运算指令逻辑运算指令串操作指令程序控制指

19、令CPU控制指令4.2.1 数据传送类指令数据传送类指令数据传送指令能够完成下列操作数的传送传送任务。立即数存储器段寄存器CS,DS,ES,SS通用寄存器组AX,BX,CX,DXBP,SP,SI,DI(CS不能作目的寄存器不能作目的寄存器)指令形式: MOV dist, src功能功能:将源操作数s复制到目标操作数d,源保持不变,目标被源代替。注注: d, s不能同时为存储器错误指令:MOV BX,SI d不能为立即数错误指令:MOV 1234H,AX d, s必须同时为字节型或字型错误指令:MOV AX,BL 指令后的分号“;”以后为注释部分,对指令的执行没有任何影响,主要是便于阅读或解释指

20、令的功能。例例:MOV AX,0 ; AX0,AX清0;执行后,AX=0MOV SI,BP ; SIBP,BP内容送SI;执行后,SI=BP,BP不变不变MOV AL,BUFFERS ;BUFFERS内存单元内容送入AL这里这里,BUFFERS代表符号地址符号地址,从该地址单元中取出内容送AL寄存器。相当于直接寻址方式。相当于直接寻址方式。EA=BUFFERS偏移量偏移量3030HBUFFERSALMOV AX,DATA SI+BXEA=SI+BX+DATA,在数据段中寻找字单元,取出该字单元的内容送入AX。设DS=3000H,SI=200H,BX=1000H,DATA的偏移量为100H,则:

21、EA=SI+BX+DATA=200H+1000H+100H=1300H物理地址=DS16+EA=30000H+1300H=31300H即从31300H和31301H两单元中取出内容送AX。DS1630000H123434H12HAXAH ALEA=1300HDATASIBXDATA31300H31301HMOV AX,DATA SI+BX2.交换指令: XCHG d, s ;交换源和目标操作数注注:d=通用寄存器s=通用寄存器或存储器例:XCHG AX,SI+400H执行后,5678H被送到内存单元AX=1234H3412SI+400H5678AH ALAX341278563. 堆栈操作指令:

22、堆栈操作指令:PUSH、POP PUSH s ; SP2 SP; 源操作数压入堆栈保存源操作数压入堆栈保存POP d ; SP所指堆栈的内容送目的地;所指堆栈的内容送目的地; SP+2 SP例:PUSH BX;把BX内容压入堆栈设 SS=2000H,SP=0040H,BX=2340H则执行后,2340H被保存到堆栈,同时SP=003EH,BX内容不变SS1620000HSP=0040H(初值初值)20040H2003EH4023SP=003EH(压栈后压栈后)XX23 40BX注注:s和d只能为16位寄存器或存储单元错误指令:PUSH 1234HPOP AL POP CS (1) 标志入栈指令

23、:PUSHF功能功能:把16位的标志寄存器压入堆栈堆栈保存,且:SP2SP。 (2)标志出栈指令:POPF 功能功能:将当前当前SP所指内容(2字节)弹出至标志寄存器标志寄存器,且:SP+2SP。(3)读取标志寄存器指令: LAHF功能功能:将标志寄存器低低8位位装入AH寄存器 SF ZFAFPFCFFR70AH(4)设置标志指令:SAHF功能功能:把AH的内容送入标志寄存器的低低8位位。在程序设计中,对于任一个存储器操作数,都是由逻辑地址(包括:段地址和偏移地址)确定了它们在存储器中的位置。目标地址传送指令用于获得存储器操作数的段地址或偏移地址。(1) 取有效地址指令: LEA d, s功能

24、功能:取存储器源操作数有效地址有效地址送入目标dd=通用寄存器例:LEA BX,COUNTER; 取COUNTER地址偏移量BX若COUNTER地址偏移量为0002H,则执行后BX=0002H(2) 地址指针装到指定的寄存器和DS的指令: LDS d, s功能功能:装入地址指针地址指针,段地址DS,偏移地址d这条指令往往改变了段寄存器段寄存器DSDS的内容,使得DS指向了另外另外一个数据段。例例:LDS SI,BASE 设执行前,DS=1000H,SI=0000H,BASE偏移地址为0004H,10004H10007H单元内容依次为00H,30H,00H,20H;则执行后:DS=2000H,S

25、I=3000H003000200004HSI=3000H原DS所指向的数据段新DS所指向的数据段1000H1610000HDSBASE30002000SIDS2000H1620000HDS例:LDS SI,BASE 指令的执行情况(3) 地址指针装到指定的寄存器和ES的指令:LES d, s功能功能:装入地址指针地址指针,段地址 ES,偏移地址d 即:BX寄存器含有表格的起始地址, AL中的值是作为查表的偏移量, 查出表格中的内容送入AL中。 内容内容(1)换码指令:换码指令:XLAT 功能:功能: (BX+AL) AL (查表转换)(查表转换)6.累加器专用传送指令累加器专用传送指令例例:设

26、表首的偏移地址为2000H,要查找表内第4号单元 (从0号算起)的内容并送回AL,则程序段如下:MOV BX,2000HMOV AL,04HXLAT设表中内容如下页图所示,则执行后,AL=09H 18H34H05H06H09H2000HBX04HAL(表首)TABLEDS1604AL09功能功能:从指定端口输入数据至累加器acc (AL或AX) ,port=0255IN acc, portAH ALacc端口port16位数据时IN acc, DX功能功能:从DX指示的端口输入数据至累加器OUT port, acc功能功能:将累加器的数据输出至指定端口。OUT DX,acc功能功能:将累加器的

27、数据输出到DXDX所指示的端口。注注: 1616位位端口地址必须送入DXDX中。 若采用AXAX,则表示1616位位数据传送(输入/输出)4.2.2 算术运算类指令算术运算类指令 算术运算指令的操作数可以是算术运算指令的操作数可以是无符号数无符号数,也可以是也可以是有符号数有符号数。 算术运算指令算术运算指令一般影响标志位一般影响标志位,而数据传,而数据传送指令一般不影响标志位。送指令一般不影响标志位。(1) ADD d, s功能功能:将s与d相加,结果在d中。根据操作结果设置标志位标志位。例例:ADD BX+106BH,1234H设DS=2000H,BX=1200H,则:EA=1200H+1

28、06BH=226BH物理地址物理地址:2000H16+226BH=2226BH又设原来(2226BH)=90H,(2226CH)=30H则指令执行后执行后有:3090H+1234H=42C4H,即: (2226BH)=C4H,(2226CH)=42H 标志位标志位:CF=0,ZF=0,SF=0, AF=0,PF=0 注: 42C4H=0100,0010,1100,0100B(2) ADC d, s功能功能:将s与d再与进位CF相加,结果留在d中,ADC指令主要用于多字节相加。例例:MOV AX,0FH ;AX=000FHADD AL,0F1H ;AL+F1HALADC AH,0 ;AH+0+C

29、FAH最后结果:AH=01H,AL=00H注注:若是立即数,且最高位为数码若是立即数,且最高位为数码AF,则必须在前,则必须在前面添加一个面添加一个0,以避免混淆。,以避免混淆。(3) INC d功能功能:将d加1后送回d。注注:INC指令不影响不影响进位标志CF。该指令经常用于修改地址指针寄存器 (BX, BP, SI, DI),使之指向下一个单元。(1) SUB d, s功能功能:d-sd,同时影响影响标志位。(2) SBB d, s功能功能:d-s-CFd,同时影响影响标志位。(3) DEC d功能功能:d-1d该指令与INC相反操作,也不影不影响响进位标志CF。(4)求补指令:求补指令

30、:NEG d功能功能:对d进行求补运算后送回 (按位求反再加1)。例例:MOV AL,7FH NEG AL ;将AL中的各位求反后再在最 低位加1,即: AL +1AL; 亦即:0-ALAL计算结果:AL=AL+1=7FH+1=80H+1=81H 或者:AL=0-AL=0-7FH=81H(5) 比较指令 CMP d, s功能功能:作一次减法运算d-s,但不回送结果不回送结果,只根据结果设置设置标志位。比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。乘法指令在指令中只出现一个操作数s (乘数乘数) 另一个操作数固定在累加器累加器(AX或AL)中。(1) MUL s功能

31、功能:无符号数乘法指令a. 8位乘法被乘数=AL,乘数=s积(16位)=AH:AL中,即在AX中AH为高8位,AL为低8位。AL(8位)s(8位) AHAL(16位)b. 16位乘法被乘数=AX,乘数=s积(32位)=DX:AXDX为高16位,AX为低16位。AX(16位)s(16位) DXAX(32位)例例:MUL BX若执行前 AX=0012H,BX=0066H则执行后 DX=0000H,AX=072CH(2) IMUL s功能功能:有符号数乘法指令8086规定,有符号数一般采用规定,有符号数一般采用补码补码表示。表示。故有符号数作乘法运算时,必须先把它们故有符号数作乘法运算时,必须先把它

32、们转变为转变为原码原码数相乘,积也为原码数,再将原码数相乘,积也为原码数,再将原码数转变为补码数。数转变为补码数。这个工作由这个工作由CPU自动完成自动完成。例例:MOV AL,88H; 88H为 120的补码MOV BL,2IMUL BL结果:AX=FF10H ;FF10H为240的补码若直接用MUL BL指令,则AX=0110H(1) DIV s功能功能:无符号数相除a. 字节除被除数=AX,除数=s (s0)结果:商=AL,余数=AHALAHAL(8位)(16位).AH(8位)s(8位)商余数b. 字除被除数=DX:AX,除数= s (s0)结果:商=AX,余数=DXAXDXAX(16位

33、)(32位).DX(16位)s (16位)商余数注注:如果除数太小,使得商超出了一个字节或字所能表示的范围,则会出现“被0除”的错误错误(即产生一个“除法出错内部中断除法出错内部中断”请求)。例例:MOV AX,800HMOV BL,2DIV BL结果错误( “被0除” )(2) IDIV s功能功能:带符号数除法采用的固定寄存器与DIV相同。(3)字节扩展为字指令 :CBWCBW:字节除法的符号扩展指令功能功能:若AL为正数正数(D7=0) 则 AH=00H AL为负数负数(D7=1) 则 AH=FFHCWD:字除法的符号扩展指令功能功能:若AX为正数正数(D15=0) 则 DX=0000H

34、 AX为负数负数(D15=1) 则 DX=FFFFHCBW和CWD一般用于带符号数除法指令之前。(4)字扩展为双字指令CWD 运算器按二进制规律进行运算,如果参与运算器按二进制规律进行运算,如果参与运算的是运算的是BCDBCD码数,则需要对结果进行调整。码数,则需要对结果进行调整。100010010000100100001000 组合组合的BCD码数,例: 未组合未组合的BCD码数,例: 899(低位)8(高位)代表89(即:非压缩型(即:非压缩型BCD码)码)(即:压缩型(即:压缩型BCD码)码) AAAAAA:加法的非压缩型加法的非压缩型BCDBCD码调整指令码调整指令功能功能:对未组合型

35、未组合型BCD码加法码加法的结果进行校正(调整)。校正校正(调整调整)方法:方法:若AL中低4位数值 9 或 AF = 1,则:a. AL+6 AL,且 AL 高4位清0b. AH+1 AH否则不作调整。(1)加法的)加法的BCD码调整码调整例例:MOV AH, 0MOV AL, 00000110B;代表6ADD AL, 00000111B;代表7AAA0000 0110 6+ 0000 0111 7调整调整 + 0000 0110 0000 11010001 001100000011 AL清000000000+1=00000001AH最后结果 AH = 01H,AL = 03H DAA:压缩

36、型:压缩型BCD码加法调整指令码加法调整指令 功能功能:对组合型组合型BCD码加法码加法的结果进行校正(调整)。DAA同时对AL中低低4位位和高高4位位进行调整。例例. 组合BCD码调整MOV AL, 00100111B;代表27ADD AL, 10000110B;代表86DAA+ 1000 01100010 0111调整调整 + 0110 01101010 11011 0001 0011进位1调整后结果:调整后结果:CF=1,AL=00010011(代表13)进位位与AL合成结果:113 (2)减法的BCD码调整 AAS:非压缩型:非压缩型BCD码减法的调整指令码减法的调整指令 指令功能:指

37、令功能:把把ALAL的减法结果调整为非压缩型的减法结果调整为非压缩型BCDBCD码数。码数。调整后的结果低位在调整后的结果低位在ALAL中,高位在中,高位在AHAH中。中。调整的原则是:若调整的原则是:若AF=1AF=1,则执行操作:,则执行操作:AL-6AL,且将,且将AL的高的高4位清位清0;AH-1AH;1CF。否则,不做调整。否则,不做调整。 DAS:压缩型BCD码减法的调整指令 指令功能:把指令功能:把ALAL中的减法结果调整为中的减法结果调整为缩压型缩压型BCDBCD码数,调整后的结果在码数,调整后的结果在ALAL中。中。 调整原则如下:若调整原则如下:若ALAL中低中低4 4位大

38、于位大于9 9或或AF=1AF=1,则,则AL-06HALAL-06HAL,并使,并使AFAF置置1 1; 若若ALAL中高中高4 4位大于位大于9 9或或CF=1CF=1,则,则AL-60HALAL-60HAL,并,并使使CFCF置置1 1。最后结果最后结果 AL = 00110110B(代表(代表36),),CF=0例例: MOV AL, 01110011B (代表73)MOV BL, 00110111B (代表37)SUB AL, BL0111 0011 0011 01110011 11000011 0110DAS相减调整调整 0000 0110(3)乘法的BCD码调整 AAMAAM:乘

39、法的:乘法的非压缩型非压缩型BCDBCD码调整码调整 指令功能:把指令功能:把AXAX的乘法结果调整为非压缩型的乘法结果调整为非压缩型BCDBCD码数。调整后的结果低位(码数。调整后的结果低位(个位个位)在)在ALAL中,中,高位(高位(十位十位)在)在AHAH中。中。 调整过程:调整过程:把把ALAL的内容除以的内容除以0AH0AH,商放,商放AHAH中,中,余数放余数放ALAL中。中。例:例:MOV AL, 00001000B (代表8)MOV BL, 00001001B (代表9)MUL BLAAM00001000 00001001AL= 01001000AH = 00000000最后结

40、果 AH = 00000111B (代表7)对上述结果进行调整:AL/00001010BAH (商)AL%00001010B AL(余数)AL = 00000010B (代表2) AH,AL中表示未组合型中表示未组合型BCD码码72。 AAM的操作实质是:的操作实质是: 将将AL中不大于中不大于99的二进制数转换成非压缩型的二进制数转换成非压缩型BCD码码 (4)除法的除法的BCD码调整码调整 AAD:除法的非压缩型非压缩型BCD码调整 指令功能:对AX中的两位非压缩型BCD码数进行调整。 调整原则:AH0AH+ALAL,0AH; 显然AAD的操作实质是将将AX中的非压缩型中的非压缩型BCD码

41、(十进制数)转换为二进制码(十进制数)转换为二进制。 与其它5条调整指令不同的是,AAD指令须放在相应的除法指令之前之前。例例:MOV AX, 00000111 00000010B (代表72)AAD 调整前调整前: AH = 00000111;AL = 00000010 调整后调整后: AH = 00000000;AL = 00000111B00001010B + 00000010B = 01001000B 7 10272=48HAADAAD指令相当于:指令相当于:将两个未组合型将两个未组合型BCD码数转换为一个二进制数。码数转换为一个二进制数。4.2.3 逻辑运算和移位类指令逻辑运算和移位

42、类指令 逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位置位、清清0或取反取反。常用于控制系统的I/O设备。(1) AND d, s功能功能:s 和 d 按位按位相 “与与”,结果在 d 中。 AND指令通常用于使某些位清0,而另一些位保持不变。例例:AND BX, 0F0FH若BX=5555H,则执行后 BX=0505H 0101,0101,0101,0101B0000,1111,0000,1111B0000,0101,0000,0101BAND(2) OR d, s功能功能:s 和 d 按位按位相 “或或”,结果送 d 。OR 操作经常用于将某些位置位,其它位不变。 0101,

43、0101,0101,0101B0000,1111,0000,1111B0101,1111,0101,1111BOR(3) XOR d, s功能功能:s 和 d 按位按位相 “异或异或”,结果送 d 。XOR 操作经常用于将某些位取反,其它位不变。 0101,0101,0101,0101B0000,1111,0000,1111B0101,1010,0101,1010BXOR例:例:(4) NOT d功能功能:将 d 按位求反按位求反后送回。 即:dd(5)测试指令 TEST d, s功能功能:s 和 d 按位按位相 “与与”,但不送结果但不送结果,只根据结果设置设置标志位。TEST 指令通常用于

44、测试某些位是为0还是为1例:例:TEST AL,09H ;AL09H,即测试AL的 D3、D0位 ;若此两位均为两位均为0,则,则ZF=1, ;否则;否则ZF=0(1) 算术移位算术移位a. 算术左移CF0101101010CF011010101左移 1 次: SAL d, 1左移多次: SAL d, CL ;CL中的值为中的值为移位次数移位次数例例:MOV BL, 10001001BSAL BL, 1结果: CF = 1,BL = 00010010B0CF注注:移位多次时,移位次数必须:移位多次时,移位次数必须预先预先置入置入CL中。中。右移 1 次: SAR d, 1右移多次: SAR d

45、, CLb. 算术右移算术右移CF符号位(2) 逻辑移位逻辑移位a. 逻辑左移 SHL与SAL完全相同。b. 逻辑右移 SHR d, 1 SHR d, CLCF0(3) 循环左移循环左移不带进位循环左移不带进位循环左移 ROL d, 1ROL d, CLCFb. 带进位循环左移带进位循环左移 RCL d, 1RCL d, CLCF(4) 循环右移循环右移a. 不带进位循环右移不带进位循环右移 ROR d, 1ROR d, CLCFb. 带进位循环右移带进位循环右移 RCR d, 1RCR d, CLCF例例:设32位数在DX:AX中,实现32位数整个左移1次。即:SAL AX,1RCL DX,

46、1;0CFAXSALDXRCLAXDX04.2.4 串操作指令串操作指令串是连续存放连续存放在内存中的字节块或字块字节块或字块。每个串有一个起始地址和长度。方 向 标 志DF选择串操作期间寄存器 DI ,SI 的自增自增(DF=0)或自减自减(DF=1)操作。起始地址A00HHGFEDCB串长=8字节块 (串)规定:规定:(1) (1) 源串在数据段,用源串在数据段,用SISI作地址指针作地址指针(2) (2) 目的串在附加段,用目的串在附加段,用DIDI作地址指针作地址指针如果源串与目的串实质上在一个段中,则要令ES = DS。表4.1 串操作指令的隐含参数隐含参数隐含参数对应的单元或寄存器

47、对应的单元或寄存器源串的起始地址DS SI目标串的起始地址ES DI重复次数CXLODS指令的目的操作数AL/AXSTOS指令的源操作数AL/AXSCAS指令的扫描值 AL/AX 地址修改方向 DF=0,SI、DI自动增量修改DF=1,SI、DI自动减量修改 MOVS d,s或写成 MOVSB (字节串字节串传送) MOVSW (字串字串传送)功能功能:DS:SI(源串) ES:DI(目的串) 同时自动修改同时自动修改SI,DI2. 读串读串 LODS sLODSB (字节串字节串)LODSW (字串字串)功能功能:DS:SI AL或AX 同时自动修改SI3. 存储串存储串 STOS dSTO

48、SB (字节串字节串)STOSW (字串字串)功能功能:AL或AX ES:DI 同时自动修改DI4. 串比较串比较 CMPS d, sCMPSB (字节串字节串比较)CMPSW (字串字串比较)功能功能:作一次减法减法:DS:SI - ES:DI 但不送结果不送结果,同时自动修改SI,DI串比较指令常常与有条件重复前缀有条件重复前缀配合使用。5. 串扫描(搜索)串扫描(搜索) SCAS dSCASB (字节串字节串搜索)SCASW (字串字串搜索)功能功能:做一次减法减法 AL - ES:DI (字节搜索) 或 AX - ES:DI (字搜索) 同时自动修改自动修改DI,但不回送结果不回送结果

49、,只根据结果设置有关标志位;置有关标志位; 串搜索指令也常与有条件重复前缀有条件重复前缀相配合使用。重复前缀 (REP)可以加到串数据传送指令上;REP前缀使得每次执行串指令后CX减1;CX减1以后,重复执行重复执行串指令,直到CX值为值为0时,指令才终止。6. 重复前缀重复前缀(1)REP S_ins ;CX-1CX,若CX0, 重复执行串操作。常用作常用作MOVS,STOS指令的前缀指令的前缀(2) REPE/REPZ S_ins ; CX-1CX,若CX0 ;且ZF=1重复,否则不重复常用作常用作CMPS、SCAS指令的前缀指令的前缀 (3) REPNE/REPNZ S_ins ; CX

50、-1CX, CX0 ; 且ZF=0时重复,否则不重复 常用作常用作CMPS,SCAS指令的前缀指令的前缀 例1. 设源串在1000H:2000H开始的100个字节单元中,要求将源串送到3000H:1020H开始的目的串中。MOV AX,1000HMOV DS,AX;置源数据段寄存器MOV SI,2000H;置源串指针初值MOV AX,3000HMOV ES,AX;置目的附加段寄存器MOV DI,1020H;置目的串指针初值CLD;DF = 0,使SI,DI自增MOV CX,64H;置重复次数为100次REP MOVSB;重复串传送,直到CX = 0 (传送完成(传送完成100个字节)个字节)初

51、始化例2. 比较两个串,发现有不同的字符时则停止比较(即:判断两个字符串是否完全相同即:判断两个字符串是否完全相同)。CLDMOV CX,100MOV SI,2500HMOV DI,1400HREPE CMPSB;串比较,直到ZF = 0或CX=0才停止。结果结果:若ZF=0,则两个串不相等; 若ZF=1,则两个串相等。4.2.5 控制转移类指令控制转移类指令 程序控制指令用来控制程序的走向,其实质实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。根据根据CSCS和和IPIP值的变化情况,转移指令分值的变化情况,转移指令分为段内转移和段间转移。为段内转移和段间转移。 段

52、内转移段内转移(属性NEAR) :转移指令和转移目标在同一代码段同一代码段内,转移时仅需要改变IP的值,而CS的值保持不变保持不变。段内转移可实现在一个代码段内的地址空间范围(最大为最大为64KB)内任意转移。若段内转移的范围在-128+127之间,则称为短转移短转移(属性SHORT) 段间转移段间转移(属性FAR):转移指令和转移目标不在同一代码段不在同一代码段内,转移时需要 同时改变同时改变CS和IP的值。段间转移可实现在1MB的地址空间范围内任意转移。 无论是段内转移还是段间转移,都还有无论是段内转移还是段间转移,都还有直接直接和和间接间接转移之分转移之分 直接转移:在转移指令中直接转移

53、:在转移指令中直接指明直接指明目标地址的目标地址的转移量转移量称为直接转移。称为直接转移。 间接转移:转移地址存放在某一间接转移:转移地址存放在某一寄存器寄存器或或内存单元内存单元中中 若转移地址存放在寄存器,则若转移地址存放在寄存器,则只能实现段内间接转移只能实现段内间接转移(因为寄存器间接寻址的最大范围为(因为寄存器间接寻址的最大范围为64K);); 若转移地址存放在内存单元,则若转移地址存放在内存单元,则既可既可实现段内间接转实现段内间接转移,移,也可也可实现段间间接转移。实现段间间接转移。段内转移还有相对相对和绝对绝对转移之分 相对转移:目标地址是相对转移:目标地址是IP值加上一个偏移

54、量值加上一个偏移量的转移的转移 绝对转移:以一个绝对转移:以一个新的值完全代替新的值完全代替当前的当前的IP值(值(CS值值可能也发生改变)的转移。可能也发生改变)的转移。 在在8086指令系统中,指令系统中,段内直接转移都是相对转移,段内直接转移都是相对转移,段内间接转移以及段间转移都是绝对转移段内间接转移以及段间转移都是绝对转移。A:Above 高于,高于, B:Below 低于,低于, C:Carry 进位,进位, E:Equal 等于等于G:Greater 大于,大于, L:Less 小于,小于, N:Not 无,无, O:Over 溢出溢出 ,S:Sign 符号,符号, PE:Par

55、ity Even 奇偶性偶,奇偶性偶, PO:Parity Odd 奇偶性奇奇偶性奇 8086 8086提供了四种控制转移指令:提供了四种控制转移指令:无条件无条件转移指令,转移指令,条条件件转移指令,转移指令,循环控制循环控制指令和指令和中断中断指令。指令。注意指令中条件缩写字母的含意分别是:注意指令中条件缩写字母的含意分别是:(1) JMP 目标 a. 段内段内直接直接转移 格式: JMP 目标标号 特点特点:仅仅改变IP值,而CS值不变。 例:JMP ADDI这里ADDI为转移目标的标号。b. 段内段内间接间接转移格式: JMP BX ;BXIP即以BX的内容作为转移目标的偏移地址偏移地

56、址,CS值不变,IP值改变。c. 段间段间直接直接转移格式:JMP FAR_ADDR功能功能:转移到另一个代码段的目标FAR_ADDR处执行。 即: FAR_ADDR的段基地址 CS, FAR_ADDR的偏移地址 IP。当前当前CS=2100HJMP0C020065转移目标的偏移地址转移目标的段地址16 21000H代码段116 65000H新新CS=6500H代码段2FAR_ADDR当前当前IP =1500H新新IP = 020CHJMP FAR_ADDR指令的执行过程d. 段间段间间接间接转移格式:JMP BX+位移量功能功能: 以有效地址有效地址EA = BX +位移量位移量作为开始地址

57、, 从前2个单元取出内容IP,后2个单元取出内容CS 从而转移到新的地址执行程序。例:JMP BX+ADDR3设DS=2000H,BX=1400H,ADDR3=020AH,则执行过程执行过程如下:2000H30004000IPCS00300040EA=1400H+020AH执行跳转指令后,转移至执行跳转指令后,转移至 4000H:3000H 处执行程序处执行程序数据段数据段 条件转移指令共有18条,这些指令根据状态标志决定是否转移,转移的目标范围在-128+127之间。条件转移指令的执行流程条件转移指令的执行流程条件满足 ?顺序执行下一条指令执行满足转移条件的程序NY,转移转移目标地址:转移目

58、标地址: (1) 无符号数条件转移指令设AX,BX中均为无符号数(命:AX=A,BX=B),且执行了指令CMP AX, BX 后, 则可采用以下指令进行程序转移:含 义指 令转 移 条 件A高于BA高于等于BA低于等于BA低于BJA / JNBEJAE / JNBJB / JNAEJBE / JNACF=0 AND ZF=0CF=0 OR ZF=1 CF=1 CF=1 OR ZF=1为判断两个带符号数为判断两个带符号数A,B大小,可先作大小,可先作A-B,若:,若: OF=0 且 SF=0 则必有 AB SF=1 则必有 AB OF=1 且 SF=0 则必有 AB SF=1 则必有 AB得出结

59、论:判断 AB 的依据依据是 OF SF=0 AB 的依据依据是 OF SF=1 A = B 的依据依据是 ZF=1(2) 有符号数条件转移指令有符号数条件转移指令指令格式及功能:指令格式及功能:设AX,BX中均为有符号数(命AX=A,BX=B) ,且执行了指令CMP AX,BX后,则采用可采用以下指令进行转移:含 义指 令转 移 条 件ABABABABJG / JNLEJGE / JNLJL / JNGEJLE / JNGSF OF=0 AND ZF=0SF OF=0 OR ZF=1 SF OF=1SF OF=1 OR ZF=1 (3) 单状态标志转移指令单状态标志转移指令含 义指 令转 移

60、 条 件等于/ 结果为0JE / JZJNE / JNZJCJNCZF=0ZF=1CF=0CF=1不等于/ 结果不为0有进位/ 有借位无进位/ 无借位溢出不溢出有偶数个“1” 有奇数个“1” 符号位为 1 符号位为 0 JOJNOJP / JPEJNP / JPOJSJNSOF=0OF=1PF=0PF=1SF=0SF=13.子程序调用和返回指令 子程序调用(CALL)指令包括:段内直接调用、段内间接调用、段间直接调用、段间间接调用等形式形式。 在CALL指令中直接给出子程序名直接给出子程序名是最常见的形式。 返回指令包括RET和RET n两种形式,其中的RET n是带弹出值返回指令带弹出值返回

温馨提示

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

评论

0/150

提交评论