第三章 80x86指令系统和寻址方式_第1页
第三章 80x86指令系统和寻址方式_第2页
第三章 80x86指令系统和寻址方式_第3页
第三章 80x86指令系统和寻址方式_第4页
第三章 80x86指令系统和寻址方式_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

1、1第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式23第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式4操作码操作码操作数操作数1 操作数操作数2 操作数操作数3第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式5第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式6与数据有关的寻址方式与数据有关的寻址方式与转移地址有关的寻址方式与转移地址有关的寻址方式第三章第三章 80 x8680 x86的指令系统和寻

2、址方式的指令系统和寻址方式7第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式8立即寻址方式立即寻址方式* 操作数在指令中给出操作数在指令中给出 MOV AL, 5 MOV AX, 3064H只能用于只能用于SRC字段字段操作数可以是操作数可以是8位或位或16位的常数位的常数SRC 和和 DST的字长一致的字长一致 MOV AH, 3064H经常用于给寄存器赋初值经常用于给寄存器赋初值第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式9第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式10初始:CS=1000H

3、,IP=100H第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式11寄存器寻址方式寄存器寻址方式* 操作数在指定的寄存器中操作数在指定的寄存器中 MOV AX, BX MOV AL, BH* 可用的可用的字节寄存器有字节寄存器有 AH AL BH BL CH CL DH DL* 可用的可用的字寄存器有字寄存器有 AX BX CX DX SI DI SP BP* SRC 和和 DST的字长一致的字长一致 MOV AH, BX* CS不能用不能用MOV指令改变指令改变 MOV CS, AX第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式1

4、2第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式13初始:CS=1000H,IP=100H,AX=3000H第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式14第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式15第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式16第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式17 有效地址有效地址EA:操作数的偏移地址,由指令直接给出:操作数的偏移地址,由指令直接给出 物理地址物理地址PA = 10H (DS

5、) + EA 例例:MOV AX, 2000H EA=2000H, 假设假设(DS)=3000H, 那么那么(PA)=32000H操作数地址也可由变量(符号地址)表示操作数地址也可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 ) MOV AH, VALUE5030 32000AH AL3050(AX) = 3050H 32001等价第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式18直接寻址方式直接寻址方式* 隐含的段为数据段隐含的段为数据段 DS* 可使用可使用段跨越前缀段跨越前缀 MOV AX, ES :2000H* 使用变量

6、时,要注意变量的属性使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE (VALUE为字节属性,而为字节属性,而AX为字属性,不一致为字属性,不一致) MOV AX, WORD PTR VALUE* 适于处理单个变量适于处理单个变量在80 x86指令系统中,规定双操作数指令的两个操作数中,最多只能有一个使用存储器寻址方式,也就意味着至少会有一个使用寄存器寻址方式。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式19第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式20第三章第三章 80 x8680 x86的

7、指令系统和寻址方式的指令系统和寻址方式21 BX, SI, DI (DS) 物理地址物理地址 = 10H (DS) + BP (SS) 凡使用凡使用BPBP的,其默认段就为的,其默认段就为SSSS 物理地址物理地址 = 10H (SS) + (BP) MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS) + (BP)(BX)(SI)(DI)第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式22寄存器间接寻址方式寄存器间接寻址方式* 只能使

8、用BP、BX、SI、DI,不允许使用不允许使用AX、CX、DX存放存放EA MOV AX, CX* SRC 和和 DST的字长一致的字长一致 MOV DL, BX ; BX指示一个字节单元指示一个字节单元 MOV DX, BX ; BX指示一个字单元指示一个字单元* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式23MOV AX,BX第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式24第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式25 5. 寄存

9、器相对寻址方式寄存器相对寻址方式* 有效地址为基址寄存器有效地址为基址寄存器(BX,BP)(BX,BP)或变址寄存器或变址寄存器(SI,DI)(SI,DI)与与位移量之和。位移量之和。例例: MOV AX, COUNTSI 或或 MOV AX, COUNT+SI 假设假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么那么 PA = 35000H 假设假设(35000H)=1234H, 那么那么 (AX)=1234H* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理 有效地址有效地址 =(BX)(BP)(SI)(DI)+8位位16位位位移量位移量默认:BP

