微机原理及接口技术-第4章-指令系统.ppt_第1页
微机原理及接口技术-第4章-指令系统.ppt_第2页
微机原理及接口技术-第4章-指令系统.ppt_第3页
微机原理及接口技术-第4章-指令系统.ppt_第4页
微机原理及接口技术-第4章-指令系统.ppt_第5页
已阅读5页,还剩155页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 8086 instruction system 本章主要教学内容 1、8086指令的基本格式 2、8086指令系统的寻址方式 3、8086指令的应用 本章教学目的 使学生掌握指令的寻址方式过程,掌握指令的应用。 教学重点:指令系统的寻址方式和指令的应用 教学难点:指令的寻址方式,第4章 8086 Instruction System,4.1 指令的基本概念和基本格式 4.2 指令的寻址方式 4.3 8086指令系统 4.4 中断调用类指令,4.1 Definition and Format of Instruction,Machine instruction:指挥计算机完成某种操作的命

2、令。 Format: Operation Code: OPD, OPS (0,1,2) OPD:目的操作数 OPS:源操作数,4.2 Instruction Addressing,4.2.1 寻址方式的基本概念 4.2.2 与数据有关的寻址方式 4.2.3 I/O端口寻址方式,4.2.1 Definition of Addressing、 Addressing Approach,指令中操作数字段实质上是指出操作数存放于何处。一般来说,操作数可以跟随在指令操作码之后,称为立即数(immediate value);操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存

3、储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程称为寻址,而寻找操作数的方法称为寻址方式。,4.2.2 related to data,1. 立即寻址(immediate addressing) 立即寻址方式中,指令操作码和操作数都在存储器代码段中。 汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数) 功能:操作数存放在 存储器,指令下一单元的 内容为立即操作数n。 图形表示如右:,【例4.1】,【例2.5】MOV AX, 2A50H 执行后(AX)=? 该例中源操作数为立即寻址方式,立即数

4、为2A50H,存放在指令的下一单元。 执行:2A50HAX 执行后:(AX)=2A50H HOW arrange it in AX? AX can be AL, or memory IV cannot be OPD but only OPS,2. Register Addressing,寄存器寻址方式的操作数在指令指明的寄存器中。 汇编格式:R 其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。 图形表示: R 指令操作数,【例4.2】,下列程序执行后,(AX)=1234H,(BX)=5678H MOV AX,BX AX=? BX=? HOW ABOUT MOV AL,BH MOV AH

5、,BX MOV AX,BL Kept same length,3. Memory Addressing,如果操作码所需操作数存放在内存储器中,则指令中需要给出操作数的地址信息。为了提高程序的灵活性,8086指令系统提供了多种存储器寻址方式 (1)直接寻址 (2)寄存器间接寻址 (3)寄存器相对寻址 (4)基址变址寻址 (5)关于段跨跃前缀,(1) 直接寻址(direct addressing),汇编格式:含有变量的地址表达式。 寄存器名:EA be directly given 。 Default DS or X: EA 功能:指令下一字单元的内容是操作数的偏移地址EA。 图形表示:,【例4.

6、3】,【例4.3】寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。 执行指令:MOV AX ,BUF 执行后:(AX)=? 图形表示: 执行:(32000H)AX 执行后:(AX)=4545H,指令操作例:MOV AX,3102H AL (3102H) , AH (3103H),如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH 则操作数的物理地址为: 20000H+3102H = 23102H 指令执行后:(AX) = ABCDH,MOV操作码,02H,31

7、H,AH,AL,23102H,CDH,ABH,存储器,代码段,数据段,. .,立即数,操作码,低8位,高8位,存储器,MOV操作码,02H,31H,AH,AL,代码段,代码段,立即寻址指令在存储器中的存放形式,AX,指令操作例:MOV AX,3102H ; AX 3102H 执行后,(AH) = 31H,(AL) = 02H,(2) 寄存器间接寻址(register indirect addressing),寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。 汇编格式:R 功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。 Do not forget bra

