版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 第第3b3b章章 8086/80888086/8088的寻址方式和的寻址方式和 指令系统指令系统 2 第三节第三节 8086/8088的指令系统的指令系统 第一部分第一部分指令系统概述指令系统概述 第二部分第二部分 8086/8088的指令系统的指令系统 3 第一部分第一部分 指令系统概述指令系统概述 8086/8088的指令系统中共有的指令系统中共有92种基本指令。种基本指令。 可以分成可以分成6个功能组个功能组: 1数据传送数据传送(Data transfer) 2算术运算(算术运算(Arithmetic) 3逻辑运算和移位指令逻辑运算和移位指令(Logic (dest) (src)
2、目的目的源源目的目的 源源 把一个字节把一个字节(B)或一个字(或一个字(W)操作数由源传送至目的。)操作数由源传送至目的。 实现实现:寄存器寄存器 寄存器寄存器/存储器之间;存储器之间; 立即数立即数寄存器寄存器/存储器存储器 寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。 12 具体说,通用数据传送指令能实现:具体说,通用数据传送指令能实现: CPU内部寄存器之间数据的任意传送内部寄存器之间数据的任意传送 (除了代码段寄存器(除了代码段寄存器CS和指令指针和指令指针IP以外)。以外)。 例:例: MOV DL,CH ; 8位寄存器位寄存器 8位寄存器位寄存器 M
3、OV AX,DX ; 16位寄存器位寄存器 16位寄存器位寄存器 MOV SI, BP MOV DS,BX ;通用寄存器;通用寄存器 段段寄存器寄存器 MOV AX, CS ;段段寄存器寄存器 通用寄存器通用寄存器 13 立即数传送至立即数传送至CPU内部通用寄存器组内部通用寄存器组 (AX、BX、CX、DX、BP、SP、SI、DI)。)。 用于给寄存器赋初值。用于给寄存器赋初值。 例:例: MOV CL,04H;立即数;立即数8位位寄存器寄存器 MOV AX,03FFH;立即数;立即数16位位寄存器寄存器 MOV WORD PTR SI ,057BH ;立即数;立即数存储器存储器 MOV B
4、YTE PTR MEM, 5 ;立即数;立即数存储器存储器 14 CPU内部寄存器(除内部寄存器(除CS和和IP外)与存储器(所有寻址方外)与存储器(所有寻址方 式)之间数据传送。式)之间数据传送。 可以实现一字节或一个字的传送。可以实现一字节或一个字的传送。 例:例: MOV MEM , AX; 累加器累加器存储器存储器, 直接寻址直接寻址 MOV MEM ,DS;段寄存器;段寄存器存储器,存储器,直接寻址直接寻址 MOV DISPBX ,CX;寄存器;寄存器存储器,存储器,变址寻址变址寻址 MOV AX , DISP SI;存储器;存储器累加器,累加器,变址寻址变址寻址 MOV DS ,
5、MEM;存储器;存储器段寄存器,段寄存器,直接寻址直接寻址 MOV AX , DISP BX SI ;存储器;存储器累加器,累加器,相对基址加变址相对基址加变址 15 j MOV MEM2 , MEM1 错。错。 MOV AX , MEM1 MOV MEM2 , AX 对。对。 例例 : MOV DS,2000H 错。错。 MOV AX, 2000H MOV DS , AX 对。对。 16 l MOV ES , DS ; 错错 MOV AX , DS MOV ES , AX ; 对对 。 例:例:MOV CS,AX ; 错错 MOV AX,CS ;对对 。 MOV IP, AX ;错错 MOV
6、 AX, IP ; 对。对。 17 BX、SI、DI间址间址默认段地址为默认段地址为DS, BP间址间址默认段地址默认段地址SS。 这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄寄 存器赋值,同时又防止堆栈空间变动过程出现中断。存器赋值,同时又防止堆栈空间变动过程出现中断。 (除(除SAHF、POPF以外)。以外)。 18 例:例: 实现将实现将AREA1开始的开始的100个数据传送到个数据传送到AREA2开始的单元。开始的单元。 AREA1: AREA2: 100个数据个数据 19 分析题意:分析题意: 可以用可以用200条条MOV指令来完成指
7、令来完成100个数据传送,个数据传送, 指令操作重复,每个数据传送后的地址是变化的。指令操作重复,每个数据传送后的地址是变化的。 可以利用循环,可以利用循环, 但每循环一次要修改地址(源地址和目的地址),但每循环一次要修改地址(源地址和目的地址), 必须把地址放在寄存器当中,用必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数寄存器间接寻址来寻找操作数. 20 得到如下程序:得到如下程序: MOV SI, AREA1 MOV DI, AREA2 MOV CX,100 AGAIN :MOV AL,SI MOV DI,AL JNZ AGAIN 21 2 PUSH (Push word onto
8、 stack) POP (Pop word off stack) 这是两条堆栈操作指令。这是两条堆栈操作指令。 堆栈堆栈按照按照先进后出先进后出原则组织的一段内存区域,原则组织的一段内存区域, 下推式的(规定堆栈设置在堆栈段内)改变下推式的(规定堆栈设置在堆栈段内)改变SP的内容,的内容, 随着随着推入堆栈内容增加,推入堆栈内容增加,SP的值减少。的值减少。 先进后出工作原则(先进后出工作原则( First In Last Out 简称简称FILO) 堆栈在内存中的情况:堆栈在内存中的情况: 22 可以可以用一条立即数传送指令给用一条立即数传送指令给SP赋值赋值,确定,确定SP在在SS段段 中
9、的初始位置。中的初始位置。 例:例: 设:设: (SS)=9000H , 堆栈段为堆栈段为64KB MOV SP,0E200H ;(SP)=0E200H 则:则: 整个堆栈段的物理地址范围为:整个堆栈段的物理地址范围为: 堆栈在内存中的情况如右图所示:堆栈在内存中的情况如右图所示: . . 偏移地址偏移地址物理地址物理地址 00000H(低地址)00000H(低地址) 90000H90000H 9E200H9E200H 9FFFFH9FFFFHFFFFHFFFFH (SP)=E200H(SP)=E200H 0000H0000H 堆堆 栈栈 段段 堆栈在内存中的情况堆栈在内存中的情况 23 q
10、调用子程序(或过程)或发生中断时要调用子程序(或过程)或发生中断时要保护断点保护断点 的地址的地址,子程序或中断返回时恢复断点。,子程序或中断返回时恢复断点。 24 主程序主程序 子程序子程序: 子程序:在一个实际程序中,有些操作要执行多子程序:在一个实际程序中,有些操作要执行多 次,把要次,把要重复执行重复执行(subroutine)操作编为子程序。操作编为子程序。 也常把一些常用的操作标准化、通用化的子程序。也常把一些常用的操作标准化、通用化的子程序。 主程序(主程序(Main program)往往要调用子程序往往要调用子程序 或处理中断或处理中断, 暂停主程序,执行子程序或中断服务暂停主
11、程序,执行子程序或中断服务 程序。程序。 25 (8088中码段寄存器中码段寄存器CS和指令指针和指令指针IP),), 才能才能 ,通常用到,通常用到内部寄存器内部寄存器,执行结果会影响,执行结果会影响 标志位,必须在调用子程序之前将标志位,必须在调用子程序之前将。 子程序嵌套或子程序递归(自调自)子程序嵌套或子程序递归(自调自) 保留许多信息,而且保证正确返回(且后进先出)。保留许多信息,而且保证正确返回(且后进先出)。 后保留先取出原则后保留先取出原则(即(即LIFO-LAST In First out)。)。 26 注意:注意:SP堆栈指针堆栈指针, 始终指向栈顶。始终指向栈顶。 SP初
12、值用初值用MOV SP,i m来设定。来设定。 27 q 存放存放CPU寄存器或存储器中暂时不使用的数据寄存器或存储器中暂时不使用的数据, 使用数据时将其弹出:使用数据时将其弹出: PUSH AX; 将将(AX)入栈入栈 . . 11112222 (SP)-2(SP)-2 (SP)-1(SP)-1 (SP)(SP) 堆堆 栈栈 段段 PUSH AX前PUSH AX前 (AX) . 22H22H 11H11H . 11H11H22H22H (SP)(SP) (SP)+1(SP)+1 (SP)+2(SP)+2 堆堆 栈栈 段段 PUSH AX后PUSH AX后 (AX) 28 使用数据时将其弹出:
13、使用数据时将其弹出: POP BX . 22H22H 11H11H . 33H33H44H44H BXBX (SP)(SP) (SP)+1(SP)+1 (SP)+2(SP)+2 堆堆 栈栈 段段 POP BX前POP BX前 . 22H22H 11H11H . 11H11H22H22H BXBX (SP)-2(SP)-2 (SP)-1(SP)-1 (SP)(SP) 堆堆 栈栈 段段 POP BX后POP BX后 29 q 调用子程序(或过程)或发生中断时要保护断点的地址,调用子程序(或过程)或发生中断时要保护断点的地址, 子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。 子程序嵌套子程
14、序嵌套 . 断点2(L)断点2(L) 断点2(H)断点2(H) 断点1(L)断点1(L) 断点1(H)断点1(H) . (SP)(SP) 先先 压压 入入 后后 压压 入入 先先 弹弹 出出 后后 弹弹 出出 堆堆 栈栈 段段 断点地址压入和弹出情况断点地址压入和弹出情况 主主 程程 序序 子子 程程 序序 1 1 子子 程程 序序 2 2断点1断点1断点2断点2 弹出弹出 断点2断点2弹出弹出 断点1断点1 30 (堆栈操作指令有两条堆栈操作指令有两条): 格式:格式:PUSH src ; (SP) (SP)-2 (SP)+1,(SP) (src) 操作如:操作如:PUSH AX 格式:格式
15、:POP dest ;(dest) (SP)+1,(SP) (SP) (SP)+2 操作如:操作如: POP BX 31 堆栈操作都堆栈操作都按字按字操作。操作。 PUSH , POP 指令的操作数可能有三种:指令的操作数可能有三种: 寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器), 段寄存器段寄存器(CS除外,除外,PUSH CS 合法,合法,POP CS 非法)非法), 存储器。存储器。 执行执行PUSH 指令指令, (SP)-2 (SP), 低字节放在低地址,高字节放在高地址。低字节放在低地址,高字节放在高地址。 随着推入堆栈内容增加,堆栈就扩展,随
16、着推入堆栈内容增加,堆栈就扩展,SP的值减少,的值减少, 但但SP总是指向栈顶,总是指向栈顶, 堆栈工作原则堆栈工作原则后进先出。后进先出。 32 堆栈应用举例:堆栈应用举例: 例:例: MOV BP,SP PUSH AX PUSH BX PUSH CX MOV CX,BP-6 MOV BX,BP-4 MOV AX,BP-2 ADD SP, 6 例例 : PUSH AX PUSH BX PUSH CX POP CX POP BX POP AX 33 (Exchange) 格式:格式:XCHG dest , src;(dest) (src) 执行操作:执行操作: 可以实现:可以实现: 注意:注意
17、: 存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在寄存器中;两个操作数中必须有一个在寄存器中; 段寄存器不能作为一个操作数;段寄存器不能作为一个操作数; 允许字或字节操作,不影响标志位。允许字或字节操作,不影响标志位。 34 应用举例:应用举例: XCHG BL,DL XCHG AX,SI XCHG COUNTDI, AX XCHG BX,DI(错)错) XCHG DS, AX (错)错) 35 可以使累加器中的可以使累加器中的 一个值变换为内存表格中的某一个值,一般用来一个值变换为内存表格中的某一个值,一般用来 实现码制的转换,该指令不影响标志位。实现码制的转换,该指令不影
18、响标志位。 格式:格式: XLAT str_table;(;(AL)(BX )+(AL) 或或 XLAT str_table表格符号地址(首地址),表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。 36 XLAT指令使用方法指令使用方法: 先建立一个字节表格;先建立一个字节表格; (相对于表格首地址位移量)(相对于表格首地址位移量) ; (表中第一个元素的序号为(表中第一个元素的序号为0) 。 (AL)为转换的代码。为转换的代码。 37 若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码; 或或数字数字09转换成转换成7段数码所需
19、要的相应代码(段数码所需要的相应代码(字字 形码形码)等就要用)等就要用XLAT指令。指令。 例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码码 表。首地址为:表。首地址为:Hex_table , 欲查出表中第欲查出表中第11个元素个元素 (A) 38 执行指令序列执行指令序列: MOV BX,OFFSET Hex_table MOV AL,0AH XLAT Hex_table 假设:假设: (DS)=F000H, Hex_table=0040H (AL)=0AH 执行执行XLAT以后:以后: (AL)=41H=(F004AH),), 即即“A”的的AS
20、CII码。码。 30H30H 31H31H 32H32H . 39H39H 41H41H 42H42H . 46H46H . Hex_tableHex_table Hex_table+1Hex_table+1 Hex_table+2Hex_table+2 Hex_table+0AHHex_table+0AH Hex_table+0BHHex_table+0BH Hex_table+0FHHex_table+0FHFF BB AA 99 11 22 00 16进制数的进制数的ASCII码表码表 39 (Input and Output) 输入输出指令共两条:输入输出指令共两条: (Input b
21、yte or word) (Output byte or word) 输入指令输入指令用于用于CPU从外设端口接受数据从外设端口接受数据, 输出指令输出指令用于用于CPU向外设端口发送数据。向外设端口发送数据。 无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(字)或字)或AL(字节),字节), 又称又称累加器专用传送指令累加器专用传送指令 。 40 每个外设要占几个端口:数据口,状态口和控制口。每个外设要占几个端口:数据口,状态口和控制口。 CPUCPU I/OI/O 设备设备 译译 码码 数据端口数据端口 DBDB ABAB CBCB I/O接口I/O接口 状态
22、端口状态端口 控制端口控制端口 41 在在IBMPC机里,可以配接许多外部设备,机里,可以配接许多外部设备, 每个外设与每个外设与CPU之间交换数据,状态信息和控制命令,之间交换数据,状态信息和控制命令, 每一种信息交换都要通过一个端口来进行。每一种信息交换都要通过一个端口来进行。 端口数:外部设备最多有端口数:外部设备最多有65536个个I/O端口。端口。 A0A15译码形成。译码形成。 端口号:端口号(即外设端口地址)为端口号:端口号(即外设端口地址)为0000HFFFFH。 PC机仅使用机仅使用A0A9译码形成译码形成I/O口地址,即口地址,即1024个口地址个口地址 端口号:端口号:0
23、000H03FFH 其中:其中: A9=1,表示扩充槽上的,表示扩充槽上的口地址。口地址。 42 ,可以直接写在指令中,可以直接写在指令中, 这就是长格式。这就是长格式。 端口号代替指令中的端口号代替指令中的PORT, 机器指令用二字节表示,第二字节就是端口号。机器指令用二字节表示,第二字节就是端口号。 , 必须先把端口号放到必须先把端口号放到DX寄存器中。寄存器中。 43 格式:格式:IN acc, port ;(acc) (port) 具体形式有四种:具体形式有四种: IN AL, data8 ; 端口地址端口地址8位,输入一个字节位,输入一个字节 IN AX, data8 ;端口地址;端
24、口地址8位,输入一个字位,输入一个字 IN AL, DX ;端口地址;端口地址16位,输入一个字节位,输入一个字节 IN AX, DX ;端口地址;端口地址16位,输入一个字位,输入一个字 必须通过累加器必须通过累加器AX(字字)或或AL(字节字节)输入输入数据。数据。 44 (Output byte or word) 格式:格式: OUT port, acc ;(port) (acc) 具体形式有四种:具体形式有四种: OUT data8 , AL ; 端口地址端口地址8位,输出一个字节位,输出一个字节 OUT data8, AX ;端口地址;端口地址8位,输出一个字位,输出一个字 OUT
25、DX , AL ;端口地址;端口地址16位,输出一个字节位,输出一个字节 OUT DX , AX ;端口地址;端口地址16位,输出一个字位,输出一个字 必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输出输出数据。数据。 45 例例1:实现:实现(29H)(28H)(DATA_WORD) IN AX,28H MOV DATA_WORD,AX 例例2:从端口:从端口3FCH 送一个字到送一个字到AX寄存器寄存器 MOV DX,3FCH IN AX,DX ; (AL)(3FCH),), (AH)(3FDH) 例例3:实现将(:实现将(AL) (05H) OUT 5,AL;(;(05H)
26、(AL) 46 (Address-object transfer) 8086 /8088 提供三条提供三条: 地址指针写入指定寄存器或寄存器对指令。地址指针写入指定寄存器或寄存器对指令。 1、LEA(Load Effective Address) 2、LDS (Load pointer using DS) 3、LES (Load pointer using ES) 47 (Load Effective Address) 格式:格式: LEA reg16 , mem16 ;EA(reg16) 功能:加载有效地址,用于写近地址指针。功能:加载有效地址,用于写近地址指针。 。 例:设(例:设(BX)
27、=0400H,(,(SI)=003CH LEA BX,BX+SI+0F62H 执行指令后:执行指令后: EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH (BX)=139EH 48 注意:设注意:设 (DS)=3000H BUFFER=1000H (31000H)=0040H (1) LEA 指令与指令与MOV 的区别的区别 LEA BX , BUFFER ;(;(BX)=1000H MOV BX , BUFFER ; (BX)=0040H LEA 指令与指令与MOV等价等价 LEA BX , BUFFER ; (BX)=1000H MOV BX , OFF
28、SET BUFFER ; (BX)=1000H 40H40H 00H00H . 3000H:1000H3000H:1000H (DS)(DS) BUFFERBUFFER 31001H31001H . 存储器存储器 49 (2), 。 (3)请思考下列指令的正、误)请思考下列指令的正、误 LEA DX ,BETABXSI LEA DX , AX 50 (Load pointer using DS) 格式:格式:LDS reg16, mem32 ;(;(reg16)(EA) (DS)(EA+2) 功能:功能:。 将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位
29、偏移量)装入指装入指 定通用寄存器,把后两个单元内容定通用寄存器,把后两个单元内容(段地址段地址) 装入到装入到DS段寄存段寄存 器。器。 用于写远地址指针。用于写远地址指针。 51 例例: 假设:假设: (DS)=C 000H 指令指令: LDS SI, 0010H 执行指令后执行指令后: (SI)=0180H (DS)=2000H 80H80H 01H01H 00H00H 20H20H C000H:0010HC000H:0010H (DS)(DS) C0011HC0011H C0012HC0012H C0013HC0013H . . 存储器存储器 52 格式:格式:LES reg16, m
30、em32 ;(;(reg16)(EA) (ES)(EA+2 ) 功能:功能: 此指令常常指定此指令常常指定DI寄存器寄存器。 将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装入装入 指定通用寄存器,把后两个单元内容指定通用寄存器,把后两个单元内容(段地址段地址) 装入到装入到ES段段 寄存器。寄存器。 用于写远地址指针。用于写远地址指针。 53 例例: 假设:假设: (DS)=B000H (BX)=080AH 指令指令: LES DI, BX 执行指令后执行指令后: (DI)=05A2H (ES)=4000H A2HA2H 05H05H 00H0
31、0H 40H40H B000H:080AHB000H:080AH (DS)(DS) B080BHB080BH B080CHB080CH B080DHB080DH . . 存储器存储器 (BX)(BX) 54 综合举例:综合举例: 设:设: (DS)=5000H TABLE=1000H 分析下列指令执行结果:分析下列指令执行结果: MOV BX,TABLE ;(;(BX)=0040H MOV BX,OFFSET TABLE ;(;(BX)=1000H LEA BX,TABLE ;(;(BX)=1000H LES BX,TABLE ;(;(BX)=0040H,(,(ES)=3000H LDS BX
32、,TABLE ;(;(BX)=0040H,(,(DS)=3000H 40H40H 00H00H 00H00H 5000H:1000H5000H:1000H (DS)(DS) TABLETABLE 51001H51001H . 存储器存储器 30H30H . 51002H51002H 51003H51003H 55 (Flag register transfer) 采用了隐含寄存器(采用了隐含寄存器(AH、Flags)操作数方式。操作数方式。 8088有四条标志传送操作指令:有四条标志传送操作指令: 1LAHF(Load AH from flags) 2SAHF(Store AH into fl
33、ags) 3PUSHF(Push flags onto stack) 4POPF(Pop flags off stack) 56 (Load AH from flags) 格式:格式:LAHF ;(;(AH)(PSW的低字节)的低字节) 功能:功能:。 SFSFZFZFAFAFPFPFCFCF 0 01 12 23 34 45 56 67 7 TFTFIFIFDFDFOFOF 8 89 9101011111212131314141515 0 01 12 23 34 45 56 67 7 FLAGSFLAGS AHAH LAHF指令操作图示意指令操作图示意 57 2SAHF(Store AH i
34、nto flags) 格式:格式:SAHF ;(;(PSW的低字节)的低字节)(AH) 功能:(功能:(AH)送标志寄存器低八位。)送标志寄存器低八位。 3PUSHF(Push flags onto stack) 格式:格式:PUSHF;(;(SP)(SP)-2 (SP+1 ) ,(,(SP)(PSW) 功能功能 : 标志进栈。标志进栈。 4POPF(Pop flags off stack) 格式:格式:POPF;(;(PSW)(SP+1 ) ,(,(SP) (SP)(SP)+2 功能功能 :标志出栈。:标志出栈。 58 注意:注意: (1) 标志位的影响标志位的影响 LAHF、PUSHF不影
35、响标志位不影响标志位, SAHF、POPF由装入的值确定标志位的值,由装入的值确定标志位的值, 即影响标志位。即影响标志位。 (2)PUSHF用于保护调用过程前(用于保护调用过程前(PSW), POPF用于过程返用于过程返 回后恢复。回后恢复。 例:例: PUSHAX PUSH CX PUSHF CALL TRANS POPF POP CX POP AX 59 (Arithmetic) 内容:内容: 利用十进制调整指令和利用十进制调整指令和ASCII调整指令对调整指令对BCD码表示的码表示的 十进制数进行算术运算十进制数进行算术运算; (一)加法指令(一)加法指令(Addition) (二)减
36、法指令(二)减法指令(Subtraction) (三)乘法指令(三)乘法指令(Multiplication) (四)除法指令(四)除法指令(Division) (五)转换指令(五)转换指令 60 ,不同指令影响不同不同指令影响不同: (1) 61 (一)加法指令(一)加法指令(Addition) 1、 ADD(Addition)加法指令加法指令 2、 ADC(Add with carry)带进位加法指令带进位加法指令 3、 INC(Increment by 1)加加 1指令指令 62 1、 ADD(Addition)加法指令加法指令 指令格式:指令格式:ADD dest , src ;(des
37、t) (dest)+(src) 例:例: ADD CL,10;寄存器寄存器+立即数立即数 ADD DX,SI;寄存器寄存器+寄存器寄存器 ADD AX, MEM;寄存器寄存器+存储器存储器 ADD DATABX, AL;存储器存储器+寄存器寄存器 ADD BYTE PTR ALPHADI,30H;存储器存储器+立即数立即数 63 : ; : , 8位带符号数相加,和超出范围(位带符号数相加,和超出范围(128127), 16位带符号数相加,和超出范围位带符号数相加,和超出范围(-32768+32767); , 8位无符号数相加,和超过位无符号数相加,和超过255, 16位无符号数相加,和超过位
38、无符号数相加,和超过65535。 其他条件标志(其他条件标志(SF,AF,PF,ZF)根据定义设定。根据定义设定。 64 例例MOV AL,7EH;(AL)=7EH MOV BL, 5BH;(BL)=5BH ADD AL,BL;(AL)=7EH+5BH=D9H 影响标志位的情况影响标志位的情况: SF=1 , 结果最高位结果最高位1 ZF=0 ,结果不等于,结果不等于0 AF=1 ,D3 位向位向D4 有进位有进位 PF=0 ,”1”的个数为奇数的个数为奇数 CF=0 ,无进位,无进位 OF=1 ,和超过,和超过127 1 11 11 11 11 11 10 00 0 0 01 10 01 1
39、1 10 01 11 1 + + 1 11 10 01 11 10 00 01 1 AF=1AF=1 65 2、 ADC(Add with carry)带进位加法指令带进位加法指令 格式:格式:ADC dest,src ;(;(dest)(dest)+(src)+ 进位标志进位标志CF的现行值的现行值() 特点特点: 与与ADD同。同。 用途:主要用于多字节运算中。用途:主要用于多字节运算中。 类型举例:类型举例: ADC CX, 300 ;寄存器寄存器+立即数立即数+CF ADC AL, BL;寄存器寄存器+寄存器寄存器+CF ADC DX, COUNTSI;寄存器寄存器+存储器存储器CF
40、ADC BLOCKDI, BX;存储器存储器+寄存器寄存器+CF ADC BYTE PTR MEM, 6;存储器存储器+立即数立即数+CF 66 用途举例:用途举例: 计算两个多字节数相加计算两个多字节数相加 3B74AC60F8H+20D59E36C1H=? 两个多字节数存放在:两个多字节数存放在: DATA1,DATA2的开始单元。的开始单元。 F8HF8H 60H60H ACHACH 74H74H 3BH3BH . C1HC1H 36H36H 9EH9EH D5HD5H 20H20H . DATA1DATA1 DATA2DATA2 流程图流程图 多字节数内存存放多字节数内存存放 开始开始
41、 初始化,置循环次数CX初始化,置循环次数CX 清SI、CF清SI、CF 取一个字节加数取一个字节加数 取一个被加数字节取一个被加数字节 相加送内存相加送内存 (SI)+1送(SI)(SI)+1送(SI) (CX)-1送(CX)(CX)-1送(CX) (CX)=?0(CX)=?0 结束结束 N N Y Y 67 程序:程序: MOV CX, 5 MOV SI, 0; 清清SI CLC;清;清CF LOOPER:MOV AL, DATA2SI ADC DATA1SI,AL INC SI;(SI)+1 (SI) DEC CX;(CX)-1 (CX) JNZ LOOPER;(CX) 0转转 HLT;
42、停机;停机 68 : (1) 什么叫什么叫叫叫 (2) (1) 带符号数的补码带符号数的补码 带符号数,补码运算能表示范围为带符号数,补码运算能表示范围为:-2 n-1 +2 n-1 1 如果运算结果超出该范围,叫补码如果运算结果超出该范围,叫补码 运算错误。运算错误。有溢出,有溢出,OF=1;无溢出,;无溢出, OF=0 运算结果的最高位向更高位的运算结果的最高位向更高位的 69 有进位不一定有溢出有进位不一定有溢出, 没有进位不一定没有溢出。没有进位不一定没有溢出。 数的表示范围:数的表示范围: 8位二进制数可以表示十进制数的范围:位二进制数可以表示十进制数的范围: 8位带符号十进制数的范
43、围:位带符号十进制数的范围:128127 8位无符号十进制数的范围:位无符号十进制数的范围:0255 16位二进制数可以表示十进制数的范围位二进制数可以表示十进制数的范围: 16位带符号十进制数的范围:位带符号十进制数的范围:3276832767 16位无符号十进制数的范围:位无符号十进制数的范围:065535 70 以以8位二进制数为例位二进制数为例分析一下数的溢出与进位情况分析一下数的溢出与进位情况: 下面分下面分4种情况加以讨论:种情况加以讨论: (1) 带符号数不溢出带符号数不溢出, 无符号数不进位无符号数不进位 (2) 无符号数有进位无符号数有进位 (3) 带符号数有溢出带符号数有溢
44、出 (4) 带符号数有溢出和无符号数有进位带符号数有溢出和无符号数有进位 71 。 二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1+ + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 4 4 1111+ + 1515 + 4+ 4 +1 1+1 1+ + +1 5+1 5 相相 加加 标志标志CF=0,OF=0CF=0,OF=0CF=0CF=0OF=0OF=0 溢出溢出不溢出不溢出不溢出不溢出 不溢出不溢出 同符号数相加,同符号数相
45、加, 结果符号与其相同结果符号与其相同 72 二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1+ + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 7 7 251251+ + 258258 + 7+ 7 - 5- 5+ + + 2+ 2 相相 加加 标志标志CF=1,OF=0CF=1,OF=0CF=1CF=1OF=0OF=0 有进位有进位 结果为258-256 不溢出不溢出 异号数相加异号数相加 不可能有溢出不可能有溢出 CF=1CF
46、=1 73 二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0+ + 1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 1 9 9 124124+ + 133133 + 9+ 9 +1 2 4+1 2 4+ + +1 3 3+1 3 3 相相 加加 标志标志CF=0,OF=1CF=0,OF=1CF=0CF=0O OF=F=1 1 溢出溢出带符号数溢出带符号数溢出不溢出不溢出 溢出溢出 结果为123 结果为123 结果错结果错 74 二进制数
47、二进制数看作无符号数看作无符号数看作带符号数看作带符号数 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1+ + 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 135135 245245+ + 380380 121121 - 11- 11+ + 132132 相相 加加 标志标志CF=1,OF=1CF=1,OF=1CF=1CF=1OF=1OF=1 溢出溢出无符号数溢出无符号数溢出 溢出溢出 现结果为现结果为 124,结果错124,结果错 溢出溢出 现结果为124,现结果为124, 结果错结果错 CF
48、=1CF=1 75 (1)带符号数)带符号数相加时的相加时的溢出问题溢出问题 根据根据OF= 1 与否与否, 判断带符号数是否产生溢出。判断带符号数是否产生溢出。 (2)无符号数)无符号数相加时的进位问题相加时的进位问题 根据根据CF= 1与否与否, 判断无符号数是否产生进位。判断无符号数是否产生进位。 76 3、INC (Increment by 1 )加加 1 指令指令 格式:格式: INC dest ;(;(B/W), (dest)(dest)+1 dest : 功能:对指定的目标操作数功能:对指定的目标操作数+1 操作数单元。操作数单元。 用途:用于在循环程序中修改地址指针和循环次数。
49、用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 77 例:例: INC DL; 8位寄存器位寄存器1 INC SI;16位寄存器位寄存器1 INC BYTE PTR BXSI ;存储器;存储器1(字节操作)(字节操作) INC WORD PTR DI;存储器;存储器1(字操作)(字操作) INC DS; 错错 78 十进制调整指令十进制调整指令 计算机不但能进行二进制运算,还能进行十进制运算。进计算机不但能进行二进制运算,还能进行十进制运算。进 行十进制运算时,首先将十进制数据编码为行十进制运算时,首先将十进制数据编码为B
50、CD码,然后用二码,然后用二 进制算术运算指令进行运算,之后再进行十进制调整,即可得进制算术运算指令进行运算,之后再进行十进制调整,即可得 正确的十进制结果。正确的十进制结果。 BCD码有两种存储格式:压缩和非压缩。压缩码有两种存储格式:压缩和非压缩。压缩BCD码指每码指每 个字节存储两个个字节存储两个BCD码;非压缩码;非压缩BCD码指每个字节存储一个码指每个字节存储一个 BCD码,其中低码,其中低4位存储数字的位存储数字的BCD码,高码,高4位为位为0。数字。数字09 的的ASCII码是一种准非压缩码是一种准非压缩BCD码码,即低四位为,即低四位为BCD值,高四值,高四 位有数值,处理掉高
51、四位的数值即为非压缩位有数值,处理掉高四位的数值即为非压缩BCD码。码。 79 4、 DAA: 压缩的压缩的BCD码加法调整指令码加法调整指令 格式:格式: DAA 执行的操作:调整执行的操作:调整(AL)中的二进制中的二进制BCD码的和。调整方法码的和。调整方法 如下:如下: 若若AF=1或者或者(AL)的低的低4位是在位是在AHFH之间,则之间,则(AL)加加 06H,且自动置,且自动置AF=1; 若若CF=1或者或者(AL)的高的高4位是在位是在AHFH之间,则之间,则(AL)加加 60H,且自动置,且自动置CF=1。 80 说明:说明: 本条指令对本条指令对PSW中的中的OF标志无定义
52、,会影响所有其他标志无定义,会影响所有其他 标志位。标志位。 使用本条指令之前,需将十进制数先用使用本条指令之前,需将十进制数先用ADD或或ADC指指 令相加,和存入令相加,和存入AL中。中。 81 例:例:34+56=? MOV AL, 34 MOV BL, 56 ADD AL, BL DAA 00110100 10001010 + 01010110 调整调整 + 00000110 10001010 10010000 A 十进制的十进制的90 分析:分析: 82 5、 AAA:非压缩的:非压缩的BCD码加法调整指令码加法调整指令 格式:格式:AAA 执行的操作:调整执行的操作:调整(AL)中
53、的和,其中和是非压缩中的和,其中和是非压缩BCD码或码或 准非压缩准非压缩BCD格式。格式。 调整步骤:调整步骤: (1) 若若AF=1或者或者(AL)的低的低4位在位在AHFH之间,则之间,则 (AL)+06H,(AH)(AH)+1,置,置AF=1。 (2) 清除清除(AL)的高的高4位,位,AX中即为非压缩的中即为非压缩的BCD码。码。 (3) CFAF。 83 说明:说明: 本条指令除影响本条指令除影响AF和和CF标志位外,对其余标志位均无定义。标志位外,对其余标志位均无定义。 使用本条指令前,先将非压缩使用本条指令前,先将非压缩BCD码的和存入码的和存入AL中。中。 84 例:例: 9
54、的的ASCII 与与 9的的ASCII相加相加,求出求出ASCII码的和。码的和。 MOV AL , 39H ADD AL, 39H AAA ADD AX, 3030H 00111001 01110010 AH AH+1 + 00111001 调整调整 + 00000110 AH=1 01110010 01111000 AL=8 AF=1 00001000 AX=十进制的十进制的18 分析:分析: AL的调整:的调整:AH的调整:的调整: 85 (二)减法指令(二)减法指令(Subtraction) 8088有有7条减法指令条减法指令 : 1、SUB(Subtraction)减法指令减法指令
55、2、SBB(Subtraction with borrow)带进位减法指令带进位减法指令 3、DEC(Decrement by 1 ) 减减 1 指令指令 4、NEG(Negate) 求补指令求补指令 5、CMP(Compare) 比较指令比较指令 6、AAS(ASCII adjust for subtraction)减法减法ASCII调整指令调整指令 7、DAS(Decimal adjust for subtraction)减法十进制调整指令减法十进制调整指令 86 1、SUB(Subtraction)减法指令减法指令 格式:格式:SUB dest,src;(;(dest)(dest)-(s
56、rc) 例:例:SUB AL,37H;寄存器寄存器-立即数立即数 SUB BX,DX;寄存器寄存器-寄存器寄存器 SUB CX, VAR1;寄存器寄存器-存储器存储器 SUB ARRAYSI, AX;存储器存储器-寄存器寄存器 SUB WORD PTR ALPHABXDI,512H;存储器减立即数存储器减立即数 这种指令影响标志位这种指令影响标志位: A、C、O、P、S、Z标志。标志。 CF=1,无符号数小减大;无符号数小减大;SF=1,带符号数小减大,带符号数小减大, OF=1溢出溢出. 87 2、SBB(Subtraction with borrow)带进位减法指令带进位减法指令 格式:格
57、式:SBB dest,src;(;(dest)(dest)-(src)-CF CF: 进位标志进位标志CF的现行值的现行值(上条指令上条指令CF值值) 指令影响标志位、指令影响标志位、B/W数运算情况同数运算情况同SBB 用途:用于多字节数相减用途:用于多字节数相减 例:例:SBB BX,100H;寄存器寄存器-立即数立即数 -CF SBB CX,DX;寄存器寄存器-寄存器寄存器-CF SBB AL, DATA1SI;寄存器寄存器-存储器存储器-CF SBB DISPBP, BL;存储器存储器-寄存器寄存器-CF SBB BYTE PTR ALPHASI+6,96H;存储器存储器-立即数立即数
58、-CF 88 减法有借位就有溢出,没有借位就没有溢出?减法有借位就有溢出,没有借位就没有溢出? CF=1 表示不带符号数有借位。表示不带符号数有借位。 OF=1 表示带符号数有溢出。表示带符号数有溢出。 CF值反映无符号数运算中的借位情况:值反映无符号数运算中的借位情况: 无符号数相减:无符号数相减: CF=1 ,减数,减数被减数,有借位被减数,有借位 CF=0 ,被减数,被减数减数,无借位减数,无借位 带符带符号数相减号数相减OF位设置:位设置: OF=1, 两个数符号相反,两个数符号相反,结果符号与减数相同结果符号与减数相同; 否则,否则,OF=0。 89 3、DEC (Decrement
59、 by 1 ) 减减 1 指令指令 格式:格式: DEC dest ;(B/W) (dest)(dest)-1 功能:对指定的目标操作数功能:对指定的目标操作数-1 操作数单元。操作数单元。 用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响不影响CF。 90 DEC 用途举例:用途举例: MOV AX , 0FFFFH CYC: DEC AX JNZ CYC HLT 用于延时时间。用于延时时间。 91 4、NEG (Negate) 求补指令求补指令 格式:格式: NEG
60、dest ;B/W, (dest) 0 - (dest) dest : 寄存器寄存器 、存储器。、存储器。 操作操作: 把操作数按位求反后末位把操作数按位求反后末位+1。 (dest) 0FFFFH -(dest)+1 影响标志:影响标志:A、C、O、P、S、Z。 CF:操作数为操作数为0时求补时求补,CF=0 ; 一般使一般使CF=1. OF: 对对128 或或32768求补,求补,OF=1; 否则否则OF=0. 92 应用举例:求绝对值应用举例:求绝对值 在内存中,在内存中, 从从AREA1开始存放开始存放 100个带符号数。个带符号数。 求各数的绝对值存于求各数的绝对值存于 AREA2的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 场地租赁及餐饮合作合同
- 食品销售合同模板范文
- 洗车店合作合同
- 简单机械设备租赁合同范本
- 体育赛事运营合作合同
- 可再生能源项目开发合同2024
- 智慧医院综合智能化系统设计汇报方案
- 船用铜-钢梯度材料双丝等离子增材制造工艺及组织性能调控研究
- 铅铋共晶合金中Po-210的测定及蒸发行为研究
- 考虑需求响应的无人车队轨迹优化研究
- 校园保洁培训课件
- 渠道管理就这样做
- 大客户销售这样说这样做
- 精装修样板房房屋使用说明
- 乔迁新居结婚典礼主持词
- 小学四年级数学竞赛试题(附答案)
- 鲁科版高中化学必修2全册教案
- 《病理学基础》知识考核试题题库与答案
- 人口分布 高一地理下学期人教版 必修第二册
- 四年级上册英语试题-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 子宫内膜异位症诊疗指南
评论
0/150
提交评论