第03章8086指令系统_第1页
第03章8086指令系统_第2页
第03章8086指令系统_第3页
第03章8086指令系统_第4页
第03章8086指令系统_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 8086的的指令系统指令系统 计算机是通过执行计算机是通过执行指令指令来管理计算机并完成一来管理计算机并完成一系列给定功能。每种计算机都有一组系列给定功能。每种计算机都有一组指令集指令集提供给提供给用户使用,这组指令集叫做计算机的用户使用,这组指令集叫做计算机的指令系统指令系统。3.1 3.1 8086指令的特点指令的特点 指令的一般格式为:指令的一般格式为: 操作码操作码 操作数,操作数,操作数,操作数目目的的源源MOV AL,12HADD AL,24H不能作目的操作数不能作目的操作数不能直接将立即数不能直接将立即数传送到段寄存器传送到段寄存器不允许源和目的不允许源和目的操作

2、数同时都是操作数同时都是存储器操作数存储器操作数1) 1) 立即数:操作数包含在指令中。立即数:操作数包含在指令中。 如:如:MOV AX,080AH ADD AL,22) 2) 寄存器操作数:操作数在寄存器操作数:操作数在CPU的某个寄存器中。的某个寄存器中。 如:如:MOV DS,AX3) 3) 存储器操作数:操作数在内存数据区内。存储器操作数:操作数在内存数据区内。 如:如:MOV AX,22A0H MOV bufferSI,AX操作数存在方式操作数存在方式 在微机中,操作数有三种类型:在微机中,操作数有三种类型: 寻址方式是寻找指令中操作数所在地址的方法。寻址方式是寻找指令中操作数所在

3、地址的方法。3.2 80863.2 8086的寻址方式的寻址方式3.2.1 80863.2.1 8086寻址方式的说明寻址方式的说明外部总线外部总线内部暂存器内部暂存器 IP ES SS DS CS输入输入/输出输出控制电路控制电路执行部分执行部分控制电路控制电路1 2 3 4 5 6ALU标志寄存器标志寄存器 AH AL BH BLCH CL DH DL SP BP SI DI通用通用寄存寄存器器地址地址加法加法器器指令队列缓冲器指令队列缓冲器执行部件执行部件 (EU)总线接口部件总线接口部件 (BIU)16位位20位位16位位8位位80868086微处理器的内部结构框图微处理器的内部结构框

4、图FFFFFHFFFFFHFFFF0HFFFF0H00030H00030H0002FH0002FH00020H00020H0001FH0001FH00010H00010H0000FH0000FH00001H00001H00000H00000H第0节第0节16个单元16个单元第第65535节65535节16个单元16个单元第1节第1节16个单元16个单元第2节第2节16个单元16个单元CSCSIPIPSSSSSPSPBXBXDSDS代码段代码段64KB64KB堆栈段堆栈段64KB64KB数据段数据段64KB64KB存存储储器器的的分分段段及及存存储储器器地地址址分分配配 段内偏移量由指令的操作数

5、部分规定,通段内偏移量由指令的操作数部分规定,通常称为常称为有效地址有效地址,用,用EA表示。表示。1. 有效地址有效地址EA 8086的内存地址的内存地址 :段地址:段地址16 + 段内偏移量段内偏移量 段地址存放在段寄存器段地址存放在段寄存器CS、 DS、 ES、 SS中;中; 段内偏移量即有效地址段内偏移量即有效地址EA存放在存放在BX、BP、SI、DI 中;或直接地址,如中;或直接地址,如3000H中;或中;或上述形式的上述形式的组合组合中。见中。见p37图图3-1。 立即寻址立即寻址 变址寻址变址寻址 寄存器寻址寄存器寻址 基址基址+变址寻址变址寻址 直接寻址直接寻址 串寻址串寻址

6、寄存器间接寻址寄存器间接寻址 I/O端口寻址端口寻址 基址寻址基址寻址 隐含寻址隐含寻址3.2.2 3.2.2 寻址方式介绍寻址方式介绍 立即寻址立即寻址 例如:例如:MOV AX,1234H 如图所示。如图所示。 立即寻址主要用于给寄存器或立即寻址主要用于给寄存器或存储单元赋存储单元赋初值初值。(复制)。(复制) 寄存器寻址寄存器寻址 操作数存放在指令规定的寄存器中。操作数存放在指令规定的寄存器中。 16位:位:AX、BX、CX、DX、SI、DI、SP、BP、 CS、DS、SS或或ES 8位:位:AH、AL、BH、BL、CH、CL、DH或或DL 例如:例如:MOV AX,BX 将寄存器将寄存

7、器BXBX的内容送入的内容送入AXAX中。(复制)中。(复制)X XX XAXAXBXBX 执行速度很快执行速度很快 直接寻址直接寻址 默认以默认以DS的内容为基准。的内容为基准。 例如:例如:MOV AL,2000H有效地址有效地址EA为为2000H2000H,若,若段地址段地址DS=4000H,则段,则段起始物理地址为起始物理地址为4000H左左移移4 4位,即位,即40000H,此指,此指令将数据段中物理地址为令将数据段中物理地址为42000H单元的内容传至单元的内容传至AL寄存器。寄存器。 但允许利用但允许利用段超越方法段超越方法。 例如:例如:MOV AX,ES:BUFF4000H