8、cket,寄存器间接寻址示意图:,例如:MOV AX,BX 若(DS)2000H,(BX)1000H,物理地址20000H1000H21000H。指令执行前,(AX)2030H,(21000H)0A0H,(21001H)50H,指令执行后,(AX)50A0H,(21000H)0A0H,(21001H)50H。指令执行情况如下:,偏移地址EA计算方法如下:,EA=,SISI作间址寄存器。 DS DIDI作间址寄存器。DS BXBX作间址寄存器。DS BPBP作间址寄存器。 SS,执行指令:MOV AX ,BP 执行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=? 图形表示如下:

9、,【例4.4】寄存器和存储器内容分别为:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234H,(3) 寄存器相对寻址(register relative addressing),寄存器相对寻址方式是在指令中给定一个基址寄存器(或变址寄存器)名和一个8位或16位的相对偏移量(displacement),两者之和作为操作数的有效地址。对BX、SI、DI这三个间址寄存器,指示的是数据段中的数据,而用BP作间址寄存器,则指示的是堆栈段中的数据。 汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)。 功能:操作数存放在存储器,寄存器R的内容加位移量X

10、为操作数的偏移地址EA。,偏移地址EA计算方法如下:,【例4.5】,设执行前: (AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H 执行指令:MOV AX, 6BX 执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=? Difference?,(4) 基址变址寻址(based indexed addressing),基址变址寻址方式是在指令中给出一个基址寄存器名和一个变址寄存器名,两者内容之和作为操作数的有效地址。基址寄存器为BX或BP,变址寄存器为SI或DI,但指令中不能同时出现两个基址寄存器或两个变址寄存器。如果基址寄存器为BX

11、,则段寄存器使用DS;如果基址寄存器用BP,则段寄存器用SS。 汇编格式: BR+IR 功能:操作数存放在存储器,BR的内容加IR的内容是操作数的偏移地址EA。,操作数偏移地址EA计算方法如下,【例4.6】,例如 MOV AL,BXSI(MOV AL,BXSI) 若指令执行前,(DS)1000H,(BX)0010H,(SI)0002H,(10012H)45H 则EA(BX)(SI)0012H,PA(DS)10HEA10012H 指令执行后(AL)45H。,相对基址变址寻址(relative based indexed addressing),汇编格式: XBR+IR 功能:操作数存放在存储器,

12、BR的内容加IR的内容加位移量X是操作数的偏移地址EA。,【例】,例如 MOV AL,21HBXSI (MOV AL,21HBXSI) 若指令执行前,(DS)1000H,(BX)0010H,(SI)0002H,(10033H)45H 则EA21H+(BX)(SI)0033H, PA(DS)10HEA10033H 指令执行后(AL)45H。,(5) 跨段问题,按前述规定:若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移

13、EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。 汇编格式:段寄存器名:操作数地址。 功能:段寄存器名指明操作数属哪个段。,【例4.7】跨段前缀示例。,MOVAX,DS:BP MOVCX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为: PA1 =(DS)左移4位+BP PA2 =(SS)左移4位+SI,4.2.3 I/O端口寻址方式 I/O interface addressing,8086CPU采用独立编址的

14、I/O端口,可以最多访问64K个字节端口或32K个字端口,用专门的IN指令和OUT指令访问。I/O端口寻址只用于这两种指令中。寻址方式有如下两种。 1. 直接端口寻址 在指令中直接给出端口地址,端口地址一般采用2位十六进制数,也可以用符号表示,这种寻址方式为直接端口寻址。因此,直接端口寻址可访问的端口数为0255个。 例如:IN AL,25H 2. 寄存器间接端口寻址 如果访问的端口地址值大于255,则必须用I/O端口的间接寻址方式。所谓间接寻址,是指把I/O端口的地址先送到DX中,用DX作间接寻址寄存器,而且只能用DX寄存器。 例如:MOV DX,378H IN AL, DX,计算机原理与汇

15、编语言程序设计 实验指导书 李志民编著 中南大学信息科学与工程学院自动化所,指令的机器码(machine code)表示方法,一、机器语言指令的编码目的和特点 1、机器语言指令 汇编语言 经过汇编 机器语言 流程序 程序 程序 用符号指令编写的程序 相当于解释 用二进制表示 如:CLC 1111,1000 WAIT 1001,1011,MOD,二、机器语言指令代码的编制 1、编码格式说明: 以寄存器之间或寄存器与存储器之间数据传送的 MOV指令为例: 15 10 9 8 7 6 5 3 2 0 D15D10位: 6为操作码(规定说明指令的功能) D9位(D位):规定数据的传送方向(direct

16、ion) D=1数据传送到寄存器(或存储器) D=0数据从寄存器(或M单元)传出,R/M,REG,1 0 0 0 1 0 D W,操作码,典型的MOV指令的编码格式,D8位(W位):规定数据类型 W=1数据为一个字 W=0数据是一个字节 D5D4D3位(REG位):寄存器编码,REG,W=1字,W=0字节,AX AL,BX BL,CX CL,DX DL,SP AH,BP CH,SI DH,000,011,001,010,100,111,101,110,REG,段寄存器,00 CS,11 DS,00 ES,10 SS,8086寄存器编码表,由于MOV指令有两个操作数,一个必为寄存器(由REG确定

17、),另一个可能是寄存器、可能是存储单元(由MOD和R/M编码确定),MOD和R/M的编码,MOD,R/M,00 01 10,11,W=0 W=1,000 BX+SI BX+SI+D8 BX+SI+D16 AL AX,001 BX+DI BX+DI+D8 BX+DI+D16 CL CX,010 BP+SI BP+SI+D8 BP+SI+D16 DL DX,011 BP+DI BP+DI+D8 BP+DI+D16 BL BX,101 DI DI+D8 DI+D16 CH BP,110 D16 (直接地址) BP+D8 BP+D16 DH SI,100 SI SI+D8 SI+D16 AH SP,1

18、11 BX BX+D8 BX+D16 BH DI,Example: MOV SP, BX 100010 D W MOD REG R/M W=1 D=1 MOD=11 REG=100 R/M=011 100010 1 1 11 100 011 W=1 D=0 MOD=11 REG=011 R/M=100 100010 0 1 11 011 100,4.3 8086 instruction system,包括数据传送类指令、算术运算类指令、位操作类指令、串操作类指令、控制转移类指令、处理机控制类指令。后几节将分别介绍这些指令的语句格式和功能。 4.3.1 数据传送类指令 4.3.2 算术运算类指令

19、 4.3.3 逻辑运算与移位类指令 4.3.4 串操作类指令 4.3.5 控制转移类指令 4.3.6 处理器控制指令,4.3.1 数据传送类指令,1 通用数据传送指令 2 累加器专用传送指令 3 地址传送指令 4 标志寄存器传送指令,通用数据传送指令(general purpose data transfer),(1)传送指令MOV (2)堆栈指令PUSHPOP (3)数据交换指令XCHG,(1)传送指令MOV format:MOV OPD,OPS function:将源操作数传送入目的地址,源地址内容不变。即(OPS)OPD。 下图4.1描述了MOV指令在传送数据时允许传送的路径及类型。,图

20、4.1 MOV指令所允许的数据传送路径及类型,MOV指令的形式有如下几种:,1)从通用寄存器到通用寄存器 MOV reg1,reg2 2)立即数传送到通用寄存器 MOV reg ,data 3)通用寄存器和存储单元之间 MOV mem (reg),reg (mem) 4)立即数传送到存储单元 MOV mem, data 5)段寄存器与通用寄存器间的数据传送 MOV seg,reg 或 MOV reg, seg 6)段寄存器与存储单元间的数据传送 MOV seg,mem 或 MOV mem, seg,Attention: IP不能做操作数(D or S)。 CS和IV不能用作目的操作数(D)。