10、对应SS段,其它对应DS段。允许段跨越。 第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式26MOV AX,1000BX第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式27第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式286. 基址变址寻址方式基址变址寻址方式* 有效地址有效地址EA是一个基址寄存器和一个变址寄存器是一个基址寄存器和一个变址寄存器之和之和 MOV AX, BXDI 或或 MOV AX, BX+DI MOV AX, ES:BXSI* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理

11、* 必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BXBP MOV AX, SIDI有效地址有效地址 =(BX)(BP)+(SI)(DI)默认:BP对应SS段,BX对应DS段。允许段跨越。 第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式29MOV AX, BXSI第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式30第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式317. 相对基址变址寻址方式相对基址变址寻址方式* 有效地址是一个基址寄存器与一个变址

12、寄存器的内容和有效地址是一个基址寄存器与一个变址寄存器的内容和位移量之和。位移量之和。 MOV AX, MASKBXSI 或或 MOV AX, MASKBX+SI 或或 MOV AX, MASK+BX+SI* 适于堆栈处理和二维数组处理适于堆栈处理和二维数组处理 堆栈:堆栈:BPBP指向栈顶,从栈顶到数组首址用位移量表示,变址寄存器可用来指向栈顶,从栈顶到数组首址用位移量表示,变址寄存器可用来访问数组中的某个元素。二维数组:位移量指向文件之首,基址寄存器指向访问数组中的某个元素。二维数组:位移量指向文件之首,基址寄存器指向某个记录,变址寄存器则可用来指向该记录中的一个元素。某个记录,变址寄存器

13、则可用来指向该记录中的一个元素。 有效地址有效地址 =(BX)(BP)+(SI)(DI)+8位位16位位位移量位移量默认:BP对应SS段,其它对应DS段。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式32MOV AX, 1000BXSI第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式33第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式34 例例:编写一段显示字符串编写一段显示字符串STRING的程序的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR!, 0DH , 0AH

14、 , $ COUNT DW 17 DATA ENDS (1)直接寻址)直接寻址 EA只包含位移量只包含位移量 mov dl, string ; mov dl, H 此此 为立即寻址为立即寻址 mov ah, 2 int 21h ; 显示字符显示字符H mov dl, string+1 ; mov dl, A mov ah, 2 int 21h ; 显示字符显示字符A .第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式35(2)寄存器间接寻址)寄存器间接寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; str

15、ing的偏址的偏址 bx next: mov dl, bx mov ah, 2 int 21h ; 显示一个字符显示一个字符 inc bx loop next ; 循环指令循环指令(3)寄存器相对寻址)寄存器相对寻址 mov cx, count ; mov cx, 17 mov si, 0 next: mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 显示一个字符显示一个字符 inc si loop next ; 循环指令循环指令第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式36 (4)基址变址寻址

16、)基址变址寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址的偏址 bx mov si, 0 next: mov dl, bxsi ; mov dl, bx+si mov ah, 2 int 21h ; 显示一个字符显示一个字符 inc si loop next ; 循环指令循环指令 (5)DOS显示字符串功能显示字符串功能 mov dx, offset string ; string的偏址的偏址 dx ; lea dx, string mov ah, 9 int 21h ; 显示一串字符显示一串字符第三章第三章 80