8、56HA AX X D DS S 40000H2000H操作码操作码00H20H56H42000H符号地址符号地址 寄存器间接寻址寄存器间接寻址例如:例如:MOV AX,BXEAEA= =BPBPBXBXDIDISISIDSDSSSSS4000H34H 25HA AX X D DS S 40000H0100H25H40100H34H0100H B BX X数据段代码段 基址寻址基址寻址 若使用若使用BPBP,则隐含地,则隐含地表示操作数存放在表示操作数存放在SSSS中。中。若使用若使用BXBX,则隐含地表示,则隐含地表示操作数存放在操作数存放在DSDS中。中。EA=EA=BXBXBPBP8 8

9、位偏移量位偏移量1616位偏移量位偏移量 变址寻址变址寻址 EA=EA=SISIDIDI8 8位偏移量位偏移量1616位偏移量位偏移量 段地址规定为段地址规定为DSDS段寄段寄存器的内容。存器的内容。 变址寻址方式常用于变址寻址方式常用于存取表格或一维数组中的存取表格或一维数组中的元素。元素。 基址基址+变址寻址方式变址寻址方式 课堂练习:课堂练习:假设假设DS=4000H,CS=0000H,SS=2000H,ES=1000H,SI=0010H,DI=0100H,BX=0200H,COUNT=2000H,问下列指令执行后,寄存器,问下列指令执行后,寄存器AX、AH的内容如何?的内容如何?MOV

10、 AX,COUNTSIMOV AH,BX+DI+1234HAXAX的内容为的内容为40000H+2000H+0010H=42010H和和42011H单元的单元的内容,前一个在低内容,前一个在低8位,后一个在高位,后一个在高8位。位。AH的内容为的内容为40000H+0200H+0100H+1234H=41534H单单元的内容。元的内容。 串寻址串寻址如:如:MOVSBES:DI DS:SIDI DI 1 SI SI 1 I/O端口寻址端口寻址 直接端口寻址:由直接端口寻址:由指令直接给出输入输出指令直接给出输入输出设备的端口地址,规定设备的端口地址,规定为为8 8位位。 间接端口寻址:由间接端

11、口寻址:由寄存器寄存器DX给出输入输出给出输入输出设备的端口地址,规定设备的端口地址,规定为为1616位位。 如:如:IN AL,20H OUT DX,AL 隐含寻址隐含寻址 操作数是隐含的。操作数是隐含的。 如:如:AAA 隐含操作数是隐含操作数是AH、ALMOV AX,3100H 立即寻址立即寻址 寄存器寻址寄存器寻址 直接寻址直接寻址 寄存器间接寻址寄存器间接寻址 基址寻址基址寻址 变址寻址变址寻址 基址基址+ +变址寻址变址寻址 串寻址串寻址 I/O端口寻址端口寻址 隐含寻址隐含寻址MOV SS,AXMOV AX,3100H; ES:HMOV BX,DI; SI,BX;BPMOV SI

12、,DATABX; BPMOV BX,SI+1003H; DIMOV AX,COUNTBXSIMOVSBIN AL,data8; DXAAA寻址方式寻址方式 MOV BX,2000HMOV DX,DASSBX MOV DI,BX SUB AX,BXSIADD AX,DI+64HMOV AX,BP+10MOV AX,ES:BXCMP BX+SI+10,100IN AL,DXMOVS例:分别指出下列指令中源、目的操作数的寻址方式例:分别指出下列指令中源、目的操作数的寻址方式 源操作数源操作数 目的操作数目的操作数 立即立即 寄存器寄存器 基址基址 寄存器寄存器 寄存器寄存器 寄存器间址或变址寄存器间

13、址或变址 基址基址+ +变址变址 寄存器寄存器 变址变址 寄存器寄存器 基址基址 寄存器寄存器带段超越寄存器带段超越寄存器 寄存器寄存器 立即立即 基址基址+ +变址变址 寄存器间址寄存器间址 寄存器寄存器 隐含隐含 隐含隐含3.3 8086的指令格式及数据类型的指令格式及数据类型1. 8086的操作码的操作码2. 8086指令中寄存器的编码指令中寄存器的编码3. 指令中的操作数指令中的操作数4. 指令中的数据类型指令中的数据类型 无符号数无符号数 带符号数带符号数 ASCII码码 BCD数数3.4 8086的指令集的指令集1数据传送指令数据传送指令2算术运算指令算术运算指令3位操作指令位操作

14、指令4串处理指令串处理指令5程序控制转移指令程序控制转移指令6处理器控制指令处理器控制指令3.4.1数据传送指令数据传送指令 数据传送指令是最基本的一种指令,主要用来数据传送指令是最基本的一种指令,主要用来实现存储器与寄存器、寄存器与寄存器以及立即数实现存储器与寄存器、寄存器与寄存器以及立即数到寄存器或存储器的字节或字的传送。一般包括目到寄存器或存储器的字节或字的传送。一般包括目的操作数和源操作数。的操作数和源操作数。注意注意:源和目的操作数的数据长度必须保持一致。:源和目的操作数的数据长度必须保持一致。 除除POPFPOPF和和SAHFSAHF指令外,这类指令的操作结果指令外,这类指令的操作

15、结果 不影响不影响FRFR。1、通用数据传送指令、通用数据传送指令表表1 通用数据传送指令格式通用数据传送指令格式(1)传送)传送指令指令MOV 功能:将源操作数传送到目的操作数中。功能:将源操作数传送到目的操作数中。实际实际 上是进行数据的上是进行数据的“复制复制”。 格式:格式:MOV OP目,目,OP源源 OP目:寄存器、存储器目:寄存器、存储器 OP源:寄存器、存储器、立即数源:寄存器、存储器、立即数注意:注意:1) CS、立即数不能作目的操作数;、立即数不能作目的操作数; 2) 立即数与存储器变量类型要一致;立即数与存储器变量类型要一致; 3) 源与目的操作数不能同时为存储器操作数。