21、两操作数中必有一寄存器(except IV as S)。 IV cannot be directly assigned to SR.,【例4.8】,MOV AL , B ; 把字符B的ASCII 码(42H)AL中 MOV AX , DATA ; MOV DS , AX ; 以DATA为数据段的基址,由于DS不能用立即数传送,所以先把DATAAX,再由AXDS,2数据交换指令XCHG,Format:XCHG OPD,OPS Function:将源地址与目的地址中的内容互换。 即(OPD)OPS,(OPS)OPD。 【例4.9】寄存器与存储器之间数据交换。 MOVAX,5678H;(AX)=56

22、78H MOVBX,0FFFFH;(BX)=0FFFFH XCHGAX,BX;(AX)=0FFFFH ,( BX)=5678H,2数据交换指令XCHG,ATTENTION: R与R之间 R与M之间 (段寄存器不行) (M与M之间不行),(2) 堆栈(Stack)操作指令,1)进栈指令PUSH 2)出栈指令POP,1)进栈指令PUSH,format: PUSH OPS function:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。 即:(SP)SP(OPS)158SP (SP)SP(OPS)70SP,2)出栈指令POP,语句格式: POP OPD 功能: 将栈顶元素弹出送至某

23、一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。 从POP指令功能可看出,该指令为PUSH指令的逆过程。 即:(SP)(OPD)70(SP)+SP (SP)(OPD)158(SP)+SP,例:设 SS=2000H SP=40H BX=3120H AX=25FEH 执行下述程序 PUSH BX PUSH AX POP BX 堆栈中的数据和SP的变化情况如下图,20000000,FE,25,20,31,2000003C,20000040,SP,AX=25FEH,BX=3120H,(C)执行 PUSH AX 指令后,20000000,20000040,SP,AX=25FEH,BX=3120H,

