版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第四章第四章 80868086的指令系统的指令系统4.1 8086指令格式和寻址方式指令格式和寻址方式4.2 8086指令系统指令系统教学重点教学重点24.1 8086指令格式和寻址方式指令格式和寻址方式4.1.1、指令格式、指令格式4.1.2、寻址方式、寻址方式基本概念基本概念n汇编语言指令或符号指令:汇编语言指令或符号指令:用字母和其它一些符号用字母和其它一些符号组成的组成的“助记符助记符”与操作数等表示的指令称为汇编与操作数等表示的指令称为汇编语言指令或符号指令。语言指令或符号指令。 例如:例如:MOV AX, BX ; AXBXMOV AX, BX ; AXBX 其二进制代码(机器代
2、码)为其二进制代码(机器代码)为89D8H89D8H,就是,就是 1000 1001 1101 1000 B1000 1001 1101 1000 B 不易理解,不易记忆。不易理解,不易记忆。n汇编程序与汇编过程:汇编程序与汇编过程:把符号指令变成机器代码的把符号指令变成机器代码的过程叫汇编,完成汇编任务的程序叫汇编程序。过程叫汇编,完成汇编任务的程序叫汇编程序。43.1.1 3.1.1 指令格式指令格式操作码操作码 操作数操作数 , 操作数操作数标号:标号:;注释注释标号:标号:是该指令所在地址的名字,其后必须跟是该指令所在地址的名字,其后必须跟“:”,可缺省,可缺省操作码:操作码:指示计算
3、机执行什么操作指示计算机执行什么操作操作数:操作数:操作的对象,可以是操作数本身或存放操作数的内存操作的对象,可以是操作数本身或存放操作数的内存(I/O(I/O端口端口) )地址。地址。指令指令有有单操作数单操作数、双操作数双操作数和和无操作数无操作数之分之分源操作数源操作数/目的操作数目的操作数加加注释注释使程序容易读懂,前加使程序容易读懂,前加 “;” 563.1.2 寻址方式一一 寻址方式和有效地址的概念寻址方式和有效地址的概念二二 各种寻址方式各种寻址方式三三 存储器寻址时的约定存储器寻址时的约定7一一 寻址方式和有效地址的概念寻址方式和有效地址的概念寻址方式寻址方式就是寻找指令中的操
4、作数的方式。也就是指令中用于说明操作数所在地址的方法。 8086/8088指令中的操作数的3种存放位置:v 操作数就在指令中,立即数,。v 某寄存器中,。v 内存的数据区中,。vI/O端口中: IN AL, 40H8有效地址(有效地址(EA):):存储器寻址时,指令的操作数部分给出存储器寻址时,指令的操作数部分给出的地址是段内偏移地址,也称有效地址。的地址是段内偏移地址,也称有效地址。vEA包括包括: 基址寄存器内容基址寄存器内容;变址寄存器内容变址寄存器内容;偏移量偏移量;v计算方法:计算方法: EA=基址寄存器基址寄存器+变址寄存器变址寄存器 +偏移量偏移量 BX,BP SI,DI 0,8
5、,16 例例:(BX)=2000H,(SI)=1000H,偏移量,偏移量=0250H, 则则EA= 2000H+1000H+0250H=3250H9二 各种寻址方式8086/8088的寻址方式有的寻址方式有8种:种:1 立即数寻址立即数寻址(Immediate addressing)2 寄存器寻址寄存器寻址(Register addressing)3 存储器寻址存储器寻址(Memory addressing)n直接直接寻址寻址(Direct addressing)n寄存器寄存器间接间接寻址寻址(Register Indirect addressing)n寄存器相对寻址寄存器相对寻址 (Regi
6、ster relative addressing)n基址基址变址变址寻址寻址(Based indexed addressing)n相对基址变址相对基址变址寻址寻址 (Relative based indexed addressing)101 1 立即数寻址立即数寻址例如:MOV AX,1234H操作码12H34HMemory低高码段AXAHAL12 34n操作数操作数就包含在指令中,作为就包含在指令中,作为指令的一部分,跟在操作码后。指令的一部分,跟在操作码后。n立即数可以是立即数可以是8位,也可以是位,也可以是16位。如是位。如是16位,按位,按“高高低高高低低低”原则存放。原则存放。n主要
7、用于主要用于赋初值赋初值。注:立即数不能作目的操作数。以注:立即数不能作目的操作数。以AF打头的数字,前面要加一个打头的数字,前面要加一个0,如如 MOV AX,0FF00H高字节高字节 高地址高地址低字节低字节 低地址低地址112 2 寄存器寻址寄存器寻址注意:源、目的操作数的长度一致注意:源、目的操作数的长度一致n操作数包含在某寄存器中,指令中指定寄存器名称。操作数包含在某寄存器中,指令中指定寄存器名称。n对于对于16位操作数,寄存器可以是位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP和和BP等;对于等;对于8位操作数,寄存器可以是位操作数,寄存器可以是AL、AH、BL、B
8、H、CL、CH、DL和和DH。n不需要访问存储器来取得操作数,所以速度较快。不需要访问存储器来取得操作数,所以速度较快。 例如:例如: MOV SI,AX MOV AL,DH123 3 直接寻址直接寻址操作数操作数EA段地址段地址段寄存器段寄存器存储器存储器指令指令n操作数在存储器中,指令中直接包含其有效地址操作数在存储器中,指令中直接包含其有效地址EA。n操作数一般在操作数一般在DS段中,若对其它段中的数据寻址,要在段中,若对其它段中的数据寻址,要在指令中加段前缀指出段寄存器名,这称为指令中加段前缀指出段寄存器名,这称为段超越段超越。n直接寻址的地址放在方括号内,在源程序中常用变量名直接寻址
9、的地址放在方括号内,在源程序中常用变量名表示。表示。13例:(1)MOV AX,2000H将DS段中的2000H和 2001H 单元内容分别送AL和 AH(2) MOV AX,ES:2000H将ES段中的2000H和 2001H 单元内容分别送AL和 AH直接寻址中存储器操作数的有效地址也可用变量名的形式直接寻址中存储器操作数的有效地址也可用变量名的形式给出。给出。例:例: VALUE DB 12H MOV AL,VALUE 或或 MOV AL,VALUE段超越段超越14AXAHAL6789操作码操作码12H34HM代代码码段段数数据据段段67H89H51234500001234DS50000
10、+51234例如:例如:MOV AX ,1234H ;(DS)=5000H MOV AX ,ES:1234H154 4 寄存器间接寻址寄存器间接寻址n操作数在存储器中,有效地址EA=寄存器。若以SI、DI、BX间接寻址,则默认DS的内容的内容作为段地址 。若以BP 间接寻址,则默认SS的内容的内容作为段地址 。n该寻址方式可用于表格处理,在处理完表中的一项后,修改指针寄存器的内容就可以处理表中的另一项。n寄存器间接寻址时,寄存器名一定要放在方括号中。 MOV AX ,SI ;寄存器间接寻址;寄存器间接寻址 MOV AX,SI ;寄存器寻址;寄存器寻址16AXAHAL6789操作码操作码M代代码
11、码段段数数据据段段67H89H5123450000DS50000+512341234SI例如:例如:MOV AX ,SI 假设:假设:(DS)=5000H, (SI)=1234H175 5 寄存器相对寻址寄存器相对寻址n操作数的有效地址操作数的有效地址 EA=基址或变址寄存器基址或变址寄存器+位移量位移量 n基址寄存器为基址寄存器为BP、BX, BX以以DS作为默认段寄存器,作为默认段寄存器,BP以以SS 作为默认段寄存器。作为默认段寄存器。n变址寄存器为变址寄存器为SI、DI,以,以DS作为默认段寄存器作为默认段寄存器n位移量在指令中给出,位移量可以是位移量在指令中给出,位移量可以是8位或位
12、或16位的。位的。n书写时寄存器名要放在方括号中,位移可不写在方括号中。书写时寄存器名要放在方括号中,位移可不写在方括号中。 MOV AX,BX+3 MOV AX,3SI18例如:例如:MOV AX ,BP+1223H 假设:假设:(SS)=5000H, (BP)=3678HAXAHAL55AA操作码操作码12H23HM代代码码段段堆堆栈栈段段55HAAH5489B50000536781223SS50000+5489B3678BP122319例如:例如:MOV AX ,SI+1223H 假设:假设:(DS)=5000H, (SI)=3678HAXAHAL55AA操作码操作码12H23HM代代码
13、码段段数数据据段段55HAAH5489B50000536781223DS50000+5489B3678SI1223206 6 基址变址寻址基址变址寻址n操作数的有效地址:EA= 基址寄存器基址寄存器+变址寄存器变址寄存器n一般以基址寄存器来决定默认寄存器。n可以使用段超越。n该寻址方式主要用于二维数组。用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素。n下面两种表示方法是等价的: MOV AX,BX+DI MOV AX,DIBX21例如:例如:MOV AX MOV AX ,BX+ DI BX+ DI 假设:假设:(DS)=5000H, (BX)=1223H , (DI)=54H(
14、DS)=5000H, (BX)=1223H , (DI)=54HAXAHAL55AAM数数据据段段55HAAH512775000051223DS50000+512771223BX0054DI227 7 相对基址变址寻址相对基址变址寻址n又叫带位移量的基址变址寻址: EA= EA= 基址寄存器基址寄存器+变址寄存器变址寄存器 + +位移量位移量 n一般以基址寄存器来决定默认寄存器。n该寻址方式也主要用于二位数组操作,位移量即为数组起始地址。n下面四种表示方法是等价的: MOV AXMOV AX,BX+DI+1234HBX+DI+1234H MOV AX MOV AX,1234HBX+DI1234
15、HBX+DI MOV AX MOV AX,1234HDIBX1234HDIBX MOV AX MOV AX,1234HBXDI1234HBXDI23例如:例如:MOV AX ,BX+ DI-2 假设:假设:(DS)=5000H, (BX)=1223H , (DI)=54HAXAHAL55AA操作码操作码FEHM代代码码段段数数据据段段55HAAH5127550000DS50000+512751223BX0054DIFFFE5127724存储器寻址时的约定存储器寻址时的约定存储器操作类型存储器操作类型默认段寄存器默认段寄存器允许超越的段寄存器允许超越的段寄存器偏移地址寄存器偏移地址寄存器取指令代
16、码取指令代码CS无无IP堆栈操作堆栈操作SS无无SP源串数据访问源串数据访问DSCS、ES、SSSI目的串数据访问目的串数据访问ES无无DI通用数据访问通用数据访问DSCS、ES、SS偏移地址偏移地址以以BPBP、SPSP间接寻址间接寻址的指令的指令SSCS、DS、ES偏移地址偏移地址程序只能在程序只能在CSCS段、堆栈操作数只能在段、堆栈操作数只能在SSSS段、目的段、目的串串操作数只能在操作数只能在ESES;其他操作虽然也有默认段,但允许段超越。其他操作虽然也有默认段,但允许段超越。 251 1、给定(、给定(BXBX)=637DH=637DH,(,(SISI)=2A9BH=2A9BH,位
17、移量,位移量D=7237HD=7237H,试确定在,试确定在以下各种寻址方式下的有效地址是什么?以下各种寻址方式下的有效地址是什么?(1 1)立即寻址)立即寻址 (2 2)直接寻址)直接寻址(3 3)使用)使用BXBX的寄存器寻址的寄存器寻址 (4 4)使用)使用BXBX的间接寻址的间接寻址(5 5)使用)使用BXBX的寄存器相对寻址的寄存器相对寻址 (6 6)基址变址寻址)基址变址寻址(7 7)相对基址变址寻址)相对基址变址寻址2 2、假定(、假定(DSDS)=2000H=2000H,(,(ESES)=2100H=2100H,(,(SSSS)=1500H=1500H, (SISI)=00A0
18、H=00A0H,(,(BXBX)=0100H=0100H,(,(BPBP)=0010H=0010H,数据段中变量,数据段中变量名名VALVAL的偏移地址值为的偏移地址值为0050H0050H,试指出下列源操作数字段的寻址方式,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?是什么?其物理地址值是多少?(1 1) MOV AXMOV AX,0ABH 0ABH (2 2) MOV AXMOV AX,BXBX(3 3) MOV AXMOV AX,100H 100H (4 4) MOV AXMOV AX,VALVAL(5 5) MOV AXMOV AX,BX BX (6 6) MOV AX
19、MOV AX,ESES:BXBX(7 7) MOV AXMOV AX,BP BP (8 8) MOV AXMOV AX,SISI(9 9) MOV AXMOV AX,BX+10 BX+10 (1010)MOV AXMOV AX,VALBXVALBX(1111)MOV AXMOV AX,BXSI BXSI (1212)MOV AXMOV AX,VALBXSIVALBXSI264.2 8086/8088指令系统指令系统4.2.1 数据传送类指令数据传送类指令4.2.2 算术运算类指令算术运算类指令4.2.3 逻辑运算与移位指令逻辑运算与移位指令4.2.4 串操作指令串操作指令4.2.5 控制转移类
20、指令控制转移类指令4.2.6 处理器控制类指令处理器控制类指令274.2.1 4.2.1 数据传送类指令数据传送类指令一、通用数据传送类指令一、通用数据传送类指令二、地址传送指令二、地址传送指令三、标志位传送指令三、标志位传送指令四、输入输出数据传送指令四、输入输出数据传送指令IN/OUT28一、通用数据传送类指令一、通用数据传送类指令n1. MOV传送指令传送指令n2. 堆栈操作指令堆栈操作指令PUSH/POPn3. 交换指令交换指令XCHGn4. 查表转换指令查表转换指令XLAT(或称换码指令或称换码指令)291. MOV1. MOV指令指令n指令格式:指令格式:MOV DST, SRCn
21、功能:将源操作数功能:将源操作数SRC送至目的操作数送至目的操作数DST。 nSRC和和 DST可以是字或字节,可以是字或字节,两者必须等长两者必须等长。n源操作数可以是通用寄存器、段寄存器、存储器以及立即数;源操作数可以是通用寄存器、段寄存器、存储器以及立即数;n目的操作数可以是通用寄存器、段寄存器(目的操作数可以是通用寄存器、段寄存器(CS除外)或存储器。除外)或存储器。30注意:注意:立即数和段寄存器立即数和段寄存器CS不能作为目标操作数;不能作为目标操作数; 立即数不能直接传送到段寄存器;立即数不能直接传送到段寄存器; 两个存储单元之间不能直接传送数据;两个存储单元之间不能直接传送数据
22、; 两个段寄存器之间不能直接传送数据。两个段寄存器之间不能直接传送数据。通用寄存器AX,BX,CX,DXBP,SP,SI,DI段寄存器DS,ES,SS,CS存储器立即数MOV指令允许传送数据的途径31n MOV AL, BL ;通用寄存器之间传送字节数据通用寄存器之间传送字节数据n MOV DS, AX ;通用寄存器与段寄存器之间传送数据通用寄存器与段寄存器之间传送数据n MOV AX, 0FF3BH ;立即数传送到通用寄存器立即数传送到通用寄存器n MOV AL, 1000H ;通用寄存器与存储器之间传送数据通用寄存器与存储器之间传送数据n MOV BP+DI, ES ;段寄存器与存储器之间
23、传送数据段寄存器与存储器之间传送数据n MOV AX, DATA_SEG MOV DS, AX段地址必须通过寄存器如段地址必须通过寄存器如AX寄存器送到寄存器送到DS寄存器。寄存器。MOVMOV指令举例指令举例32n MOV AL, E 把立即数(字符把立即数(字符E的的ASCII码)送到码)送到AL寄存器。寄存器。n MOV BX, OFFSET TABLE把把TABLE的偏移地址(而非内容)送到的偏移地址(而非内容)送到BX寄存器。其中寄存器。其中OFFSET为属性操作符,表示把后面符号地址的值(不是内为属性操作符,表示把后面符号地址的值(不是内容)作为操作数。容)作为操作数。n MOV
24、AX, YBPSI把地址为把地址为 16 * * (SS)+(BP)+(SI)+位移量位移量Y 的存储单元的的存储单元的内容送给内容送给AX寄存器。寄存器。33 (1)OPR1 (1)OPR1与与OPR2OPR2位数匹配;位数匹配;MOV AL , BX MOV AL , BL (2) (2)立即数只能作源操作数,不能作目的操作数。立即数只能作源操作数,不能作目的操作数。MOV 5H , AL MOV AL , 5H (3) (3)、不能直接在两个存储单元之间进行数据交换、不能直接在两个存储单元之间进行数据交换, ,必须用内部必须用内部寄存器作为过渡传送数据。如:寄存器作为过渡传送数据。如:M
25、OV 3000H,2000H MOV AL,2000H MOV 3000H,AL MOV BX , SI MOV BX , SI 练习练习34(4 4)不能用立即数直接对段寄存器赋值,必须用内部寄存器或存)不能用立即数直接对段寄存器赋值,必须用内部寄存器或存储单元作为过渡。储单元作为过渡。也不允许在两段寄存器之间直接传送数据,但可以由段寄存器向也不允许在两段寄存器之间直接传送数据,但可以由段寄存器向内部寄存器或存储单元传送数据。内部寄存器或存储单元传送数据。 MOV DS , 2000H MOV DS , 2000H MOV DX , 2000HMOV DX , 2000H MOV DS ,
26、DX MOV DS , DX (5 5)CSCS和和IPIP不能作为目的操作数。不能作为目的操作数。(6 6)MOVMOV指令不影响标志位。指令不影响标志位。352.2.堆栈操作指令堆栈操作指令PUSH/POPPUSH/POP在8086/8088系统中,堆栈是一段RAM区域。栈底的一端地址较大,栈顶的一端地址较小。段基址在SS中,SP始终指向栈顶。堆栈操作始终遵守“FILO” 原则,数据的存入和取出都在栈顶进行。在8086/8088系统中,PUSH/POP以字为单位。堆栈的主要用途:(1)现场和返回地址的保护 (2)寄存器内容的保护 (3)传递参数 (4)存储局部变量36指令格式:指令格式:
27、PUSH SRC;压入堆栈指令;压入堆栈指令PUSH POP DST;弹出堆栈指令;弹出堆栈指令POP功能:功能:PUSH指令使指令使SP-2SP,然后将,然后将16位的源操作数位的源操作数压入堆栈,先高位后低位。源操作数可以是通用寄存器、压入堆栈,先高位后低位。源操作数可以是通用寄存器、段寄存器和存储器。段寄存器和存储器。 (SP)(SP) 2 ,(SP)+1,(SP) (SRC) POP指令与指令与PUSH指令相反,它从栈顶弹出指令相反,它从栈顶弹出16位操位操作数到目标操作数,同时修改作数到目标操作数,同时修改SP+2SP,使,使SP指向新的指向新的栈顶。目标操作数可以是通用寄存器、段寄
28、存器(栈顶。目标操作数可以是通用寄存器、段寄存器(CS除外)除外)或存储器。或存储器。 (DST) (SP)+1,(SP) , (SP)(SP) +237注意:注意:(1 1)堆栈数据的存取必须以字为单位。)堆栈数据的存取必须以字为单位。 PUSH CL PUSH CL PUSH CX PUSH CX (2 2)不能用立即数作操作数。)不能用立即数作操作数。(3 3)可以指定段寄存器作操作数,但)可以指定段寄存器作操作数,但POPPOP指令不能用指令不能用CSCS段寄存器。段寄存器。(4 4)先进后出。)先进后出。 PUSH DS PUSH DS PUSH ES PUSH ES POP ES
29、POP ES POP DS POP DS (5) (5)都不影响标志位。都不影响标志位。38指令执行前指令执行前堆栈段堆栈段(SP)(AX)=2107H指令执行后指令执行后堆栈段堆栈段(SP)2107低地址低地址进栈方向进栈方向低地址低地址(SP)(SP) 2(SP)+1,(SP) (SRC)出栈方向出栈方向指令执行后指令执行后堆栈段堆栈段(SP)(AX)=2107H指令执行前指令执行前堆栈段堆栈段(SP)(AX)=?21072107低地址低地址低地址低地址(DST) (SP)+1,(SP) (SP)(SP) +2PUSH AX POP AX39AXAHAL0543操作码操作码M代代码码段段数
30、数据据段段AAHBBH堆堆栈栈段段SS8000+200 0SP08200 082000AXAHAL0543操作码操作码M代代码码段段数数据据段段AAHBBH堆堆栈栈段段SS8000+1FF ESP081FF E81FFE05H43HSP-2SP例如:例如:PUSH AX;403. 交换指令交换指令XCHGn指令格式:指令格式:XCHG DST, SRCn功能:功能:将源操作数将源操作数SRC的内容与目的操作数的内容与目的操作数DST的内容交换。的内容交换。 操作数同时是字或字节。操作数同时是字或字节。n源操作数可以是通用寄存器、存储器;源操作数可以是通用寄存器、存储器; 目的操作数可以是通用寄
31、存器、存储器。目的操作数可以是通用寄存器、存储器。注意:注意:不能在两个存储单元之间直接交换数据;不能在两个存储单元之间直接交换数据; 段寄存器和立即数不能作为操作数。段寄存器和立即数不能作为操作数。举例:举例:MOV AX,2244H;AX=2244H MOV BX,3366H;BX=3366H XCHG AX,BX; 交换后,交换后,AX=3366H,BX=2244H414. 查表转换指令查表转换指令XLAT(或称换码指令或称换码指令)n指令格式:指令格式:XLAT 或或XLAT 转换表转换表;隐含寄存器为隐含寄存器为BX,ALn功能:功能:完成一个字节的查表转换。它将数据段中偏移地址为完
32、成一个字节的查表转换。它将数据段中偏移地址为BX与与AL寄存器之和寄存器之和的存储单元内容送入的存储单元内容送入AL寄存器,即:寄存器,即:BX+ALAL。特点:特点:对于一些无规律的代码转换特别方便。对于一些无规律的代码转换特别方便。注意:注意:表的首地址置于表的首地址置于BX中,中,AL中存放对象在表中的相对地址中存放对象在表中的相对地址。表中的内容则是所需要转换的代码,表中的内容则是所需要转换的代码,表的长度不得超过表的长度不得超过256个字节。个字节。指令执行后,指令执行后,所查找的对象自动存于所查找的对象自动存于AL中中, BX内容保持不变内容保持不变 XLAT的操作数是隐含的,也可
33、用表的首地址名称来表示。的操作数是隐含的,也可用表的首地址名称来表示。42n例:数字0 9的对应的7段LED显示示代码为:40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。试用XLAT指令求数字5的七段码值。TABEL DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H MOV BX,OFFSET TABLE MOV AL,5 XLAT ;AL=12H举例举例43Memory2CHAL=0FHBXF0040HF004FH如如 BX=0040H,AL=0FH, DS=F000H所建立的表格如图所示。所建立的表格如图所示。 指令
34、指令 XLAT把把 F0000+0040+0F=F004F的的内容送内容送AL,所以指令执行后,所以指令执行后AL=2CH即指令把即指令把AL中的代码中的代码0FH转换为转换为2CH44二、地址传送指令二、地址传送指令n 1. 有效地址有效地址(EA) 传送指令传送指令nLEA(Load effective address)n 2. 地址指针传送指令地址指针传送指令nLDS(Load DS with Pointer)nLES(Load ES with Pointer)451 1.LEA .LEA 有效地址有效地址(EA)(EA)送寄存器指令送寄存器指令n 指令格式:指令格式: LEA reg1
35、6, SRC;将将SRC的有效地址送到指定的寄存器中。的有效地址送到指定的寄存器中。n 注意:注意:n MOV指令和指令和LEA指令的区别:指令的区别:MOV指令传送操作数的内容。指令传送操作数的内容。 LEA指令传送操作数的地址。指令传送操作数的地址。n取源操作数地址的偏移量。源操作数必须是存储单元,目的取源操作数地址的偏移量。源操作数必须是存储单元,目的操作数必须是操作数必须是16位寄存器且不能是段寄存器。位寄存器且不能是段寄存器。MOV AX ,1000HMOV AX ,1000H; AX 1000HAX 1000HLEA AX,1000HLEA AX,1000H; AX 1000HAX
36、 1000HLEA BX,BP+SILEA BX,BP+SI; BX BP+SIBX BP+SI LEA BX,TABLE LEA BX,TABLE 与与 MOV BX,OFFSET TABLE MOV BX,OFFSET TABLE 等价。等价。462 2. LDS(LES). LDS(LES) 地址指针传送指令地址指针传送指令n指令格式:指令格式: LDS(LES)reg16, SRCn执行操作:执行操作:从从SRC指定的存储单元中,取出一个指定的存储单元中,取出一个4字节地址指针,送进一对目的寄存器。字节地址指针,送进一对目的寄存器。其中前两个字节(表示变量的偏移地址)送到指令中指定的目
37、的寄存器中,其中前两个字节(表示变量的偏移地址)送到指令中指定的目的寄存器中,后两个字节(表示变量的段地址)送入到后两个字节(表示变量的段地址)送入到DS或或ES。n注:注:目的操作数必须是目的操作数必须是16位寄存器,位寄存器,LDS常使用常使用SI寄存器,寄存器,LES常使用常使用DI寄存器,但不能是段寄存器。寄存器,但不能是段寄存器。47TABLE DD 12345678HLDS BX, TABLEBX 5678H, DS 1234H设设DS=1200H,(,(12450H)=F346H,(,(12452H)=0A90H执行指令执行指令 LDS SI , 450H SI F346H,DS
38、 0A90H举例举例48三、标志位传送指令三、标志位传送指令标志位传送指令专门用于对标志寄存器(标志位传送指令专门用于对标志寄存器(FR)的保护和更新操作。)的保护和更新操作。n 1.标志寄存器读写指令标志寄存器读写指令nLAHF(Load AH with flags);AH FSnSAHF (Store AH into flags);FS AHn 2.标志寄存器入栈出栈指令标志寄存器入栈出栈指令nPUSHF(Push the flags)nPOPF (Pop the flags)491.1.标志寄存器读写指令标志寄存器读写指令LAHF/SAHFLAHF/SAHF11000001FLAGOF
39、DF IF TF SF ZFAFPFCF07AHMOV AH,0C1HSAHF ;CF=1,PF=0 ;AF=0,ZF=1,SF=1n指令格式:指令格式:LAHF/ SAHFn执行操作:执行操作: AHFSL / FSLAHLAHF把标志寄存器的低字节(含SF、ZF、AF、PF和CF)读到AH寄存器。SAHF把寄存器AH送至标志寄存器的低字节(含SF、ZF、AF、PF和CF)。502.2.标志寄存器入栈出栈指令标志寄存器入栈出栈指令PUSHF/POPFPUSHF/POPF常用在过程调用和中断服务程序的开头和结尾处,保护主程序的状态。常用在过程调用和中断服务程序的开头和结尾处,保护主程序的状态。
40、也可利用这两条指令改变标志寄存器中任一位的状态。也可利用这两条指令改变标志寄存器中任一位的状态。n指令格式:指令格式:PUSHFn执行操作执行操作:把标志寄存器的内容:把标志寄存器的内容压入堆栈。压入堆栈。(SP)(SP) 2(SP)+1,(SP) (FS)n指令格式:指令格式:POPFn执行操作:执行操作:把当前堆栈顶的一个把当前堆栈顶的一个字传送到标志寄存器字传送到标志寄存器 (FS) (SP)+1,(SP) (SP)(SP) +2518086/8088指令系统中没有能直接修改指令系统中没有能直接修改TF标志位的指令,标志位的指令,可用以下程序段来实现可用以下程序段来实现TF的改变:的改变
41、: PUSHF POP AX ;标志寄存器的内容送标志寄存器的内容送AX OR AH,01H ;将将TF位置位置1 PUSH AX POPF ;AX的内容送标志寄存器的内容送标志寄存器举例:举例:52四、输入输出数据传送指令四、输入输出数据传送指令IN/OUTIN/OUT指令格式:指令格式:直接寻址:直接寻址: IN AL, port8OUT port8, AL IN AX, port8OUT port8, AX间接寻址:间接寻址:IN AL, DX OUT DX, ALIN AX, DXOUT DX, AX功能:功能:从从/向向一个一个8位端口位端口读读/写写一个一个8位字节到位字节到AL中
42、;或中;或从从/向向两个连续的两个连续的8位端口位端口读读/写写一个字到一个字到AX中。中。注意:注意:当端口地址小于当端口地址小于256时,采用直接寻址方式;当端口地址大于或等于时,采用直接寻址方式;当端口地址大于或等于256时,采用时,采用间接寻址方式,端口地址放在间接寻址方式,端口地址放在DX中。中。专门用于在专门用于在AX或或AL寄存器与寄存器与I/O端口之间传送数据。端口之间传送数据。53举例举例IN AX, 70H ;将将70H、71H两端口的值读入两端口的值读入AX ;AL(70H),AH (71H)MOV DX,3F0HIN AL,DX ;从端口从端口3F0H读一个字节到读一个
43、字节到ALIN AX,DX ;从端口从端口3F0H3F1H读一个字到读一个字到AXOUT 27H,AL ;将将1个字节从个字节从AL输出到端口输出到端口27H OUT DX,AX ;将将1个字从个字从AX输出到输出到DXDX+1指定的端口指定的端口543.3.2 3.3.2 算术运算类指令算术运算类指令一、二进制算术运算指令一、二进制算术运算指令二、符号扩展指令二、符号扩展指令CBW/CWD三三 、BCD算术运算指令(十进制调整指令)算术运算指令(十进制调整指令)551) 算术运算的数据类型算术运算的数据类型无符号的二进制数无符号的二进制数带符号的二进制数带符号的二进制数无符号的压缩十进制数无
44、符号的压缩十进制数(压缩型压缩型BCD码码)无符号的非压缩十进制数无符号的非压缩十进制数(非压缩型非压缩型BCD码码)压缩十进制数只有加压缩十进制数只有加/减运算,其余三种数据类型都可减运算,其余三种数据类型都可以进行加、减、乘、除运算。以进行加、减、乘、除运算。56二进制的无符号数和带符号数的长度都可以是二进制的无符号数和带符号数的长度都可以是8位或位或16位,位,但它们所能表示的数的范围是不同的。但它们所能表示的数的范围是不同的。十进制数以字节的形式存储。十进制数以字节的形式存储。压缩十进制数,每个字节存两位数。压缩十进制数,每个字节存两位数。非压缩的十进制数,每个字节存一位数(低非压缩的
45、十进制数,每个字节存一位数(低4位)位)。8086/8088提供调整操作指令,可方便地进行压缩或非压提供调整操作指令,可方便地进行压缩或非压缩十进制数的算术运算。缩十进制数的算术运算。 算术运算类指令共算术运算类指令共20条,包括加、减、乘、除运算,符号扩展和十进条,包括加、减、乘、除运算,符号扩展和十进制调整指令,除符号扩展指令制调整指令,除符号扩展指令(CBW,CWD)外,都影响标志位。外,都影响标志位。57一、二进制算术运算指令一、二进制算术运算指令1 1、加减法指令、加减法指令2 2、乘除法指令、乘除法指令581 1、加减法指令、加减法指令(1)加减法指令)加减法指令ADD/SUB(2
46、)带进位、借位的加减法指令)带进位、借位的加减法指令ADC/SBB(3)增量和减量指令)增量和减量指令INC/DEC(4)取负指令)取负指令NEG(5)比较指令)比较指令CMP59(1 1)加减法指令)加减法指令ADD/SUBADD/SUBn指令格式:指令格式: ADD DST, SRC SUB DST, SRCn执行操作:完成两个操作数的加执行操作:完成两个操作数的加/减运算,结果送入目标操作数减运算,结果送入目标操作数 DST DST SRCn要求:要求:DST只能用寄存器和存储单元,只能用寄存器和存储单元, SRC可以为立即数。两可以为立即数。两个操作数不能同时为存储器,且类型必须一致,
47、即都是字节或字。个操作数不能同时为存储器,且类型必须一致,即都是字节或字。n特点:影响标志位特点:影响标志位n举例:举例:60vADD AL, 50HADD DI, SIADD BX+DI, AXADD AX, BX+2000HvMOV DX, 4652HADD DX, 0F0F0H4652 0100 0110 0101 0010 + F0F0 + 1111 0000 1111 0000 1 0011 0111 0100 0010 ZF=0 SF=0 CF=1 OF=0 AF=0ADDADD指令实例指令实例61单字节和双字节数的表示范围单字节和双字节数的表示范围n8位二进制数表示的十进制数的范
48、围:位二进制数表示的十进制数的范围:n无符号数:无符号数:0255n符号数:符号数:-128+127n16位二进制数表示的十进制数的范围:位二进制数表示的十进制数的范围:n无符号数:无符号数:065535n符号数:符号数:-32768+3276762符号数和无符号数都不溢出符号数和无符号数都不溢出二进制加法看作无符号数看作符号数0000 0100+ 0000 1011 0000 1111 4 + 1 1 1 5 CF=0 +4 + (+1 1) 1 5 OF=063无符号数溢出无符号数溢出二进制加法看作无符号数看作符号数0000 0111+ 1111 1011 0000 00101 7 + 2
49、51 258 CF=1现为2结果错 +7 + (- 5) +2 OF=064符号数溢出符号数溢出二进制加法看作无符号数看作符号数0000 1001+ 0111 1100 1000 0101 结果原=11111011=-123 9 + 124 133 CF=0 +9 + (+124) +133 OF=1现为-123,结果错65符号数和无符号数都溢出符号数和无符号数都溢出二进制加法看作无符号数看作符号数1000 0111+ 1111 0101 0111 11001 135 + 245 380 CF=1现为124,结果错 -121 + (-11) -132 OF=1现为124,结果错66相加的数据根
50、据编程者的意图,规定为带符号数或无符号数。相加的数据根据编程者的意图,规定为带符号数或无符号数。对于无符号数,对于无符号数, CF置置1,表示溢出。,表示溢出。对于带符号数,对于带符号数,OF置置1,表示溢出。,表示溢出。67(2)带进位、借位的加减法指令)带进位、借位的加减法指令ADC/SBBn指令格式:指令格式: ADC DST, SRC SBB DST, SRCn执行操作:执行操作: DST DST +SRC+CF DSTDST - SRC - CFn特点:影响标志位特点:影响标志位ADC/SBB指令主要用于多字节运算中。指令主要用于多字节运算中。68例例4.3计算两个多字节十六进制数之
51、和:计算两个多字节十六进制数之和: 3B74AC60F8H + 20D59E36C1H = ? 被加数和加数均有被加数和加数均有5个字节,可以编一个循环程序实现以上个字节,可以编一个循环程序实现以上运算。假设已将被加数和加数分别存入从运算。假设已将被加数和加数分别存入从DATA1和和DATA2开始开始的两个内存区。要求相加结果仍存回以的两个内存区。要求相加结果仍存回以DATA1为首址的内存区。为首址的内存区。 69F8H60HACH存储器DATA174H3BHC1H36H9EHD5H20HDATA2被加数加数70开始初始化: 置循环次数清SI, 清进位标志CF取一个字节加数与一个被加数相加并送
52、回内存区SI加1循环次数减1循环次数到结束YN71程序如下:程序如下: MOV CX,5;设置循环次数;设置循环次数 MOV SI,0 ;置位移量初值;置位移量初值 CLC ;清进位;清进位CFLOOP: MOV AL,DATA2SI ;取一个加数;取一个加数 ADC DATA1SI,AL;和一个被加数相加;和一个被加数相加 INC SI ;位移量加;位移量加1 DEC CX ;循环次数减;循环次数减1 JNZ LOOP ;若没完,转;若没完,转LOOP继续继续 HLT ;程序暂停;程序暂停 72举例:举例:有两个四字节数分别放在自有两个四字节数分别放在自FIRST和和SECOND开始的存储区
53、中。存开始的存储区中。存放时,最低字节在地址最低处,则可用以下程序段实现相加。放时,最低字节在地址最低处,则可用以下程序段实现相加。MOV AX,WORD PTR FIRST;取第一个数的低;取第一个数的低16位位ADD AX,WORD PTR SECOND;与第二个加数的低;与第二个加数的低16位相加位相加MOV WORD PTR THIRD,AX;存低存低16位的和位的和MOV AX,WORD PTR FIRST+2ADC AX,WORD PTR SECOND+2;高;高16位相加,同时加上位相加,同时加上CFMOV WORD PTR THIRD+2,AX;存高;存高16位的和位的和注意:
54、指令中的注意:指令中的WORD PTR是定义字变量属性的伪指令,因是定义字变量属性的伪指令,因AX为为16位,而位,而 FIRST、SECOND和和THIRD为为32位(四字节)变量,位(四字节)变量,如不改变属性,此程序段就存在语法错误。如不改变属性,此程序段就存在语法错误。73(3 3)增量和减量指令)增量和减量指令INC/DECINC/DEC该指令执行的结果影响标志该指令执行的结果影响标志ZF、SF、OF、PF和和AF,但它不影响,但它不影响CF。该指令主要用于调整指针和计数器。该指令主要用于调整指针和计数器。n指令格式:指令格式: INC OPRDEC OPRn执行操作:执行操作: O
55、PR OPR 1n特点:影响标志位特点:影响标志位n具体指令:具体指令:INC regINC mem74(4 4)取负指令)取负指令NEGNEG指令格式:指令格式:NEG OPRD(寄存器或存储器)(寄存器或存储器)执行操作:执行操作:OPR 0 -OPRn功能:功能:该指令执行的效果是改操作数的符号。该指令执行的效果是改操作数的符号。 n特点:特点: NEG指令影响所有状态标志,对指令影响所有状态标志,对CF标志的影响为:若操作标志的影响为:若操作数不是数不是0,则总是使,则总是使CF置置1;否则置;否则置0。若对。若对-128或或-32768取负,取负,则操作数无变化,溢出标志则操作数无变
56、化,溢出标志OF置位。置位。n NEG ALADD AL, 100 ;这两条指令实现(这两条指令实现(100-AL)的运算)的运算75 例例 内存数据段存放了内存数据段存放了200个带符号数,首地址为个带符号数,首地址为TAB1,要求将,要求将各数取绝对值后存入以各数取绝对值后存入以TAB2为首址的内存区。为首址的内存区。 由于由于200个带符号数中既有正数,又有负数,因此先要判断正负。如为正个带符号数中既有正数,又有负数,因此先要判断正负。如为正数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数的绝对值,然后
57、再传送。程序如下:数的绝对值,然后再传送。程序如下: 76 LEA SI,TAB1 ;(SI)源地址指针源地址指针LEADI,TAB2 ;(DI)目标地址指针目标地址指针 MOVCX,200 ;(CX)循环次数循环次数 CHECK:MOVAL,SI ;取一个带符号数到;取一个带符号数到ALORAL,AL ;AL内容不变,但影响标志内容不变,但影响标志JNSNEXT ;若;若(SF)=0,则转,则转NEXTNEG AL ;否则取负;否则取负 NEXT:MOV DI,AL ;传送到目标地址;传送到目标地址INC SI ;源地址加;源地址加1INC DI ;目标地址加;目标地址加1DEC CX ;循
58、环次数减;循环次数减1JNZ CHECK ;如不等于零,则转;如不等于零,则转CHECKHLT ;停止;停止 77(5 5)比较指令)比较指令CMPCMPn指令格式:指令格式: CMP OPR1, OPR2n执行操作:执行操作: OPR1-OPR2n特点:影响标志位而不改变操作数本身,用于比较大小。特点:影响标志位而不改变操作数本身,用于比较大小。 若两操作数相等,则若两操作数相等,则ZF1,后面接,后面接JE或或JZ转移指令。转移指令。 若两操作数不相等,可在比较指令后,用其他标志位来确定哪一个大。若两操作数不相等,可在比较指令后,用其他标志位来确定哪一个大。 (1)、两无符号数,若、两无符
59、号数,若CF 0,则被减数则被减数减数;若减数;若CF1,则被减数,则被减数, OF0,SF1, 负溢出:负溢出:OF1,SF0,78 例例4.5 在数据段从在数据段从MYDATA开始的存储单元中分别存放了两开始的存储单元中分别存放了两个个8位无符号数,试比较它们的大小,并将大者传送到位无符号数,试比较它们的大小,并将大者传送到MAX单元。单元。程序如下:程序如下:LEABX,MYDATA;MYDATA偏移地址送偏移地址送BXMOVAL,BX ;第一个无符号数送;第一个无符号数送ALINCBX ;BX指向第二个无符号数指向第二个无符号数CMP AL,BX ;两个数比较;两个数比较JNC DON
60、E ;如;如CF=0,则转,则转DONEMOV AL,BX ;否则,第二个无符号数送;否则,第二个无符号数送ALDONE:MOV MAX,AL ;较大的无符号数送;较大的无符号数送MAX单元单元 HLT ;停止;停止 79例:设有两个例:设有两个64位数按位数按“高高低低高高低低”原则存放在同一个段的原则存放在同一个段的两个缓冲区两个缓冲区DATA1和和DATA2中,现需要计算中,现需要计算DATA1-DATA2。 MOV CX,4;64位分成位分成4个字个字 SUB BX,BX;清指针,同时清清指针,同时清CFNEXT:MOV AX,DATA2BX ;取减数取减数 SBB DATA1BX,A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026福建厦门市集美区杏苑实验幼儿园产假顶岗教师招聘3人笔试模拟试题及答案解析
- 2026年杭州市上城区人民政府南星街道办事处编外人员招聘1人笔试模拟试题及答案解析
- 2026春季北京农商银行校园招聘笔试模拟试题及答案解析
- 2026广西南宁市良庆区民政局公开招聘工作人员2人笔试备考试题及答案解析
- 2026国网数字科技控股有限公司(国网雄安金融科技集团有限公司)高校毕业生招聘53人(第二批)笔试参考题库及答案解析
- 2026春季“梦想靠岸”招商银行杭州分行校园招聘笔试备考试题及答案解析
- 2025-2026学年河北省高三上学期10月复习阶段性质量检测政治试题
- 2025年交通安全“行人权利”培训
- 2026年初二语文下学期期中考试试卷及答案(共七套)
- 数据治理与提升京东服务水平关联性研究
- 泰晤士小镇案例分析知识讲解
- SB/T 10279-2017熏煮香肠
- 《分数的意义》教学课件
- GB/T 14383-2008锻制承插焊和螺纹管件
- 部编版七年级历史下册第1单元课件
- 注塑成型工艺培训教程 课件
- 射孔工艺培训课件
- 全新版大学英语综合教程4课文参考译文
- 本科教学审核评估审核范围释义课件
- 大学考研笔记教案张美萍《植物学专题》电子教案
- 部编版《道德与法治》五年级下册第3课《弘扬优秀家风》优质课件【最新】
评论
0/150
提交评论