16、源与目的操作数不能同时为存储器操作数。 注意:注意:不能用一条不能用一条MOV指令实现以下传送,若需要时,指令实现以下传送,若需要时, 可用两条可用两条MOV指令来实现,例如:指令来实现,例如: 存储单元之间的传送存储单元之间的传送 MOV AX,MEM1;先将先将MEM1传送至通用数据寄存器传送至通用数据寄存器 MOV MEM2,AX;再从通用数据寄存器传送至再从通用数据寄存器传送至MEM2 立即数至段寄存器的传送立即数至段寄存器的传送 MOV AX,DATA;先将立即数传送至通用数据寄存器先将立即数传送至通用数据寄存器 MOV DS,AX ;再从通用数据寄存器传送至段寄存器再从通用数据寄存

17、器传送至段寄存器 段寄存器之间的传送段寄存器之间的传送 MOC AX,DS;段寄存器传送至通用数据寄存器段寄存器传送至通用数据寄存器 MOV ES,AX;从通用数据寄存器传送至另一个段寄存器从通用数据寄存器传送至另一个段寄存器 另外,对于另外,对于CS和和IP,通常不要求用户利用传送指令,通常不要求用户利用传送指令改变其中内容。但改变其中内容。但CS可作为源操作数。可作为源操作数。 变量的段地址和偏移地址分别用两个算符变量的段地址和偏移地址分别用两个算符SEG和和OFFSET来指定,加上变量名,就可以分别产来指定,加上变量名,就可以分别产生该变量的段地址或偏移地址,如:生该变量的段地址或偏移地

18、址,如:SEG W,OFFSET DATA。例:例:MOV DI,AX;寄存器间接寻址,;寄存器间接寻址,AX中的中的16位数送位数送 ;DI、DI+1单元单元MOV SI,ES:BP;寄存器间接寻址,缺省时段寄存;寄存器间接寻址,缺省时段寄存 ;器为;器为SS,这里特指附加段,这里特指附加段ES中中BP所指所指 ;向的两个单元的内容送;向的两个单元的内容送SI寄存器。寄存器。 MOV WORD PTRSI,6070H;立即数;立即数6070H送送 ;到;到SI字单元。字单元。PTR是一个汇编操作符,是一个汇编操作符, ;与前面的;与前面的 WORD一起表示该单元类型一起表示该单元类型 ;是字

19、单元。;是字单元。 堆栈是按后进先出原则组织的一段特殊存储区域,堆栈是按后进先出原则组织的一段特殊存储区域,8086系统设置堆栈段寄存器系统设置堆栈段寄存器SS(存放堆栈段段地址)(存放堆栈段段地址)和堆栈指针和堆栈指针SP(存放偏移地址)。(存放偏移地址)。堆栈操作指令堆栈操作指令00000SS:0000SS:SP堆堆 栈栈 段段例:例:PUSH AX;将将AX内容压入堆栈,同时内容压入堆栈,同时SP-2 SP (2) 2) 进栈指令进栈指令PUSHPUSH格式:格式:PUSH OP 将将16位位寄存器或存储单元的内容送入堆栈。寄存器或存储单元的内容送入堆栈。注意注意:CS不能作为目的操作数

20、;操作数必须是不能作为目的操作数;操作数必须是16位。位。 中断服务程序中保护现场和恢复现场时用到:中断服务程序中保护现场和恢复现场时用到: PUSH AX PUSH BX POP BX POP AX 将将SP所指向的堆栈栈顶的一个所指向的堆栈栈顶的一个字字弹到寄存器弹到寄存器或存储单元中。或存储单元中。 (3) 3) 出栈指令出栈指令POPPOP格式:格式:POP OPPOP OP(4 4)交换指令)交换指令XCHGXCHG格式:格式:XCHG OP1,OP2功能:将源操作数和目的操作数内容相互交换。功能:将源操作数和目的操作数内容相互交换。注意:注意:通用寄存器间、通用寄存器与存储器间可以

21、,通用寄存器间、通用寄存器与存储器间可以, 但段寄存器、存储单元间不可。但段寄存器、存储单元间不可。2. 累加器专用传送指令累加器专用传送指令 实现实现CPU与外设(打印机、显示器等)交换数据、与外设(打印机、显示器等)交换数据、传送控制命令。传送控制命令。 8086用专用输入用专用输入(in)输出输出(out)指令,通过累指令,通过累加器加器AX(AL)/DATA,AX(AL)/DX完成,前者为完成,前者为直接寻址(直接寻址(000FFH),后者为间接寻址),后者为间接寻址(00000FFFFH),并对所有的外设地址采用独立于),并对所有的外设地址采用独立于存储器的编址方式,外设地址称为存储

22、器的编址方式,外设地址称为端口号端口号。(1)输入指令)输入指令IN格式:格式:IN 累加器,端口累加器,端口例:例:IN AL,21H;将端口;将端口21H的的8位数读到位数读到AL中中 MOV DX,201H IN AX,DX ;将端口;将端口201H和和202H的的16位数位数 ;读入;读入AX中中 格式:格式:OUT 端口,累加器端口,累加器例:例: OUT 22H,AX;将;将AX中的中的16位数传到端口位数传到端口 ;22H和和23H MOV DX,501H OUT DX,AL ;将;将AL中的中的8位数输出到端口位数输出到端口 ;501H(2)输出指令)输出指令OUT功能:将功能