24、(A)指令执行前,20000000,FE,25,20,31,2000003E,20000040,SP,AX=25FEH,BX=25FEH,(D)执行 POP BX 指令后,20000000,20000040,SP,AX=25FEH,BX=3120H,(B)执行 PUSH BX 指令后,31,20,2000003E,2.累加器专用传送指令,(1)输入/输出指令 (2)XLAT查表指令,1)输入指令IN,输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式: 语句格式:INAL,PORT 功能:(PORT)AL 语句格式:INAX,PORT 功能:(PORT)AX 语句格式:INAL,DX

25、 功能:(DX)AL 语句格式:INAX,DX 功能:(DX)AL,例:IN AL , 0F1H ; ALF1H端口内容 IN AX , 80H ; AL80H口内容 AH81H口内容 MOV DX , 310H ; IN AL , DX ; AL310H口内容 IN AX , DX ; AL310H口内容 AH311H口内容,2)输出指令OUT,输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式: 语句格式:OUTPORT,AL 功能:(AL)PORT 语句格式:OUTPORT,AX 功能:(AX)PORT 语句格式:OUTDX,AL 功能:(AL)DX 语句格式:OUTDX,AX

26、 功能:(AX)DX,例3-34 下面几个是用OUT指令对输出端口进行操作的例子 OUT 85H , AL ;85H端口 AL内容 MOV DX , 0FF4H OUT DX , AL ;FF4H端口 AL内容 MOV DX , 300H ;DX指向300H OUT DX , AX ;300H端口 AL内容 301H端口 AH内容,(2)查表转换指令 XLAT,format: XLAT 转换表 或 XLAT function:把一个字节从一种代码转换为另一种代码。 使用XLAT前,建一个表格(此表最大为256单 元); 表格首址BX; AL中存表中位移量。 执行完XLAT指令后,AL转换后的代

27、码。,3 地址传送指令,(1)传送有效地址指令 LEA (2)传送有效地址及数据段首址指令LDS (3)传送有效地址及附加数据段指令LES,(1)传送有效地址指令 LEA,语句格式: LEA OPD,OPS 功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。 LEA与MOV指令的区别: MOV传送源操作数的内容 LEA指令传送的是偏移地址 例:设SI=1000H,DS=5000H,(51000H)=1234H LEA BX , SI ; BX=1000H MOV BX , SI ; BX=1234H=(51000H),(2)传送有效地址及数据段首址指令LDS(load poi

28、nter using DS),语句格式:LDS OPD,OPS 功能:将主存中指定字单元数据送入指定存储器,下一字单元数据送DS寄存器。,Format:LDS OPD,OPS 指令功能: 源(连续四个单元的M) 目的 偏移 DS 段地址 注意:源操作数必须为M单元,目的操作数 必须为除段R外的16位R,(2)传送有效地址及数据段首址指令LDS(load pointer using DS),例:设 (12450H)=F346H (12452H)=0A90H DS=1200H 执行LDS SI , 450H; 后 SI F3 46 12450 46 12451 F3 DS 0A 90 12452