17、 x8680 x86的指令系统和寻址方式的指令系统和寻址方式37 3.1.2 与转移地址有关的寻址方式与转移地址有关的寻址方式 用来用来确定确定 转移指令转移指令 及及 CALL指令指令 的的转向地址转向地址。段内段内寻址寻址段间段间寻址寻址段内段内直接寻址直接寻址段内段内间接寻址间接寻址段间段间直接寻址直接寻址段间段间间接寻址间接寻址以以 转移(条件转移转移(条件转移/无条件转移)指令无条件转移)指令 为例为例段内段内:转移指令与转向的目标指令在同一代码段中转移指令与转向的目标指令在同一代码段中,(,(CS)不变。不变。段间段间:转移指令与转向的目标指令在两个代码段中转移指令与转向的目标指令

18、在两个代码段中, (CS)变化。变化。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式381. 段内段内直接寻址直接寻址 转向的转向的有效地址有效地址EA = 物理地址物理地址 = 16d (CS) + (IP)新新 例例: JMP AGAIN (IP)当前当前 MOV BX, AX AGAIN: (IP)当前当前 + 位移量位移量( 8bit / 16bit )(IP)新新(IP)新新第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式39第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式40 2. 段内段内

19、间接寻址间接寻址 转向的转向的有效地址有效地址EA是一个是一个寄存器或存储单元的内容寄存器或存储单元的内容。 (可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到) 物理地址物理地址 = 16d (CS) + EA 汇编格式:汇编格式:JMP BX JMP BP+TABLEJMP WORD PTR BP+TABLE (在段内寻址时,在段内寻址时,WORD PTR可加也可不加可加也可不加) 注:注: 段内间接寻址、段间直接、段间间接寻址均不能段内间接寻址、段间直接、段间间接寻址均不能用于条件转移指令。也就是说,条件转移指令只能使用用于条件转移指令。也就是说,条件

20、转移指令只能使用段内直接寻址的段内直接寻址的8位位移量,而位位移量,而JMP和和CALL指令可用指令可用四种寻址方式四种寻址方式 的任何一种。的任何一种。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式41第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式423. 段间段间直接寻址直接寻址 用用指令中提供的转向段地址和偏移地址指令中提供的转向段地址和偏移地址取代取代CS和和IP。 转向的物理地址转向的物理地址 = 16d (CS) + (IP) 汇编语言格式:汇编语言格式:JMP FAR PTR NEXT FAR PRT为段间转移的操作

21、符为段间转移的操作符 例例:code1 segment jmp far ptr next code1 ends code2 segment next: . code2 ends第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式43 4. 段间段间间接寻址间接寻址 用用存储器中的两个相继字存储器中的两个相继字的内容取代的内容取代IP和和CS。(存储单元的地址可用除立即数和寄存器以外的任何一种存储单元的地址可用除立即数和寄存器以外的任何一种 数据寻址方式得到数据寻址方式得到) 转向的物理地址转向的物理地址 = 16d (CS) + (IP) 汇编语言格式:汇编语言格式:

22、JMP DWORD PTR NEXT + BX DWORD PTR为双字操作符,说明转向地址为双字操作符,说明转向地址 需取双字为段间转移指令。需取双字为段间转移指令。例:例: JMP DWORD PTR INTERSSI第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式44第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式45 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令 控制转移指令控制转移指令 处理机控制指令处理机控制指令注意:注意:1. 指令的基本功能指令的基本功能 2. 指令的执行对标志位的

23、影响指令的执行对标志位的影响 3. 对寻址方式或寄存器使用的限制和隐含使用的情况对寻址方式或寄存器使用的限制和隐含使用的情况第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式46第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式47 通用数据传送指令(通用数据传送指令(4个)个) 传送指令:传送指令: MOV DST, SRC 执行操作:执行操作: (DST) (SRC)注意注意: * 两个操作数不能都是存储器,必须至少有一个是寄两个操作数不能都是存储器,必须至少有一个是寄存器。存器。 MOV BX,SI * DST、SRC不同时为段寄存

24、器不同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器立即数不能直接送段寄存器 MOV DS, 2000H * DST不能是不能是CS MOV CS,AX * 不影响标志位不影响标志位第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式48例:例: MOV AX, DATA_SEG MOV DS, AX例:例: MOV AL, E ; MOV AL, 45H例:例: MOV BX, OFFSET TABLE例:例: MOV AX, YBPSI第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式49 进栈指令:进栈指令: PUS

25、H SRC 执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (SRC) 出栈指令:出栈指令: POP DST 执行操作:执行操作: (DST) (SP)+1, (SP) (SP) (SP) + 2堆栈:堆栈: “先进后出先进后出”的存储区,只有一个出入口,存在于堆栈的存储区,只有一个出入口,存在于堆栈段中,段中,SP在任何时候都指向栈顶。它必须存在于堆栈段中在任何时候都指向栈顶。它必须存在于堆栈段中,其段地址存入于,其段地址存入于SS寄存器中。寄存器中。 堆栈指针寄存器堆栈指针寄存器SP在任何时候都指向当前的栈顶,在任何时候都指向当前的栈顶,PUSH和和PO

26、P指令必须根据当前指令必须根据当前SP的内容来确定进栈或出栈的内容来确定进栈或出栈的存储单元,而且必须及时修改指针,以确保其始终指向栈的存储单元,而且必须及时修改指针,以确保其始终指向栈顶。顶。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式50第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式51例:例: 假设假设 (AX) = 2107 H , 执行执行 PUSH AX入栈时,由高地址向低地址压入(SP)低地址低地址高地址高地址(SP) 07H 21H低地址低地址高地址高地址进栈方向进栈方向* * * * * * *PUSH AX

27、执行前执行前PUSH AX 执行后执行后第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式52例:例: POP BX(SP)低地址低地址高地址高地址(SP) 07H 21H低地址低地址高地址高地址出栈方向出栈方向07H21H (BX) = 2107H POP BX 执行前执行前 POP BX 执行后执行后* * * * * *出栈时,由低地址向高地址弹出第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式53;其间用到其间用到AX和和BX寄存器寄存器第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式54 交换指令

28、:交换指令: XCHG OPR1, OPR2 执行操作:执行操作: (OPR1) (OPR2)注意注意: * 两个操作数必须至少有一个在寄存器中两个操作数必须至少有一个在寄存器中* 不允许使用段寄存器不允许使用段寄存器* 可用除立即数外的任何寻址方式可用除立即数外的任何寻址方式 * 不影响标志位不影响标志位 例:例:XCHG BX, BP+SI XCHG AL, BH 第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式55第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式56 输入指令(输入指令(I/O CPU) 长格式长格式: IN A

29、L, PORT (字节)(字节) IN AX, PORT (字)(字)注:注:PORT代表一个常数,表示代表一个常数,表示00HFFH的端口号的端口号 执行操作:执行操作:(AL) (PORT) (字节)(字节) (AX) (PORT+1, PORT)(字)(字) 短格式短格式: IN AL, DX (字节)(字节) IN AX, DX (字)(字)注:注:DX存放的是端口号,表示存放的是端口号,表示0000HFFFFH的端口的端口 执行操作:执行操作:(AL) ( (DX) ) (字节)(字节) (AX) ( (DX)+1, (DX) )(字)(字) 第三章第三章 80 x8680 x86的

30、指令系统和寻址方式的指令系统和寻址方式57输出指令(输出指令(CPU I/O)长格式长格式: OUT PORT, AL (字节)(字节) OUT PORT, AX (字)(字)执行操作:执行操作:(PORT) (AL) (字节)(字节) (PORT+1, PORT) (AX)(字)(字)短格式短格式: OUT DX, AL (字节)(字节) OUT DX, AX (字)(字)执行操作:执行操作:( (DX) ) (AL) (字节)(字节) ( (DX)+1, (DX) ) (AX)(字)(字)第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式58例:例: IN AX

31、, 28H ; MOV DX, 28H ; IN AX, DX MOV DATA_WORD, AX例:例: MOV DX, 03FCH 例:例:OUT 5, AL IN AX, DX例例: 测试某状态寄存器(端口号测试某状态寄存器(端口号27H)的第)的第2位是否为位是否为1 IN AL, 27H TEST AL, 00000100B JNZ ERROR ;若第2位为1,转到ERROR处理第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式59第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式60例例 8.1 Sound程序程序 ( pag

32、e 285 ) mov dx, 100 ;控制声响的次数控制声响的次数 in al, 61h and al, 11111100bsound: xor al, 2 ;将第将第1位取反位取反 out 61h, al mov cx, 140h ;控制声响的持续时间控制声响的持续时间wait1: loop wait1 dec dx jne sound设备控制寄存器设备控制寄存器端口端口61H1 / 0 0 控制其它外部设备控制其它外部设备与门与门放大器放大器2号定时器门控号定时器门控1 0第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式61换码指令:换码指令:XLAT 或

33、或XLAT OPR执行操作:执行操作:(AL) ( (BX) + (AL) )例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后指令执行后 (AL)=33H注意注意:* 不影响标志位不影响标志位* 字节表格字节表格(长度不超过长度不超过256) 首地址首地址 (BX)* 需转换代码需转换代码 (AL)* OPR只是为了提高可读性只是为了提高可读性,实际用的是实际用的是BX中表格首地址中表格首地址。(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE

34、(DS)=F000H第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式62第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式63 有效地址送寄存器指令:有效地址送寄存器指令: LEA REG, SRC 执行操作:执行操作: (REG) SRC SRC的有效地址的有效地址 指针送寄存器和指针送寄存器和DS指令:指令: LDS REG, SRC 执行操作:执行操作: (REG) (SRC) SRC的内容的内容 (DS) (SRC+2) 4个相继字节个相继字节 寄存器(通常是寄存器(通常是SI)、)、DS 指针送寄存器和指针送寄存器和ES指令:

35、指令: LES REG, SRC 执行操作:执行操作: (REG) (SRC) (ES) (SRC+2) 4个相继字节个相继字节 寄存器(通常是寄存器(通常是DI)、)、ES 第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式64例:例:LEA BX, BX+SI+0F62H 例:例:LDS SI, 10H例:例:LES DI, BX例:例:(DS):1000H 40 H 00 H 00 H 30 H TABLEMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE ; (BX

36、)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意注意: * 不影响标志位不影响标志位 * REG不能是段寄存器不能是段寄存器 * SRC必须为存储器寻址方式,除立即数、寄存器外的必须为存储器寻址方式,除立即数、寄存器外的第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式65 标志送标志送AH指令:指令: LAHF 执行操作:执行操作: (AH) (FLAGS的低字节的低字节) AH送标志寄存器指令:送标志寄存器指令: SAHF 执行操作:执行

37、操作: (FLAGS的低字节的低字节) (AH) 标志进栈指令:标志进栈指令: PUSHF 执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 标志出栈标志出栈指令:指令: POPF 执行操作:执行操作: (FLAGS) (SP)+1, (SP) (SP) (SP) + 2* 影响标志位影响标志位第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式66注意注意: * 无操作数指令无操作数指令 * 隐含对隐含对AL或或AX进行符号扩展进行符号扩展 * 不影响条件标志位不影响条件标志位例:例:(AX)=0BA45H CBW

38、; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式67 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 除法指令除法指令 十进制调整指令十进制调整指令 注:算术指令中有双操作数指令,也有单操作数指令。双操作数中除源操作数为立即数的情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数方式。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式68 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作: (DST) (SRC) +

39、(DST) 带进位加法指令:带进位加法指令: ADC DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1注意注意: * 除除INC指令不影响指令不影响CF标志外,均对条件标志位标志外,均对条件标志位 有影响。有影响。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式69加法指令对条件标志位(加法指令对条件标志位(CF/OF/ZF/SF)的影响:)的影响:CF位表示无符号数相加的溢出。位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。位

40、表示带符号数相加的溢出。1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位和的最高有效位 有有 向高位的进位向高位的进位0 否则否则CF=1 两个操作数符号相同,而结果符号与之相反两个操作数符号相同,而结果符号与之相反0 否则否则OF=第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式70无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0带:带:(+7)+(-5)=+2 OF=0无:无:7+251=2 CF=1带符号数和无符号数都不溢出带符号数和无符号

41、数都不溢出 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:带:(+4)+(+11)=+15 OF=0无:无:4+11=15 CF=0带符号数溢出带符号数溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1带带:(+9)+(+124)=-123 OF=1无无:9+124=133 CF=0带符号数和无符号数都溢出带符号数和无符号数都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0带:带:(-121)+(-11)=+124 OF=1无:无

42、:135+245=124 CF=1n=8bit 带符号数带符号数(-128127) 无符号数无符号数(0255)第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式71 例:双精度数的加法例:双精度数的加法目的操作数:目的操作数: (DX)= 0002H (AX)= 0F365H源操作数:源操作数: (BX)= 0005H (CX)= 0E024H 指令序列指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后,(执行后,(AX)= 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,(执行后,(DX)= 0008H C

43、F=0 OF=0 SF=0 ZF=0注:双精度数的加法注:双精度数的加法 1.必须通过两条指令分别完成低位字和高位字的加法必须通过两条指令分别完成低位字和高位字的加法 2.带符号双精度数的溢出,应该根据高位字的带符号双精度数的溢出,应该根据高位字的ADC指令指令来判断。来判断。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式72 减法指令:减法指令: SUB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) 带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - C

44、F 减减1指令:指令: DEC OPR 执行操作:执行操作: (OPR) (OPR) - 1 求补指令:求补指令: NEG OPR 执行操作:执行操作: (OPR) - (OPR) 按位取反加一按位取反加一 比较指令:比较指令: CMP OPR1, OPR2 执行操作:执行操作: (OPR1) - (OPR2) 除除DEC指令不影响指令不影响 CF标志外,均对条标志外,均对条 件标志位有影响。件标志位有影响。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式73 减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)的影响:)的影响:CF位表示无符号数

45、减法的借位情况。位表示无符号数减法的借位情况。OF位表示带符号数减法的溢出(看结果是否超出范围)。位表示带符号数减法的溢出(看结果是否超出范围)。NEG指令对指令对CF/OF的影响:的影响:CF位:只有操作数为位:只有操作数为0时,求补的结果使时,求补的结果使CF=0;否则;否则CF=1。OF位:字节运算对位:字节运算对-128求补或字运算对求补或字运算对-32768求补时求补时OF=1, 否则否则OF=0。1 被减数的最高有效位有向高位的借位被减数的最高有效位有向高位的借位0 否则否则CF=1 两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0 否则否则O

46、F=1 减法转换为加法运算时无进位减法转换为加法运算时无进位0 否则否则CF=或或第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式74 76-85=? 0 1 0 0 1 1 0 0 - 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 CF=1 OF=0 (-76)-85=? 1 0 1 1 0 1 0 0 - 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 CF=0 OF=185-(-76)=? 0 1 0 1 0 1 0 1 - 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 1 CF=1 OF=1CF位表示无符号数

47、减法的借位情况。位表示无符号数减法的借位情况。OF位表示带符号数减法的溢出(看结果是位表示带符号数减法的溢出(看结果是否超出范围)。否超出范围)。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式75例:例:x、y、z均为双精度数,分别存放在地址为均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现 w x+y+24-z ,并用,并用W, W+2单元存放单元存放w。 MOV AX, X MOV DX, X+2 ;x ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24

48、 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入结果存入W, W+2单元单元第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式76 无符号数乘法指令:无符号数乘法指令: MUL SRC 执行操作:字节操作数执行操作:字节操作数 (AX) (AL) * (SRC) 字操作数字操作数 (DX, AX) (AX) * (SRC) 带符号数乘法指令:带符号数乘法指令: IMUL SRC注意注意: * AL(AX)为隐含的乘数寄存器。为隐含的乘数寄存器。 * AX

49、(DX,AX)为隐含的乘积寄存器。为隐含的乘积寄存器。 * SRC不能为立即数不能为立即数。 * 除除CF和和OF外,对条件标志位无定义。外,对条件标志位无定义。无定义是指指令执行完毕后这些条件码的状无定义是指指令执行完毕后这些条件码的状态不定,并不是没有影响。态不定,并不是没有影响。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式77 乘法指令对乘法指令对CF/OF的影响:的影响:00 乘积的高一半乘积的高一半(AH或或DX)为零为零11 否则否则MUL指令指令: CF/OF =例:例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL

50、; (AX) (AL) * (BL) ; A5*11 5B*11=060B F9F5 ( (求其绝对值求其绝对值) ) ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX) = 0089H (AX) = 5EF5H CF=OF=1 00 乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令: CF/OF =第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式78 无符号数除法指令:无符号数除法指令: DIV S

51、RC 执行操作:执行操作: 字节操作字节操作 (AL) (AX) / (SRC) 的的商商 (AH) (AX) / (SRC) 的的余数余数 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余数的余数 带符号数除法指令:带符号数除法指令: IDIV SRC注意注意: * AX(DX,AX)为隐含的被除数寄存器。为隐含的被除数寄存器。 * AL(AX)为隐含的商寄存器。为隐含的商寄存器。 * AH(DX)为隐含的余数寄存器。为隐含的余数寄存器。 * SRC不能为立即数不能为立即数。 * 对所有条件标志位均对所有条件标志位均无定义无

52、定义。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式79 例:例:x,y,z,v均为均为16位带符号数,计算位带符号数,计算(v-(x*y+z-540)/x MOV AX, X IMUL Y ; x*y MOV CX, AX ;将乘积保存到将乘积保存到BX:CX MOV BX, DX MOV AX, Z CWD ADD CX, AX ADC BX, DX ; x*y+z SUB CX, 540 SBB BX, 0 ; x*y+z-540 MOV AX, V CWD SUB AX, CX SBB DX, BX ; v-(x*y+z-540) 保存在保存在DX:AX

53、 IDIV X ; (v-(x*y+z-540)/x第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式80 BCD码码:用二进制编码的十进制数,:用二进制编码的十进制数,又称又称二二-十进制数十进制数 压缩的压缩的BCD码码:用:用4位二进制数表示位二进制数表示1位十进制数位十进制数 例:例:(59)10 (0101 1001)BCD非压缩的非压缩的BCD码码:用:用8位二进制数表示位二进制数表示1位十进制数位十进制数例:例:(59)10 (0000 0101 0000 1001)BCD数字的数字的ASCIIASCII码是一种非压缩的码是一种非压缩的BCD码码DIG

54、ITASCIIBCD030H0011 0000131H0011 0001232H0011 0010 939H0011 1001第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式81例:写出例:写出(3590)10的压缩的压缩BCD码和非压缩码和非压缩BCD码,并码,并 分别把它们存入数据区分别把它们存入数据区PAKED和和UNPAK。压缩压缩BCD:(3590)10(0011 0101 1001 0000)BCD非压缩非压缩BCD: (3590)10(00000011 00000101 00001001 00000000)BCDPAKED 90H 35HUNPAK

55、00H 09H 05H 03H第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式82加法的十进制调整指令:加法的十进制调整指令:DAA执行操作:执行操作:(AL) (AL)压缩压缩BCD减法的十进制调整指令:减法的十进制调整指令:DAS执行操作:执行操作:(AL) (AL)压缩压缩BCD19 压缩压缩BCD: 0001 1001 + 08 + 0000 1000 27 0010 0001 + 110 (0010 0111)BCD AF=1问题的提出:问题的提出: 注意注意: * 隐含的操作寄存器为隐含的操作寄存器为AL * 紧接在加减指令之后使用紧接在加减指令之后使

56、用 * 影响条件标志位影响条件标志位 (对(对OF无定义无定义)采用压缩BCD码表示两加数时:第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式83调整方法:调整方法:AF1或或(AL)03AF,则,则(AL) (AL) 06H,AF1CF1或或(AL)47AF,则,则(AL) (AL) 60H,CF1 ( DAA做做+, DAS做做- )例例:DATA SEGMENT BCD1 DB34H, 18H ; (1834)BCD BCD2 DB89H, 27H ; (2789)BCD BCD3 DB2 DUP (?)DATA ENDS (1) BCD3 BCD1 + B

57、CD2; (4623)BCD (2) BCD3 BCD1 - BCD2 ; (9045)BCD = -955相当于向高位借了个 1,当作11834来算,结果再减去10000即为实际的结果值。第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式84(1)MOV AL, BCD1 ; (AL)=34H ADD AL, BCD2 ; (AL)=34+89=BDH DAA ; (AL)=BD+60+06=23H MOV BCD3, AL ; (BCD3)=23HMOV AL, BCD1+1 ; (AL)=18H ADC AL, BCD2+1 ; (AL)=18+27+1=40

58、H AF=1 CF=0DAA ; (AL)=40+06=46H MOV BCD3+1, AL ; (BCD3+1)=46H(2)MOV AL, BCD1 ; (AL)=34H SUB AL, BCD2 ; (AL)=34-89=ABH AF=CF=1DAS ; (AL)=AB-60-06=45HMOV BCD3, AL ; (BCD3)=45HMOV AL, BCD1+1 ; (AL)=18H SBB AL, BCD2+1 ; (AL)=18-27-1=F0H CF=1DAS ; (AL)=F0-60=90H MOV BCD3+1, AL ; (BCD3+1)=90H第三章第三章 80 x86

59、80 x86的指令系统和寻址方式的指令系统和寻址方式85 加法调整指令:加法调整指令:AAA (AL) (AL)非压缩非压缩BCD减法调整指令:减法调整指令:AAS (AL) (AL)非压缩非压缩BCD注意注意: * 隐含的操作寄存器为隐含的操作寄存器为AL * 紧接在加减指令之后使用紧接在加减指令之后使用 * 除除AF、CF外,对其它条件标志位外,对其它条件标志位无定义无定义调整方法:调整方法:若若(AL)03=09,且,且AF=0,则,则(AL)47 = 0,AF 0 CF若若(AL)03=AF,或,或AF=1,则,则(AL) (AL)6,(AL)470 同时同时(AH) (AH)1,AF

60、 1 CF( AAA做做+, AAS做做- )第三章第三章 80 x8680 x86的指令系统和寻址方式的指令系统和寻址方式86例:例:AX=0007H,BL=08H 7+8=? ADD AL,BL ;(AL)=0FH AAA ;(AL)=05H,(AH)=01H,(CF)=(AF)=1例:例:AX=0103H,BL=04H 13-4=? SUB AL,BL ;(AL)=03H-04H=FFH AAS ;(AL)=09H,(AH)=0调整方法:调整方法:若若(AL)03=09,且,且AF=0,则,则(AL)47 = 0,AF 0 CF若若(AL)03=AF,或,或AF=1,则,则(AL) (A

温馨提示

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

评论

0/150

提交评论