23、:将BX和和AL的内容相加作为有效地址的内容相加作为有效地址 EA,在一个表格中找出此单元的内容,在一个表格中找出此单元的内容 并传给并传给AL。 该(查表)指令是在一个字节型变量表中该(查表)指令是在一个字节型变量表中取某个值存入取某个值存入AL。特殊之处:源操作数使用特殊之处:源操作数使用BX、AL这种这种BX 基址、基址、AL变址的寻址方式,变址的寻址方式,表的起表的起 始地址的偏移量始地址的偏移量应事先装入应事先装入BX寄存寄存 器,器, AL中存放中存放查找对象在表中地址查找对象在表中地址 与表起始地址相差的字节数与表起始地址相差的字节数。(3)换码指令)换码指令XLAT格式:格式:

24、XLAT MOV AL,9 ;9 AL MOV BX,OFFSET S_TAB;表首址;表首址 BX XLAT ;BX+AL AL 例:以下指令序列把例:以下指令序列把S_TABS_TAB表的第表的第1010个字节送入个字节送入ALAL。 用于将源操作数的地址传送到目的操作数,用于将源操作数的地址传送到目的操作数,其中源操作数必须是其中源操作数必须是存储器操作数存储器操作数,目的操作数,目的操作数必须是必须是16位的位的内部寄存器内部寄存器。共有三条如表。共有三条如表2:表表2 目标地址传送指令格目标地址传送指令格式式3. 目标地址传送指令目标地址传送指令(1) LEA(1) LEA指令指令格

25、式:格式:LEA OP目,目,OP源源功能:将源操作数的功能:将源操作数的有效地址有效地址EA送目的操作数。送目的操作数。比较下列两条指令:比较下列两条指令:LEADI,TABLEMOV DI,OFFSET TABLE;取;取TABLE偏移地址送偏移地址送DI(2) LDS(2) LDS和和LESLES指令指令 LDS和和LES指令指令的源操作数是一个具有的源操作数是一个具有双字双字类型类型(4字节)的变量,取出后,低地址的两字节送目的字节)的变量,取出后,低地址的两字节送目的操操作数作数,高地址的两字节分别送高地址的两字节分别送DS和和ES段寄存器段寄存器。例:例:LDS DI,2300;将

26、;将2300和和2301单元的内单元的内 ;容送;容送DI,将,将2302和和 ;2303单元的内容送单元的内容送DS。4. 标志寄存器传送指令标志寄存器传送指令(1)读标志指令读标志指令 LAHF:将标志寄存器:将标志寄存器低低8位位送送AH(2)设置标志指令设置标志指令SAHF:将:将AH送送标志寄存器标志寄存器低低8位位(3)PUSHF指令:将指令:将16位标志寄存器入栈,同时修改位标志寄存器入栈,同时修改 栈指针栈指针(4)POPF指令:将栈顶的一个字送指令:将栈顶的一个字送标志寄存器标志寄存器入栈,入栈, 同时修改栈指针同时修改栈指针SP SAHF和和POPF指令将影响标志寄存器的内

27、容。指令将影响标志寄存器的内容。标志寄存器结构图标志寄存器结构图3.4.2 算术运算指令算术运算指令加法指令加法指令加法(字、字节)加法(字、字节)带进位加法指令带进位加法指令带进位加法带进位加法(字、字节字、字节)加加 1 指令指令加加 1(字、字节)(字、字节)减法指令减法指令减法(字、字节)减法(字、字节)带借位减法指令带借位减法指令带借位减法带借位减法(字、字节字、字节)减减 1 指令指令减减 1(字、字节)(字、字节)比较指令比较指令比较(字、字节)比较(字、字节)求补指令求补指令求补码求补码1. 1. 算术加法指令算术加法指令 (1 1)算数加法)算数加法ADDADD 格式:格式:

28、ADD OPADD OP目,目,OPOP源源功能:将源和目的操作数相加,结果保留在目的操作数功能:将源和目的操作数相加,结果保留在目的操作数 中。中。例:例:MOV AXMOV AX,FIRST FIRST ;FIRSTFIRST存储区第一个数送存储区第一个数送AXAX ADD AX ADD AX,SECOND SECOND ;两数相加送;两数相加送AXAX。见例。见例4-254-25(2 2)带进位算数加法)带进位算数加法ADCADC格式:格式:ADC OPADC OP目,目,OPOP源源功能:将源和目的操作数及功能:将源和目的操作数及CFCF的值相加,结果保留在目的值相加,结果保留在目 的

29、操作数中。的操作数中。(3 3)加)加1 1指令指令INCINC 格式:格式:INC OPINC OP功能:将操作数加功能:将操作数加1 1,再送回该操作数。(不影响,再送回该操作数。(不影响CFCF)存储器操作数要说明类型存储器操作数要说明类型BCD数运算调整指令数运算调整指令 用一个字节表示一位十进制数,称为用一个字节表示一位十进制数,称为非组非组合(或非压缩)式合(或非压缩)式BCDBCD码;码;用一个字节表示两位用一个字节表示两位十进制数,称为十进制数,称为组合(或压缩)式组合(或压缩)式BCDBCD码;码; 例:例:0000 01100000 0110(6 6),),0001 011