29、90 12453 0A,(3)传送有效地址及附加数据段指令LES(load pointer using ES),format:LES OPD,OPS function:将主存某字单元内容送指定寄存器。即(OPS)OPD,(OPS+2)ES。 DI commonly used in OPD,4 标志寄存器传送指令,(1)标志送AH指令LAHF (2)AH送标志指令SAHF (3)标志寄存器进栈指令PUSHF (4)标志寄存器出栈指令POPF,(1)标志送AH指令LAHF,语句格式:LAHF 功能:将标志寄存器的低8位送入AH寄存器。 即(FLAGS)7-0AH。该指令的执行对标志位无影响。 【例

30、4.11】标志寄存器传送。 执行前:(FLAGS)=0485H,(AX)=0FFFFH 执行指令:LAHF,(2)AH送标志指令SAHF,语句格式:SAHF 功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH) FLAGS7-0.。 从该指令功能可看出,SAHF为LAHF的逆过程。,(3)标志寄存器进栈指令PUSHF,语句格式:PUSHF 功能:将标志寄存器的内容压入堆栈。即(FLAGS)(SP)。,(4)标志寄存器出栈指令POPF,功能: 将栈顶内容弹出送入标志寄存器中。即(SP)FLAGS。 POPF指令与PUSHF指令互为逆过程。 【例4.12】将标志寄存器的单步标志TF置位

31、。 PUSHF;(FLSGS)(SP) POP AX;(SP)AX OR AX, 0100H;设置D8=TF=1 PUSH AX;(AX)(SP) POPF;(SP)FLAGS,即(AX)FLAGS,4.3.2 算术运算类指令 (Arithmetic calculation),1 加法类指令 2 减运算指令 3 乘运算指令 4 除运算指令 5 BCD码调整指令,算术运算指令可处理4种类型的数: 1、无符号二进制整数 2、带符号二进制整数 3、无符号压缩十进制整数(packed decimal) 4、无符号非压缩十进制整数(unpacked decimal) 若为带符号数:用补码(complem

32、ent)表示 压缩十进制数: BCD BCD 一字节中表示两个十进制数 非压缩十进制数: 0000 BCD 一字节中只表示一个十进制数,Example: BHD(无) D(有)UD PD 0000 0111 07 7 +7 7 07 1000 1001 89 137 -119 invalid 89 1100 0101 C5 197 -59 invalid invalid,1、加法指令(addition) 1)ADD 算术加法 (addition) 格式: ADD 目的 ,源 ; 功能:目的地目的操作数源操作数 2)ADC 带进位算术加法(addition with carry) 格式: ADC

33、 目的 ,源 ; 功能:目的地目的操作数源操作数CF 上述两指令: 源操作数:寄存器,存储器,立即数。 目的操作数:只能是寄存器和存储单元。,example:5EH+3CH=? Influence on flags? 编程如下: MOV AL , 5EH ; AL=5EH(94) MOV BL , 3CH ; BL=3CH(60) ADD AL , BL ; AL=9AH(154) 0101 1110 (5E) + 0011 1100 (3C) 1001 1010 (9A) 标志位:ZF=0 ,AF=1,CF=0,SF=1,PF=1,OF=1,a. 若5EH,3CH为无符号数:D7 data

34、0255(FFH) 9AHFFH 所以 OF=1 无意义。 b. 若5EH,3CH为带符号数:D7为符号位 -128127 结果154超出此范围 所以 OF=1 结果无效。 若未产生溢出(OF=0),SF=1时表示结果为负,3)INC 加1指令 (increment) 格式: INC 目的 ; 功能:目的目的操作数1 目的操作数:通用R或 M单元 主要用于循环计数,修改地址指针等 例: INC BL ; BLBL1 INC BYTE PTRBX ; 内存字节单元内容1 INC WORD PTRBX; 内存字单元内容1,4) AAA 加法的ASCII码调整指令 (ASCII Adjust for

35、 Addition ) 格式 : AAA ; 功能: 对AL寄存器的内容调整为一位 非压缩十进制数。 应用场合:在非压缩十进制数或ASCII码表 示的十进制数的加法运算中,将 结果调整为一位非压缩十进制数。,AAA指令调整过程: 若AL低四位9或标志位AF=1, 则: a. AL AL+6 b. 将AL高四位清0 c. AF是1,CF是1,AHAH+1 否则只将AL高四位清0。,例:设AL=9BCD BL=5BCD AH=0求和? ADD AL,BL; 0000 1001 9 + 0000 0101 5 0000 1110 低4位 9 AAA + 0000 0110 加6调整 0001 010