30、00001 0110(1616)。)。 BCDBCD数向高位的进位是逢数向高位的进位是逢1010进进1 1,而,而4 4位二进位二进制数向高位进位是逢制数向高位进位是逢1616进一,若加上进一,若加上6 6,则可以,则可以得到正确的得到正确的BCDBCD数。数。DAA:对对AL中两个中两个组合组合BCD码相加所得的结果进行码相加所得的结果进行 调整,结果存于调整,结果存于AL中。中。方法:若方法:若(AL&0FH) 9或或AF=1,则则(AL+6)送送AL, AF1;若若(AL) 9FH或或CF=1,则则 (AL+60H)送送AL,CF1。例:例:MOV AX,3456H;AH34H,

31、AL56HADD AL,AH ;AL=8AHDAA ;AL=90H(A9, ;8AH 9,0EH614H ;08H1)方法:若方法:若(AL&0FH) 9或或AF=1,则则(AL+6)&0FH送送 AL,AH加加1,AFCF1;否则否则AL&0FH 送送AL,AFCF 0。 重要之处是将重要之处是将AL的高的高4位清零,表现在位清零,表现在&0FH ( “与与” )。)。2. 算数减法指令算数减法指令1、算数减法指令:、算数减法指令:SUB OP目,目,OP源源 功能:功能: OP目目- OP源源 OP目目2、带借位的减法指令:、带借位的减法指令: SBB OP

32、目,目,OP源源 功能:功能: OP目目- OP源源- CF OP目目3、减、减1指令:指令: DEC OP 功能:功能: OP-1 OP(不影响(不影响CF) 4、对压缩、对压缩BCD数减法操作的结果进行校正数减法操作的结果进行校正DASDAS:对对AL中两个中两个组合组合BCD码相减所得的结果进行码相减所得的结果进行 调整,结果存于调整,结果存于AL中。中。调整原则:调整原则:AL低低4位大于位大于9或或AF=1时,时,AL-6AL, AF=1;AL高高4位大于位大于9或者或者CF=1时,时, AL-60HAL,CF=1。 5、对非压缩、对非压缩BCD数减法操作的结果进行校正数减法操作的结

33、果进行校正AASAAS:对对AL中两个中两个非组合非组合BCD码相减所得的结果进行码相减所得的结果进行 调整,结果存于调整,结果存于AL中。中。调整原则:调整原则:AL低低4位位表示的数表示的数大于大于9或者或者AF=1时,时, AL-6AL,AH-1AH,AF=CF=1, 清除清除AL高高4位。位。 6 6、比较指令、比较指令CMPCMP格式:格式:CMP OPCMP OP目,目,OPOP源源功能:将目标操作数与原操作数功能:将目标操作数与原操作数相减相减,不回送结果,不回送结果, 只影响只影响标志位标志位。例如:例如:CMP ACMP A,B B 判断两个操作数是否相等:(零标志位判断两个

34、操作数是否相等:(零标志位ZFZF) 若若ZFZF1 1,则,则A AB B;若;若ZFZF0 0,则,则A BA B。 判断两个操作数的大小,分为:判断两个操作数的大小,分为: 判断两个无符号操作数的大小:(进位标志位判断两个无符号操作数的大小:(进位标志位CFCF) 若若CF=1CF=1,则,则ABAB;若;若CF=0CF=0,则,则ABAB。 判断两个带符号操作数的大小:(符号标志位判断两个带符号操作数的大小:(符号标志位SFSF及及 溢出标志位溢出标志位OFOF) 若若SF OFSF OF1 1,则,则ABAB; 若若SF OFSF OF0 0,则,则ABAB。 例:有两组例:有两组5

35、050个字节的数据,分别放在自个字节的数据,分别放在自FIRSTFIRST和和 SECONDSECOND开始的存储区中,试比较两组数据是开始的存储区中,试比较两组数据是 否相同,若相同则否相同,若相同则0 0AL,否则,否则FFHAL。 MOV SI,OFFSET FIRST MOV DI,OFFSET SECOND MOV CX,50 P :MOV AL,SI CMP AL,DI JZ NEXT MOV AL,0FFH JMP STOPNEXT:INC SI INC DI DEC CX JNZ P MOV AL,0STOP:HLT7、取补指令、取补指令NEG格式:格式:NEG OP功能:将操

36、作数功能:将操作数取补取补(用(用0减去操作数)后送回原操作减去操作数)后送回原操作 数。数。 OP是乘数,可为是乘数,可为8/16位通用寄存器及存储器;位通用寄存器及存储器;另一操作数另一操作数被乘数被乘数隐含在隐含在AL/AX中。中。AH或或DX的内的内容决定标志位容决定标志位CF和和OF。ALAL8 8位操作数位操作数 AH AL AH AL AXAX1616位操作数位操作数 DX AX DX AX乘法运算示意图乘法运算示意图3. 算术乘法指令算术乘法指令 (1)无符号数无符号数乘法指令:乘法指令: MUL OP (2)带符号数带符号数乘法指令:乘法指令: IMUL OP例例1:MUL

37、BL ;AL乘乘BL AXMUL BX ;AX乘乘BX DX、AXMUL BYTE PTRDI+6 ;AL乘存储器乘存储器(8位位)MUL WORD PTR ALPHA;AX乘存储器乘存储器(16位位)例例2:MOV AL,14H;(AL)14H(20)MOV CL,05H;(CL)05H(5)MUL CL ;(AX)0064H(100), ;(CF)(OF)0(AH)0)(3)非压缩非压缩BCD数数乘法乘法操作结果校正操作结果校正AAMAAM:对对AX中两个非组合中两个非组合BCD码相乘所得的结果进码相乘所得的结果进 行调整,结果存于行调整,结果存于AX中。中。方法:方法:AL中内容中内容1

38、0,商送,商送AH,余数送,余数送AL。例:例:MUL OP(非组合(非组合BCD码)码) AAM4. 算术除法指令算术除法指令(1)无符号数无符号数除法指令除法指令DIV格式:格式:DIV OP 除数除数OP必须是寄存器或存储器,必须是寄存器或存储器,被除数被除数隐含在隐含在AX(字节除字节除)或或DX、AX(字除法字除法)中,商在中,商在AL或或AX,余,余数在数在AH或或DX。例:例:DIVCL;AX中的数据除以中的数据除以CL中的数据,中的数据,AL存存 ;商,;商,AH存余数存余数DIV WORD PTRDI;DX和和AX中的中的32位位 ;数除以;数除以DI和和DI+1单元中的单元

39、中的16位数位数 ;据,;据,AX存商,存商,DX存余数。存余数。(2)带符号数带符号数除法指令除法指令IDIV格式:格式: IDIV OP 除法不允许两个字长相等的操作数相除,被除数必除法不允许两个字长相等的操作数相除,被除数必须是除数的须是除数的双倍字长双倍字长。(3)带符号数字节扩展指令)带符号数字节扩展指令CBW格式:格式: CBW功能:将功能:将AL中的单字节数的中的单字节数的符号符号扩展到扩展到AH中,若中,若 AL80H,则,则0赋给赋给AH;若;若AL80H,则,则 0FFH赋给赋给AH例例1:MOV AL,4FH ;(AL)=0100 1111B CBW ;(AH)=0000

40、 0000B例例2:MOV AL,0FBH;(AL)=1111 1011B CBW ;(AH)=1111 1111B(4)带符号数字扩展指令)带符号数字扩展指令CWD格式:格式: CWD功能:将功能:将AX中的数的中的数的符号符号扩展到扩展到DX中,若中,若 AX8000H,0赋给赋给DX;若;若AX8000H, 0FFFFH赋给赋给DX(5)非压缩非压缩BCD数数除法除法校正校正AADAAD:对对AX中两个非组合中两个非组合BCD码进行调整。码进行调整。方法:方法:AH中内容中内容10与与AL中内容相加,结果送中内容相加,结果送AL, AH清零。清零。例:例:AAD DIV OP(非组合(非

41、组合BCD码)码)3.4.3 位操作指令位操作指令表表 逻辑运算指令格式逻辑运算指令格式NOT:逐:逐位位取反后送回原处。取反后送回原处。OR:将某些:将某些位位设置为设置为1(1),其余位不变,其余位不变(0);非组;非组 合合BCD码转换为码转换为ASCII码。码。AND:屏蔽:屏蔽(0)或保留或保留(1)某些某些位位。例例1:OR AX,8080H;(AX)V(1000 0000 1000 0000B)例例2:MOV AL,09H ;(AL)=09H(9) OR AL,30H ;(AL)=39H= 9表表 逻辑运算指令格式逻辑运算指令格式XOR:将某些:将某些位位“求反求反”(1),其余

42、位不变,其余位不变(0);将将 寄存器清零。寄存器清零。 1010 1010B例:例:MOV AL,0FH ;(AL)=0000 1111B XOR AL,0AAH;(AL)=1010 0101B(0A5H) XOR CX,CX ;CX清零清零TEST:作逻辑与运算后置标志位。用于:作逻辑与运算后置标志位。用于位位测试测试(1)。例:例:TEST AL,00000001B;第第0位是位是1还是还是0?(状态?(状态 ;标志如例;标志如例4-46)2. 逻辑移位指令逻辑移位指令(1)逻辑左移指令:)逻辑左移指令:SHL OP目,计数值目,计数值 将操作数内容左移,每移一次,最低位将操作数内容左移

43、,每移一次,最低位补补0,最高,最高位送位送CF。(3)逻辑右移指令:)逻辑右移指令:SHR OP目,计数值目,计数值 将操作数内容右移,每移一次,最高位将操作数内容右移,每移一次,最高位补补0,最低,最低位送位送CF。(2)算术左移指令:)算术左移指令:SALOP目,计数值目,计数值 同同SHL(4)算术右移指令:)算术右移指令:SAR OP目,计数值目,计数值 将操作数内容右移,每移一次,最高位的值将操作数内容右移,每移一次,最高位的值不变不变,最低位送最低位送CF。CLCL(5)不带进位循环左移指令:)不带进位循环左移指令:ROL OP目,计数值目,计数值 将操作数内容循环左移,每移一次