36、0 0000 1111 清高4位留低4位 0000 0100 AL中 CF=1 AF=1 AH=1,DAA 加法的十进制调整指令 (Decimal Adjust for Addition ) 格式:DAA ; 功能:将AL中内容调整为压缩BCD数 应用场合:用于将两压缩BCD数之和调整为 正确的BCD数。 调整过程: 若AL低四位9或标志位AF=1, 则: AL AL+6 对低半字节调整,调整过程: 若AL低四位9或标志位AF=1, 则: AL AL+6 对低半字节调整 若AL高四位9或标志位CF=1 则: AL AL+60H 对高半字节调整 并CF置1,否则CF是0。,例:设AL=88BCD

37、 BL=49BCD 求AL+BL=? ADD AL,BL; 1000 1000 88 + 0100 1001 49 1101 0001 AF=1 DAA + 0000 0110 加6调整 1101 0111 + 0110 0000 加60H调整 0011 0111 结果 AL=37BCD CF=1,2、减法指令(subtraction) 1)SUB 不带借位的减法指令 格式: SUB 目的 ,源 ; 功能:目的目的操作数源操作数 2)SBB 带进位算术减法(subtraction with borrow) 格式: SBB 目的 ,源 ; 功能:目的目的操作数源操作数CF 应用于多字节减法中。

38、3) DEC 减1指令 格式: DEC 目的 ; 功能:目的目的操作数1,4) NEG 取补指令 (negate) 格式: NEG 目的; 功能:目的0目的操作数 5) CMP 比较指令 (compare) 格式:CMP 目的 , 源 ; 功能:两个操作数相减,不产生运算结 果,仅影响标志,6) AAS 减法的ASCII调整指令 (ASCII Adjust for subtraction ) 格式: AAS ; 功能:对AL中的内容调整为非压缩十进制数 用在SUB和SBB指令之后,且操作数是 非压缩十进制数或ASCII码表示的十进制数。 调整过程: 若AL低四位9或标志位AF=1, 则: a.

39、 AL AL6 AF是1 b. 将AL高四位清0 c. AHAH1, CF是1 否则不调整。,例3-54 设AL=3BCD CL=8BCD 求AL-BL=? 指令控制过程如下: SUB AL , CL 0000 0011 BCD3 0000 1000 BCD8 AAS 1111 1011 低4位大于9 0000 0110 减6调整 1111 0101 0000 1111 0000 0101 高4位清0 结果AL5,CF1,7) DAS 减法的十进制调整指令 (Decimal Adjust for Subtraction ) 格式: DAS ; 功能:将AL中内容调整为正确的压缩十进制数 调整过

40、程: 若AL低四位9或标志位AF=1, 则: AL AL6 AF是1 若AL高四位9或标志位CF=1, 则: AL AL60H CF是1 否则不调整。,3、乘法指令(只有非压缩十进制数乘) 1)MUL 无符号数乘法 (multiply) 格式: MUL 源 ; 功能: (AL or AX) a. 源操作数为字节: 积高8位AH 积低8位AL b. 源操作数为字: 积高16位DX 积低16位AX,源操作数:可以是寄存器或存储单元,不能 是立即数,源操作数为存储单元 时,必须说明是字节(B)还是 字(W)。 如:MUL BSI ; AXAL*(内存中某字节) MUL WBX ; ( DX,AX)A