44、,最高位将操作数内容循环左移,每移一次,最高位移入移入CF,同时移入同时移入最低位最低位。(6)不带进位循环右移指令:)不带进位循环右移指令:ROR OP目,计数值目,计数值 将操作数内容循环右移,每移一次,最低位将操作数内容循环右移,每移一次,最低位移入移入CF,同时移入同时移入最高位最高位。(7)带进位循环左移指令:)带进位循环左移指令:RCLOP目,计数值目,计数值 包括进位位在内,一起循环左移,每移一次,最高包括进位位在内,一起循环左移,每移一次,最高位移入位移入CF,原,原CF移入最低位。移入最低位。例:例:AL=abcde (abcde表示二进制表示二进制1或或0),CL=2, 循

45、环右移指令:循环右移指令:ROR AL,1 执行后,执行后,AL=eabcd,CF=e 带进位循环右移指令:带进位循环右移指令:RCR AL,CL 执行后,执行后,AL=deeab,CF=c(8)带进位循环右移指令:)带进位循环右移指令:RCR OP目,计数值目,计数值 包括进位位在内,一起循环右移,每移一次,最低包括进位位在内,一起循环右移,每移一次,最低位移入位移入CF,原,原CF移入最高位。移入最高位。 例:将一组例:将一组BCDBCD码转换成码转换成ASCIIASCII码。设某缓冲区从码。设某缓冲区从BUFBUF单单 元开始连续存放着元开始连续存放着8 8个组合个组合BCDBCD码,要