41、X*(内存中某字) MUL指令执行后影响CF和OF标志。 若积的高半部分(AH或DX)不为0,则CF是1,OF是1。 通常测CF和OF的状态,确定(AH或DX)是否为积的高半部分。 P85 例3-57 3-58,例: 设AL=55H BL=14H MUL BL ; AXAL*BL=06A4H AH AL AX 06 A4 因为AH=06H = 0,所以CF=1,OF=1. AH中是积的高半部分。 注意: 不能用MUL指令做带符号数的乘法!,例如:FFHFFH=? 二进制乘式: 1111 1111 1111 1111 1111 1110 0000 0001 1、当作无符号数 FFHFFH=255

42、25565025 正确 2、当作带符号数 FFHFFH=(1)(1) =( 1111 1110 0000 0001 )取补码 =1000 0001 1111 1111=(-511)D 错误 正确答案为: 0000 0000 0000 0001=(+1)D,2)IMUL 带符号数乘法 (Integer Multiply) 格式: IMUL 源 ; 功能: a. 源操作数为字节:AXAL源 b. 源操作数为字: AXAX源低字 DXAX源高字 若积的高半部分为非全0或非全1 为积的一部分,置CF=1,OF=1 若积的高半部分为全0或全1 仅为符号,置CF=0,OF=0,所以检测CF和OF的状态,确

43、定是否保存积的高半部分 (字节或字)。 AAM 乘法的ASCII调整指令 (ASCII Adjust for multiply ) 格式 AAM 功能:将AL中的BCD数调整为两个非压缩 十进制数。(低位AL,高位AH) 调整过程: AH AL/10的商(quotient) AL AL/10的余数(remainder) 执行指令后,影响ZF,SF,PF标志。,例3-60 求两个非压缩十进制数 09和06之乘积,可用如下指令实现: MOV AL , 09H ; AL 0000 1001 MOV BL , 06H ; BL 0000 0110 MUL BL 0011 0110 AAM (54B)

44、其中调整AL/10商为5 AH,AL/10余数为4 AL, 所以AH=05 , AL=04 。 即在AX中得到正确结果 AX0504H,即BCD数54。,4、除法指令(只有非压缩十进制数除) 1) DIV 无符号数除法 (division, unsigned) 格式: DIV 源 ; 功能:两个无符号二进制数除法操作 若a. 源为字节:ALAX/源(字节)的商 AH AX/源(字节)的余数 b. 源为字: 32位被除数在DX,AX中 AX(DX,AX)/源(字)的商 DX (DX,AX)/ 源(字)的余数 c.若为16位数除16位数,则DX清0,被除 数AX 。,2)IDIV 带符号数除法 格

45、式: IDIV 源 ; 功能:操作与DIV相同 关于除法运算产生溢出的问题: 字节操作时:被除数高8位 除数 产生溢出 字操作时:被除数高16位 除数 产生溢出 即商数超过了AL或AX所表示的范围,产生溢出时 CPU自动产生除法错中断,此时所得的商和余数 为不确定数。,3) CBW 字节转移为字指令(convert byte to word) 格式: CBW ; 功能: 将AL中符号位扩展到AH所有位。 4) CWD 字节转换为双字指令 (convert word to double word) 格式: CWD ; 功能: 将AX中符号位扩展到DX所有位。,例:求383的商和余数。 38的补码

46、1101 1010 B MOV AL , 1101 1010B ; -38AL MOV CH , 0000 0011B ; +3CH CBW ; AX=1111 1111 1101 1010B IDIV CH ; AX/CH AL=-12(商) AH=-2(余数) AAD 除法的ASCII调整指令 (ASCII Adjust for Division ) 格式: AAD ; 功能: 做除法时,把BCD码转为二进制数 ALAH10+AL AH00,例: 设AX0307H BL05H 求AXBL=? 编程如下: AAD ; 转换0310+07371025H =0010 0101BAL, AH=00

47、 DIV BL ; AX/BL的商AL=7 AX/BL的余数AH=2,例3-64 编写程序,计算75/6123 该除法运算过程表示如下: 第一个商为1 1 2 第二个商为2 6 7 5 6 第一个余 1 5 数为1 1 2 3 第二个余数为3,程序如下: FIRST DB 06H ;除数6 SECOND DB 75H ;被除数75 THIRD DB 2 DUP(0) ;存商 FOUR DB ? ;存余数 . MOV AH , 00H ;第一个被除数高位AH清零 MOV AL , SECOND ;AL 被除数75 AND AL , 0F0H ;截取高4位 MOV CL , 04H ROL AL