46、求将它们转换码,要求将它们转换 成成ASCIIASCII码,存放在以码,存放在以RESRES单元开始的缓冲区。高位单元开始的缓冲区。高位 BCDBCD码转换成的码转换成的ASCIIASCII码,放在地址较高的单元。码,放在地址较高的单元。 MOV SI,OFFSET BUF MOV DI,OFFSET RES MOV BL,8TRAT:MOV AL,SI MOV BH,AL AND AL,0FH OR AL,30H MOV DI,AL INC DIMOV CL,4SHR BH,CLOR BH,30HMOV DI,BHINC SIINC DIDEC BLJNZ TRATHLT3.4.4 串处理指

47、令串处理指令所有基本的串操作有如下共同点:所有基本的串操作有如下共同点:1 1、用、用SISI、 DIDI寻址源、目标操作数,且假定是在现行寻址源、目标操作数,且假定是在现行 的数据、附加段中(即段地址在的数据、附加段中(即段地址在DSDS、ESES中);中);2 2、每执行一次串操作后自动修改指针、每执行一次串操作后自动修改指针SISI、DIDI。若。若DFDF=0=0 (1 1),则每次操作后),则每次操作后SISI和和DIDI自动加(减)自动加(减)1 1(对字(对字 节串操作)或加(减)节串操作)或加(减) 2 2(对字串操作);(对字串操作);3 3、串长(字或字节个数)存放在、串长

48、(字或字节个数)存放在CXCX中。中。 在执行指令前必须在在执行指令前必须在DSDS、ESES、SISI、DIDI、DFDF和和CXCX中中置好需要的值,它们是串操作指令的隐含操作数。置好需要的值,它们是串操作指令的隐含操作数。1、串传送指令:、串传送指令:MOVSOP目,目,OP源源 MOVSB MOVSW 2、串比较指令:、串比较指令:CMPSOP目,目,OP源源 CMPSB CMPSW 3、串搜索指令:用来从目标串中寻找关键字、串搜索指令:用来从目标串中寻找关键字 SCASOP SCASB SCASW功能:将功能:将AL/AX中的关键字,中的关键字,减去减去由由DI所指向的所指向的目目

49、标串标串中的元素,不回送结果,根据结果置标志中的元素,不回送结果,根据结果置标志 位,并位,并修改修改DI寄存器内容,指向下一个元素。寄存器内容,指向下一个元素。 例:将偏移首地址为例:将偏移首地址为BUFF1的的20个字节型个字节型 数据,传送到首地址为数据,传送到首地址为BUFF2的内存区。的内存区。 MOV SI,OFFSET BUFF1 LEA DI,BUFF2 MOV CX,20PL1:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ PL1 HLT用一般传送指令实现:用一般传送指令实现:用串传送指令实现:用串传送指令实现: CLDPL1:MO

50、VSB 例:将偏移首地址为例:将偏移首地址为BUFF1的的20个字节型个字节型 数据,传送到首地址为数据,传送到首地址为BUFF2的内存区。的内存区。 MOV SI,OFFSET BUFF1 LEA DI,BUFF2 CLD MOV CX,20 PL1:MOVSB LOOP PL1 HLTREP MOVSB用循环指令实现:用循环指令实现:用串指令前缀实现:用串指令前缀实现:例:比较两组数是否相同,如果相同例:比较两组数是否相同,如果相同 AL=0,否则,否则AL置位。置位。 MOV SI,OFFSET DATA1 LEA DI,DATA2 CLD MOV CX,50 REPZ CMPSB JZ

51、 EQQ MOV AL,0FFH JMP STOP EQQ:MOV AL,0STOP:HLT4 4、串装入指令、串装入指令LDSBLDSB或或LDSWLDSW 指令格式:指令格式:LODS LODS OPOP LODS LODSB B LODS LODSW W 功能:将源串中功能:将源串中SISI所指向的存储单元中的一个字所指向的存储单元中的一个字 节节/ /字取到字取到AL/AXAL/AX中,并中,并修改修改SISI的内容,指的内容,指 向下一个字节向下一个字节/ /字单元。字单元。5 5、串存储指令、串存储指令STOSBSTOSB或或STOSWSTOSW 指令格式:指令格式:STOS ST

52、OS OPOP STOS STOSB B STOS STOSW W 功能:将功能:将AL/AXAL/AX中的一个字节中的一个字节/ /字存到由字存到由DIDI所指向所指向 的目标串存储单元中,并的目标串存储单元中,并修改修改DIDI的内容,的内容, 指向下一个字节指向下一个字节/ /字的存放单元。字的存放单元。 6. 6. 指令前缀指令前缀(1 1)REPREP重复重复 REPREP前缀用在前缀用在MOVSMOVS、STOSSTOS、LODSLODS指令前。指令前。功能:每执行一次串指令,串长功能:每执行一次串指令,串长(CX)-1(CX)-1,直到,直到(CX)=0(CX)=0 重复执行才结

53、束。重复执行才结束。(2 2)REPZ/REPEREPZ/REPE相等则重复相等则重复 该指令一般用在该指令一般用在CMPSCMPS、SCASSCAS指令前。指令前。功能:每执行一次串指令功能:每执行一次串指令(CX)-1(CX)-1,并判断,并判断ZFZF标志是否标志是否 为为0 0。只要。只要(CX)0(CX)0且且ZFZF1 1(对应数据相等),(对应数据相等), 则重复执行,直到则重复执行,直到(CX)(CX)0 0或或ZFZF0 0(不等)。(不等)。(3 3)REPNZ/REPNEREPNZ/REPNE不相等则重复不相等则重复 该指令一般用在该指令一般用在CMPSCMPS、SCAS

54、SCAS指令前。指令前。功能:每执行一次串指令功能:每执行一次串指令(CX)-1(CX)-1,并判断,并判断ZFZF标志是否标志是否 为为0 0,只要,只要(CX)0(CX)0且且ZF=0ZF=0,则重复执行,直到,则重复执行,直到 (CX)(CX)0 0或或ZFZF1 1 。3.4.5 程序控制转移指令程序控制转移指令 一般情况下,程序是顺序执行的,但不可能一般情况下,程序是顺序执行的,但不可能总是顺序执行,改变程序执行顺序的指令称为总是顺序执行,改变程序执行顺序的指令称为转移指令转移指令。(1)转移指令,分为无条件转移指令和条件转)转移指令,分为无条件转移指令和条件转 移指令;移指令; (

55、2)循环指令;)循环指令; (3)过程调用与返回指令;)过程调用与返回指令; (4)中断与返回指令。)中断与返回指令。1、无条件转移指令(、无条件转移指令(JMP指令)指令)(1)段内直接转移指令)段内直接转移指令段内段内直接直接短转移:短转移:JMP SHORT OP 执行操作执行操作:(IP)(IP)+ 8位位位移量位移量(补码补码)段内段内直接直接近转移:近转移:JMP NEAR PTR OP 执行操作执行操作:(IP)(IP)+ 16位位位移量位移量例:例: JMP NEXT;符号地址即标号符号地址即标号 NEXT: (2)段内)段内间接间接转移:转移:JMP WORD PTR OP或

56、或 JMP OP 执行操作:执行操作:(IP)(EA)例:例: JMP WORD PTRBXDI;EA=BX+DI(存储器存储器) JMP BX ;EA=BX(通用寄存器通用寄存器)(3)段间)段间直接直接(远远)转移:转移:JMP FAR PTR OP 执行操作:执行操作:(IP)OP的段内的段内偏移地址偏移地址 (CS)OP所在段的段地址所在段的段地址例:例: JMP FAR PTR NEXT;NEXT所在段的段地址、偏移所在段的段地址、偏移 ;地址送;地址送CS、IPJMP 2000H:1000H ;CS=2000H,IP=1000H(4)段间)段间间接间接转移:转移:JMP DWORD

57、 PTR OP 执行操作:执行操作:(IP)(EA) (CS)(EA+2)例:例: JMP DWORD PTR SI;EA存放在存放在SI、SI+1,段地,段地 ;址存放在;址存放在SI+2,SI+32、条件转移指令、条件转移指令 单条件单条件转移指令:转移指令:格式格式 测试条件测试条件 格式格式 测试条件测试条件 JZ(JE) OP ZF=1 JP OP PF=1JNZ(JNE) OP ZF=0 JNP OP PF=0 JS OP SF=1 JC OP CF=1 JNS OP SF=0 (JB、JNAE) JO OP OF=1 JNC OP CF=0 JNO OP OF=0 (JAE、JN

58、B)注意:注意:只能用只能用段内段内直接寻址的直接寻址的8位位移量位位移量(-128127) 指令执行时,首先测试条件,满足则程序转移指令执行时,首先测试条件,满足则程序转移 到指令给出的目标标号,否则顺序执行下一条到指令给出的目标标号,否则顺序执行下一条 指令语句。指令语句。条件条件A处理处理条件条件A判断判断条件条件B处理处理条件条件B判断判断NYYN 无符号数的条件转移指令无符号数的条件转移指令 格式格式 测试条件测试条件 JNBE(JA) OP CF且且ZF=0 不低于也不等于不低于也不等于/高于高于例:在例:在DATA1开始的存储区中存放了开始的存储区中存放了100 个个8位无符号数

59、,找出其中最大的数位无符号数,找出其中最大的数 存入存入MAX单元。单元。 MOV BX,OFFSET DATA1 MOV AL,BX MOV CX,63H P1:INC BX CMP AL,BX JAE NEXT MOV AL,BX NEXT:DEC CX JNZ P1 MOV MAX,AL HLT 带符号数的条件转移指令带符号数的条件转移指令 格式格式 测试条件测试条件 JNLE(JG) OP (SF OF)且且ZF=0 3. 循环控制指令循环控制指令注意:注意:* CX中存放循环次数,中存放循环次数, * 只能用段内直接寻址的只能用段内直接寻址的8位位移量位位移量(-128127)。 LOOP 目标标号目标标号:计数循环,:计数循环,CX=0退出循环。退出循环。 LOOPZ / LOOPE 目标标号目标标号:结果为:结果为0/相等循环,相等循环, CX=0或或ZF=0退出循环。退出循环。 LOOPNZ / LOOPNE 目标标号目标标号:结果不为:结果不为0/不相等不相等 循环,循环,CX=0或或ZF=1退出循环。退出循环。 JCXZ 目标标号目标标号:计数为:计数为0转移,若转移,若CX=0 时,则时,则 控制转向目标标号,否则顺序执行。控制转向目标标号,否则顺序执行。执行步骤:执行步骤:

温馨提示

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

评论

0/150

提交评论