48、, CL ;移至低4位 DIV FIRST ;AX/06,即0007/06 得结果:AL 商为1,AH 余数1,MOV THIRD+1 , AL ;结果单元 第一个商1 MOV AL , SECOND ; AL 被除数75 AND AL , 0FH ;AL 截低四位,故AX 0105H AAD ;将AX中内容0105H调整为0FH DIV FIRST ;0FH/6,结果:AL 商为2 AH 余数为3 MOV THIRD , AL ;THIRD单元 第二个商2 MOV FOUR , AH ;FOUR单元 第二个余数2,图316 表示上述除法程序执行过程中,数据在内存中的存放格式。 FIRST 0

49、 6 除数 SECOND 7 5 被除数 THIRD 0 2 商 THIRD+1 0 1 FOUR 0 3 余数,4.3.3 逻辑运算与移位指令,1 逻辑运算指令 2 移位指令 3 循环移位指令,1 逻辑运算指令,(1)求反指令NOT (2)逻辑乘指令AND (3)测试指令TEST (4)逻辑加指令OR (5)按位加指令XOR,(1)求反指令NOT 语句格式:NOT OPD 功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)OPD 【例4.21】逻辑非运算。 MOVAX,878AH;(AX)=878AH NOTAX, ;(AX)=7875H,(2)逻辑乘指令AND 语句格式:AND

50、OPD, OPS 功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。 即(OPD)(OPS)OPD。 该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0 【例4.22】将AL中第3位和第7位清零。 MOVAL,0FFH ANDAL,77H,(3)测试指令TEST 语句格式:TEST OPD,OPS 功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。 即(OPD)(OPS)。 【例4.23】测试AX中的第12位是否为0,不为0则转L。 TESTAX,1000H JNEL,(4)逻辑加指令OR 语句格式:

51、OR OPD,OPS 功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。 即(OPD)(OPS)OPD。 说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。 【例4.24】将AL寄存器中第3位和第7位置1。 MOVAL,0 OR AL,88H,(5)按位加指令XOR 语句格式: XOR OPD,OPS 功能:目的操作数与源操作数做按位加运算,结果送入目的地址。 即(OPD)(OPS) OPD。 说明:按位加的运算法则为;11=0,10=1,01=1,00=0。 【例4.25】按位加运算。 MOVAL,45H;(AL)=45H XORAL,31H;(AL)=74H,2

52、移位指令,移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式: 标号:操作符OPD,1或 标号:操作符OPD,CL 其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。,(1)算术左移和逻辑左移指令SAL(SHL) 语句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL 功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。,(2)算术右移指令SAR 语句格

53、式:SAR OPD,1或SAR OPD,CL 功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。,【例4.26】算术右移运算。 MOVBH,0F4H;(BH)=0F4H MOVCL, 2;(CL)=2 SARBH, CL;(BH)=0FDH,(CF)=0 该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。,(3)逻辑右移指令SHR 语句格式:SHR OPD,1或SHR OPD,CL 功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。,3. 循

54、环移位指令 (1)循环左移指令ROL 语句格式:ROL OPD,1或ROL LPD,CL 功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。,(2)循环右移指令ROR 语句格式: ROR OPD,1或ROR OPD,CL 功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。,(3)带进位的循环左移指令RCL 语句格式: RCL OPD, 1或RCL OPD,CL 功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。,(4)带进位的循环右移指令RCR 语句格

55、式:RCR OPD,1或RCR OD,CL 功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。,4.3.4 串操作类指令(string),串操作指令 : 数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。 为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。,图4.3流程图总结了串操作的过程。,图2.3 串操作流程图,1传送指令MOVS; format:MOVS 目的串 , 源串 ;(judge MOV) MOVSB, MOVSW function:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。 即:(DS:SI)ES:DI。 DF=0,(SI)和(DI)+1 or 2。 DF=1,(SI)和(DI)-

温馨提示

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

评论

0/150

提交评论