汇编语言程序设计第3章寻址方式_第1页
汇编语言程序设计第3章寻址方式_第2页
汇编语言程序设计第3章寻址方式_第3页
汇编语言程序设计第3章寻址方式_第4页
汇编语言程序设计第3章寻址方式_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

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

文档简介

1、l 计算机是通过执行指令序列来解决问计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算供给用户使用,这组指令集就称为计算机的指令系统。机的指令系统。l 指令系统即指令系统即一组指令的集合。一组指令的集合。第第3章章 80 x86的指令系统和寻址方式的指令系统和寻址方式1. 8086的寻址方式的寻址方式 与数据有关的寻址方式与数据有关的寻址方式:以以 MOV 指令为例指令为例 立即寻址立即寻址 MOV AX , 3069H寄存器寻址寄存器寻址 MOV AL , BH直接寻址直接寻址 MOV AX , 2000H

2、寄存器间接寻址寄存器间接寻址 MOV AX , BX 寄存器相对寻址寄存器相对寻址 MOV AX , COUNT SI 基址变址寻址基址变址寻址 MOV AX , BP DI 相对基址变址寻址相对基址变址寻址 MOV AX , MASK BX SI 存储器寻址存储器寻址(1) 立即寻址方式立即寻址方式* 操作数在指令中给出操作数在指令中给出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A * 只能用于只能用于 SRC 字段字段 MOV 40H, AL * SRC 和和 DST 的字长一致的字长一致 MOV AH, 3064H 请参看教材请参看教材P.36(2)

3、寄存器寻址方式寄存器寻址方式* 操作数在指定的寄存器中操作数在指定的寄存器中 MOV AX, BX MOV AL, BH MOV AX, 3064H* 字节寄存器只有字节寄存器只有 AH AL BH BL CH CL DH DL* SRC 和和 DST 的字长一致的字长一致 MOV AH, BX * CS 不能用不能用 MOV 指令改变指令改变 MOV CS, AX 请参看教材请参看教材P.36-P.38 请参看教材请参看教材P.38、P.39表表3.1 请参看教材请参看教材P.39和表和表3.2 默认的默认的段寄存器段寄存器访问存储器的方式访问存储器的方式可跨越的可跨越的段寄存器段寄存器偏移

4、地址偏移地址取指令取指令 CS 无 IP堆栈操作堆栈操作 SS 无 SP一般数据访问一般数据访问 DS CS ES SS 有效地址EABP作为基址的寻址作为基址的寻址 SS CS DS ES BP串操作的源操作数串操作的源操作数 DS CS ES SS SI串操作的目的操作数串操作的目的操作数 ES 无 DI段段 寄寄 存存 器器 的的 使使 用用 规规 定定50(3) 直接寻址方式直接寻址方式* 有效地址有效地址EA由指令直接给出由指令直接给出 例例:MOV AX, 2000H EA=2000H, 假设假设(DS)=3000H, 那么那么PA=32000H* 隐含的段为数据段隐含的段为数据段

5、 DS* 可使用段跨越前缀可使用段跨越前缀 MOV AX, ES: 2000H* 操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示, 但要注意但要注意VALUE DB 10 变量的属性变量的属性MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE 5030 32000AH AL30(AX) = 3050H 请参看教材请参看教材P.39-P.40(4)寄存器间接寻址)寄存器间接寻址* EA 在基址寄存器在基址寄存器(BX/BP) 或变址寄存器或变址寄存器(SI/DI) 中中 MOV AX, BX PA = 16d (DS) +

6、(BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS) + (BP) * 不允许使用不允许使用AX、CX、DX 存放存放 EA MOV AX, CX * SRC 和和 DST 的字长一致的字长一致 MOV DL, BX ; BX指示一个字节单元指示一个字节单元 MOV DX, BX ; BX指示一个字单元指示一个字单元 * 适于数组、字符串、表格的处理适于数组、字符串、表格的处理 请参看教材请参看教材P.40-P.41 有效地址有效地址 =(BX)(BP) 8位位(SI) 16位位(DI)+位移量位移量(5) 寄存器相对

7、寻址方式寄存器相对寻址方式* 指令格式指令格式: MOV AX, COUNTSI MOV AX, COUNTSI 或或 MOV AX, COUNT+SI MOV AX, COUNT+SI 假设假设 (DS)=3000H, (SI)=2000H, COUNT=3000H(DS)=3000H, (SI)=2000H, COUNT=3000H, 则则: PA = 35000HPA = 35000H 假设假设(35000H)=1234H, (35000H)=1234H, 那那么么 (AX)=1234H(AX)=1234H* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理 请参看教材请参看教材

8、P.40(BX) (SI)(BP) (DI)(6) 基址变址寻址方式基址变址寻址方式*指令格式:指令格式: MOV AX, BX DIMOV AX, BX DI MOV AX, BX+DI MOV AX, BX+DI MOV AX, ES:BX SI MOV AX, ES:BX SI* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理* 必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BX BP MOV AX, SI DI 有效地址有效地址 =+ 请参看教材请参看教材P.41-P.42( 7 ) 相对基址变址寻址方式相对基址变址寻址

9、方式 MOV AX, MASK BX SI 或或 MOV AX, MASK BX+SI 或或 MOV AX, MASK+BX+SI 有效地址有效地址 =(BX) (SI) 8位位(BP) (DI) 16位位+位移量位移量 请参看教材请参看教材P.42-P.43寻址方式小结1:寻址方式小结2:例例:编写一段显示字符串编写一段显示字符串STRING的程序的程序 DATA SEGMENTDATA SEGMENT STRING DB HAPPY NEW YEAR! , 0DH , 0AH , $ STRING DB HAPPY NEW YEAR! , 0DH , 0AH , $ COUNT DW 17

10、 COUNT DW 17 DATA ENDS DATA ENDS ( 1 ) 直接寻址直接寻址 mov dl, string mov dl, string mov ah, 2 mov ah, 2 int 21h int 21h ; ; 显示字符显示字符HH mov dl, string+1 mov dl, string+1 mov ah, 2 mov ah, 2 int 21h int 21h ; ; 显示字符显示字符AA : : : :( 2 ) 寄存器间接寻址寄存器间接寻址 mov cx, count mov cx, count ; mov cx, 17; mov cx, 17 mov b

11、x, offset string mov bx, offset string ; string; string的偏址的偏址 bx bxNext : mov dl, bx Next : mov dl, bx mov ah, 2 mov ah, 2 int 21h int 21h ; ; 显示一个字符显示一个字符 inc bx inc bx loop next loop next ; ; 循环指令循环指令( 3 ) 寄存器相对寻址寄存器相对寻址 mov cx, count mov cx, count ; mov cx, 17; mov cx, 17 mov si, 0 mov si, 0 Next

12、 : mov dl, stringsi Next : mov dl, stringsi ; mov dl, string+si; mov dl, string+si mov ah, 2 mov ah, 2 int 21h int 21h ; ; 显示一个字符显示一个字符 inc si inc si loop next loop next ; ; 循环指令循环指令( 4 ) 基址变址寻址基址变址寻址 mov cx, count mov cx, count ; mov cx, 17; mov cx, 17 mov bx, offset string mov bx, offset string ;

13、string; string的偏址的偏址 bx bx mov si, 0 mov si, 0Next : mov dl, bx si Next : mov dl, bx si ; mov dl, bx+si; mov dl, bx+si mov ah, 2 mov ah, 2 int 21h int 21h ; ; 显示一个字符显示一个字符 inc si inc si loop next loop next ; ; 循环指令循环指令( 5 ) DOS 显示字符串功能显示字符串功能 mov dx, offset string mov dx, offset string ; string; str

14、ing的偏址的偏址 dx dx ; lea dx, string; lea dx, string mov ah, 9 mov ah, 9 int 21h int 21h ; ; 显示一串字符显示一串字符80 x86 新增的寻址方式新增的寻址方式 EA= = (基址寄存器基址寄存器) + (变址寄存器变址寄存器) 比例因子比例因子 + 位移量位移量( 1 ) 比例变址寻址方式比例变址寻址方式 例:例:MOV EAX, COUNT ESI 4 (2) 基址比例变址寻址方式基址比例变址寻址方式 例:例:MOV ECX, EAX EDI 4 (3) 相对基址比例变址寻址方式相对基址比例变址寻址方式 例

15、:例:MOV EAX, TABLE EBP EDI 4 16 16位和位和3232位寻址的差异位寻址的差异地址成分地址成分 1616位寻址位寻址 3232位寻址位寻址基址寄存器基址寄存器 BXBX、BP BP 任何任何3232位通用寄存器位通用寄存器变址寄存器变址寄存器 SISI、DI DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 1 11 1、2 2、4 4、8 8 3.1.2 与转移地址有关的寻址方式:与转移地址有关的寻址方式: 段内寻址段内寻址 段内直接寻址段内直接寻址 JMP NEAR PTR NEXT 段内间接寻址段内间接寻址 JMP TAB

16、LE BX 段间寻址段间寻址 段间直接寻址段间直接寻址 JMP FAR PTR NEXT 段间间接寻址段间间接寻址 JMP DWORD PTR BX 用来确定转移指令及转子(用来确定转移指令及转子(CALL)指令的转向)指令的转向地址地址。(1) 段内直接寻址段内直接寻址转向的有效地址转向的有效地址 = 当前当前(IP) + 位移量位移量(8bit/16bit) 例例: JMP NEAR PTR NEXT 近转移近转移 -32768 +32767 JMP SHORT NEXT 短转移短转移 -128 +127 位移量为-0BH,0F5H是位移量的补吗。当前当前(IP)(2) 段内间接寻址段内间

17、接寻址 转向的有效地址是一个寄存器或存储单元的内容。转向的有效地址是一个寄存器或存储单元的内容。 (可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到) 例:例: TABLE = 20A2H (BX) = 1256H (SI) = 528EHTABLE = 20A2H (BX) = 1256H (SI) = 528EH (DS) = 2000H (232F8H) = 3280H (264E4H) = (DS) = 2000H (232F8H) = 3280H (264E4H) = 2450H2450H JMP BX ; (IP)=1256H JMP TABLE

18、BX JMP WORD PTR TABLEBX ; (IP)=3280H JMP BXSI JMP WORD PTR BXSI ; (IP)=2450H 请参看教材请参看教材P.45code1 segmentcode1 segment jmp jmp far ptrfar ptr next next code1 endscode1 endscode2 segment code2 segment next: . next: . code2 endscode2 ends(3) 段间直接寻址段间直接寻址 用指令中提供的转向段地址和偏移地址用指令中提供的转向段地址和偏移地址取代取代CS 和和 IP 例

19、例: 请参看教材请参看教材P.46(4) 段间间接寻址段间间接寻址 用存储器中的两个相继字的内容用存储器中的两个相继字的内容取代取代CS 和和 IP (存储单元的地址可用存储器寻址方式得到存储单元的地址可用存储器寻址方式得到) 例:例: JMP DWORD PTR INTERS+BX PA=(DS)PA=(DS)2 24 4 + (BX) + INTERS+ (BX) + INTERS (PA+1, PA)IP (PA+1, PA)IP (PA+3, PA+2) CS (PA+3, PA+2) CS 请参看教材请参看教材P.46第第3章章 练习练习Page 107 3.1 3.3 3.5 3.

20、7 3.11 3.13 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令 控制转移指令控制转移指令 处理机控制与杂项操作指令处理机控制与杂项操作指令3.3 8086的指令系统的指令系统重点关注:重点关注:指令的汇编格式指令的汇编格式指令的基本功能指令的基本功能指令支持的寻址方式指令支持的寻址方式指令的执行对标志位的影响指令的执行对标志位的影响指令的特殊要求指令的特殊要求 通用数据传送指令通用数据传送指令 MOV、MOVSX、MOVZX(386) PUSH、POP、PUSHA、POPA(286) PUSHAD、 POPAD(386) XCHG 累加器专用传送指令

21、累加器专用传送指令 IN、OUT、XLAT 请参看教材请参看教材P.473.3.1 数据传送指令数据传送指令1:数据传送指令数据传送指令2:传送指令:传送指令: MOV DST, SRC执行操作:执行操作: (DST) (SRC) 1、通用数据传送指令通用数据传送指令 请参看教材请参看教材P.48-P.49注意:注意:MOV AX, DSEGMOV DS, AX 请参看教材请参看教材P.48-P.49例例3.20-3.24 简单了解简单了解(2)MOVSX 和和(3) MOVZX(4) 进栈指令:进栈指令: PUSH SRC 执行操作:执行操作: (SP) (SP) 2 ( (SP)+1, (

22、SP) ) (SRC)PUSH指令可以有指令可以有4种格式:种格式:PUSH regPUSH memPUSH dataPUSH segreg但但8086不允许使用立即数寻址方式。不允许使用立即数寻址方式。 请参看教材请参看教材P.50-P.51例例3.29:假设:假设 (AX) = 2107 H , 执行执行 PUSH AX* * * * *(SP)PUSH AX 执行前执行前(SP)* * * * *07H07H21H21H低地址低地址 高地址高地址PUSH AX 执行后执行后进栈方向进栈方向(SP)* * * * *07H07H21H21HPOP BX 执行前执行前(SP)* * * *

23、*07H07H21H21H低地址低地址 高地址高地址 POP BX 执行后执行后 (BX) = 2107H例例3.30 : POP BX出栈方向出栈方向例:例: PUSH DSPUSH DS SUB AX, AX SUB AX, AX PUSH AX PUSH AX RET RET例:例: PUSH AXPUSH AX PUSH BX PUSH BX PUSH CX PUSH CX ;其间用到其间用到AX、BX、CX POP CX POP CX ; ; 后进先出后进先出 POP BXPOP BX POP AX POP AX 请参看教材请参看教材P.52(8)XCHG交换指令交换指令 交换指令:

24、交换指令: XCHG OPR1, OPR2 执行操作:执行操作: (OPR1) (OPR2)注意注意: * 不影响标志位不影响标志位* 两个操作数必须有一个在寄存器中两个操作数必须有一个在寄存器中 * 不允许使用段寄存器不允许使用段寄存器 例:例:XCHG BX, BP+SI XCHG AL, BH 请参看教材请参看教材P.52-P.532、 累加器专用传送指令累加器专用传送指令(只限使用(只限使用AX或或AL) 输入指令输入指令 IN (I/O CPU) 长格式长格式: IN AL, PORT (字节)(字节) IN AX, PORT (字)(字) 执行操作:执行操作:(AL) ( PORT

25、 ) (字节)(字节) (AX) ( PORT+1, PORT )(字)(字) 短格式短格式: IN AL, DX (字节)(字节) IN AX, DX (字)(字) 执行操作:执行操作:(AL) ( (DX) ) (字节)(字节) (AX) ( (DX)+1, (DX) )(字)(字) 输出指令输出指令 OUT (CPU I/O)长格式长格式: OUT PORT, AL (字节)(字节) OUT PORT, AX (字)(字)执行操作:执行操作:( PORT ) (AL) (字节)(字节) ( PORT+1, PORT ) (AX)(字)(字)短格式短格式: OUT DX, AL (字节)(

26、字节) OUT DX, AX (字)(字)执行操作:执行操作:( (DX) ) (AL) (字节)(字节) ( (DX)+1, (DX) ) (AX)(字)(字) 请参看教材请参看教材P.54注意注意: * 不影响标志位不影响标志位* 前前256个端口号个端口号00HFFH可直接在指令中指定(长格式)可直接在指令中指定(长格式)* 如果如果端口号端口号 256,端口号端口号 DX(短格式)(短格式)例例3.363.36: IN AX, 28H IN AX, 28H MOV DATA_WORD, AX MOV DATA_WORD, AX例例3.373.37: MOV DX, 3FCH MOV D

27、X, 3FCH IN AX, DX IN AX, DX例例3.383.38: OUT 5, AL OUT 5, AL例:例:Sound程序程序 mov dx, 100mov dx, 100 in al, 61h in al, 61h and al,11111100b and al,11111100bsoundsound: xor al, 2 ; xor al, 2 ; 1 0 11 0 1 out 61h, al out 61h, al ;ON OFF ONON OFF ON mov cx, 140h mov cx, 140h ;脉宽;脉宽Wait1Wait1: loop wait1loop

28、wait1 dec dx dec dx jne sound jne sound设备控制寄存器设备控制寄存器端口端口61H1 / 0 0 控制其它外部设备控制其它外部设备与门与门放大器放大器2号定时器门控号定时器门控1 0 请参看教材请参看教材P.55例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后指令执行后 (AL)=33H33 H F0043(BX) 30 H F0040TABLE31 H F0041 (AL) = 3 32 H F0042 (DS)=F000H3、地址传送指令地址传送指令 有效地址送寄存器指令:

29、有效地址送寄存器指令: LEA REG, SRC 执行操作:执行操作: (REG) SRC 指针送寄存器和指针送寄存器和DS指令:指令: LDS REG, SRC 执行操作:执行操作: (REG) (SRC) (DS) (SRC+2) 相继二字相继二字 寄存器、寄存器、DS 指针送寄存器和指针送寄存器和ES指令:指令: LES REG, SRC 执行操作:执行操作: (REG) (SRC) (ES) (SRC+2) 相继二字相继二字 寄存器、寄存器、ES 请参看教材请参看教材P.55表表3.4以上内容以上内容例例3.40:LEA BX, BX+SI+0F62H LDS SI, 10H LES

30、DI, BX40 H00 H00 H30 H TABLE(DS):1000HMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE ; (BX)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意注意: * 不影响标志位不影响标志位 * REG 不能是段寄存器不能是段寄存器 * SRC 必须为存储器寻址方式必须为存储器寻址方式 请参看教材请参看教材P.55例例3.414、 标志寄存器传送

31、指令标志寄存器传送指令 标志送标志送AH指令:指令: LAHF 执行操作:执行操作: (AH) (FLAGS的低字节的低字节) AH送标志寄存器指令:送标志寄存器指令: SAHF 执行操作:执行操作: (FLAGS的低字节的低字节) (AH) 标志进栈指令:标志进栈指令: PUSHF 执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 标志出栈标志出栈指令:指令: POPF 执行操作:执行操作: (FLAGS) ( (SP)+1, (SP) ) (SP) (SP) + 2* 影响标志位影响标志位 请参看教材请参看教材P.585、 类型转换指令类型

32、转换指令 CBW AL AX 执行操作:执行操作: 若若(AL)的最高有效位为的最高有效位为0,则,则(AH)= 00H 若若(AL)的最高有效位为的最高有效位为1,则,则(AH)= FFH CWD AX (DX,AX) 执行操作:若执行操作:若(AX)的最高有效位为的最高有效位为0,则,则(DX)= 0000H 若若(AX)的最高有效位为的最高有效位为1,则,则(DX)= FFFFH 例:例:(AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H注意注意: * 无操作数指令无操作数指令 * 隐含对隐含对AL 或或AX 进行符号

33、扩展进行符号扩展 * 不影响条件标志位不影响条件标志位 请参看教材请参看教材P.58算术指令:算术指令: 加法指令加法指令 ADD、ADC、INC、XADD(486) 减法指令减法指令 SUB、SBB、DEC、NEG、CMP CMPXCHG(486)、)、 CMPXCHG8B(Pentium) 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十进制调整指令十进制调整指令 DAA、DAS(压缩的(压缩的BCD码调整指令)码调整指令) AAA、AAS、AAM、AAD(非压缩)(非压缩) 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作:

34、(DST) (SRC) + (DST) 带进位加法指令:带进位加法指令: ADC DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1注意注意: * 除除INC指令不影响指令不影响CF标志外,均对条件标志位有影响。标志外,均对条件标志位有影响。 请参看教材请参看教材P.59加法指令对加法指令对条件标志位条件标志位的影响的影响1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位和的最高有效位 有有 向高位的进位向高位的进位0 否则否

35、则CF=1 两个操作数符号相同,而结果符号与之相反两个操作数符号相同,而结果符号与之相反0 否则否则OF=那么,那么,CF 和和OF 的区别是什么呢?的区别是什么呢?CF 位表示位表示 无符号数无符号数 相加的溢出。相加的溢出。OF 位表示位表示 带符号数带符号数 相加的溢出。相加的溢出。 请参看教材请参看教材P.59下下-P.60上说明上说明 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 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1

36、 1 1 0 0 0 0 0 0 1 0带:带:(+7)+(-5)=+2 OF=0无:无:7+251=2 CF=1 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0带:带:(-121)+(-11)=+124 OF=1无:无:135+245=124 CF=1举例举例: n=8 bit 带符号数带符号数(-128127) , 无符号数无符号数(0255) 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带符号数和无符号

37、数都不溢出带符号数和无符号数都不溢出带符号数溢出带符号数溢出无符号数溢出无符号数溢出带符号数和无符号数都溢出带符号数和无符号数都溢出 请参看教材请参看教材P.60下下-P.61上例上例3.45例例3.46:双精度数的加法:双精度数的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 0E024H 指令序列指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2) (1) 执行后,执行后,(AX) = 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,执行后,(DX) = 0008H CF=0 OF=0 SF=

38、0 ZF=0 因此,结果正确。因此,结果正确。 请参看教材请参看教材P.61 减法指令减法指令减法指令:减法指令: SUB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC)带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - CF减减1指令:指令: DEC OPR 执行操作:执行操作: (OPR) (OPR) - 1求补指令:求补指令: NEG OPR 执行操作:执行操作: (OPR) - (OPR) 把操作数按位求反后末位加把操作数按位求反后末位加1。比较指令:比较指令: CMP OPR1,

39、 OPR2 执行操作:执行操作: (OPR1) - (OPR2)注意注意: * 除除DEC指令不影响指令不影响 CF标志外,均对条标志外,均对条 件标志位有影响。件标志位有影响。 请参看教材请参看教材P.62减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)的影响:)的影响:CF 位表示位表示 无符号数无符号数 减法的溢出。减法的溢出。OF 位表示位表示 带符号数带符号数 减法的溢出。减法的溢出。1 被减数的最高有效位被减数的最高有效位 有有 向高位的借位向高位的借位0 否则否则CF=1 两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0

40、否则否则OF=1 减法转换为加法运算时减法转换为加法运算时 无无 进位进位0 否则否则CF=或或 请参看教材请参看教材P.63上上NEG 指令对指令对CF/OF的影响的影响0 操作数为操作数为01 否则否则CF =1 操作数为操作数为 -128 (字节运算)(字节运算)或或 操作数为操作数为 -32768 (字运算)(字运算)0 否则否则OF = 0 0 0 1 1 1 1 0 + 0 0 0 1 1 1 1 1NEG 指令对指令对CF/OF的影响的影响0 操作数为操作数为01 否则否则CF =1 操作数为操作数为 -128 (字节运算)(字节运算)或或 操作数为操作数为 -32768 (字运

41、算)(字运算)0 否则否则 OF = 0 0 0 0 1 1 1 1 + 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 + 0 0 0 1 1 0 0 0 请参看教材请参看教材P.63例例3.50:x、y、z 均为双精度数,分别存放在地址为均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现 w x + y + 24 - z ,并用,并用W, W+2单元存放单元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADC DX,

42、Y+2 ; x+yADC DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC DX, 0 ; x+y+24SUB AX, ZSUB AX, ZSBB DX, Z+2 ; x+y+24-zSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 结果存入结果存入W, W+2W, W+2单元单元 请参看教材请参看教材P.643、乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC 带符号数乘法指令:带符号数乘法指令: IMUL SRC 执行操作:

43、执行操作: 字节操作数字节操作数 (AX) (AL) * (SRC) 字操作数字操作数 (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 为隐含的乘数寄存器。为隐含的乘数寄存器。* AX (DX,AX) 为隐含的乘积寄存器。为隐含的乘积寄存器。* SRC不能为立即数。不能为立即数。* 除除CF和和OF外,对条件标志位无定义。外,对条件标志位无定义。 请参看教材请参看教材P.64-P.65乘法指令对乘法指令对 CF/OF 的影响:的影响:例例3.52:(AL) = 0B4H,(BL) = 11H (1) IMUL BL ; (AX) (AL) * (BL) ; B4*11

44、 CC*11=0FAF4H -1292D ; (AX) = 0FAF4H CF=OF=1 (2) MUL BL ; (AX) (AL) * (BL) ; B4*11 =0BF4H=3060D ; (AX)=0BF4H CF=OF=100 乘积的高一半为零乘积的高一半为零11 否则否则MUL指令指令: CF,OF =00 乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令: CF,OF = 除法指令除法指令 无符号数除法指令:无符号数除法指令: DIV SRC 带符号数除法指令:带符号数除法指令: IDIV SRC 执行操作:执行操作: 字节操作字节操作

45、 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余数的余数 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余数的余数注意注意: * AX (DX,AX) 为隐含的被除数寄存器。为隐含的被除数寄存器。 * AL (AX) 为隐含的商寄存器。为隐含的商寄存器。 * AH (DX) 为隐含的余数寄存器。为隐含的余数寄存器。 * SRC不能为立即数。不能为立即数。 * 对所有条件标志位均无定义。对所有条件标志位均无定义。如何判别结果有效?如何判别结果有效? 请参看教材请参看教材P.66-P.67例

46、:例:x , y , z , v 均为均为16位带符号数,计算位带符号数,计算 ( v - ( x*y + z 540 ) ) / xMOV AX, X MOV AX, X IMUL Y ; xIMUL Y ; x* *y y (DX,AXDX,AX)MOV CX, AXMOV CX, AXMOV BX, DXMOV BX, DXMOV AX, ZMOV AX, ZCWD CWD ;Z Z (DXDX,AXAX)ADD CX, AXADD CX, AXADC BX, DX ; xADC BX, DX ; x* *y+z y+z (BXBX,CXCX)SUB CX, 540 SUB CX, 54

47、0 SBB BX, 0 ; xSBB BX, 0 ; x* *y+z-540y+z-540MOV AX, VMOV AX, VCWD CWD ;V V (DXDX,AXAX)SUB AX, CXSUB AX, CXSBB DX, BX ; v-(xSBB DX, BX ; v-(x* *y+z-540)y+z-540)IDIV X ; (v-(xIDIV X ; (v-(x* *y+z-540)/xy+z-540)/x(AXAX) 余数余数 (DXDX) 十进制调整指令十进制调整指令BCD码:用二进制编码的十进制数码:用二进制编码的十进制数,又称又称二二-十进制数十进制数压缩的压缩的BCD码:

48、用码:用 4 位二进制数表示位二进制数表示 1 位十进制数位十进制数 例:例:( 59 )10 ( 0101 1001 )BCD非压缩的非压缩的BCD码:用码:用 8 位二进制数表示位二进制数表示 1 位十进制数位十进制数 例:例:( 59 )10 ( 0000 0101 0000 1001 )BCD数字的数字的 ASCII 码是一种码是一种 非压缩的非压缩的 BCD 码码 DIGIT ASCII BCD030H0011 0000131H0011 0001232H0011 0010 939H0011 1001 UNPAK 00H 09H 05H 03H例:写出例:写出( 3590 )10的压缩

49、的压缩 BCD 码和非压缩码和非压缩BCD码,并分码,并分 别别 把它们存入数据区把它们存入数据区 PAKED 和和 UNPAK压缩压缩BCD:( 3590 )10( 0011 0101 1001 0000 )BCD非压缩非压缩BCD: ( 3590 )10( 00000011 00000101 00001001 00000000 )BCD PAKED 90H 35H问题的提出:问题的提出:十进制调整指令十进制调整指令19 压缩压缩BCD: 0001 1001 27 0010 0001 + 110 + 08 + 0000 1000 (0010 0111)BCD AF=1(1)压缩的)压缩的BC

50、D码调整指令码调整指令 DAA 加法的十进制调整指令加法的十进制调整指令 DAS 减法的十进制调整指令减法的十进制调整指令 (2)非压缩的)非压缩的BCD码调整指令(了解)码调整指令(了解) AAA 加法的加法的ASCII码调整指令码调整指令 AAS 减法的减法的ASCII码调整指令码调整指令 AAM 乘法的乘法的ASCII码调整指令码调整指令 AAD 除法的除法的ASCII码调整指令码调整指令压缩压缩BCD运算举例:运算举例:(1) MOV AL, BCD1 ; BCD1=34H ADD AL, BCD2 ; BCD2=59H, (AL)=8DH DAA ; 8DH+06H=93H MOV

51、BCD3, AL ; BCD3=93H(2) MOV AL, BCD1 ; BCD1=34H SUB AL, BCD2 ; BCD2=59H , (AL)=0DBH DAS ; 0DBH60H06H=75H MOV BCD3, AL ; BCD3= 75 = - 25 (10n补码)补码)非压缩非压缩BCD运算举例:运算举例:(1) MUL BL ; (AX)=(AL)(BL)=08 09 AAM ; (AL)/0AH= 48H /0AH 0702(2)AAD ; (AX) (AH) 0AH+(AL)=48H DIV BL ; (AL) = (AX)/(BL)=48H/4=12H AAM ;

52、(AL)/0AH=12H/0AH=0108第第3章作业章作业Page 109 3.14 3.17 逻辑指令:逻辑指令: 逻辑运算指令逻辑运算指令 AND、OR、NOT、XOR、TEST 移位指令移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR 请参看教材请参看教材P.68下下 请参看教材请参看教材P.68下下逻辑非指令:逻辑非指令:NOT OPR * OPR不能为立即数不能为立即数执行操作:执行操作: (OPR) (OPR) * 不影响标志位不影响标志位 逻辑与指令:逻辑与指令:AND DST, SRC执行操作:执行操作: (DST) (DST) (SRC)逻辑

53、或指令:逻辑或指令:OR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)异或指令:异或指令: XOR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)测试指令:测试指令: TEST OPR1, OPR2执行操作:执行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置 逻辑运算指令逻辑运算指令 请参看教材请参看教材P.69至少有一个操作数必须存放在寄存器中,另一个操作数可以使用任意寻址方式,只有源操作数可以为立即数例:屏蔽例:屏蔽AL的第的第0、1两位两位 AN

54、D AL, 0FCH例:置例:置AL的第的第5位为位为1 OR AL, 20H 例:使例:使AL的第的第0、1位变反位变反 XOR AL, 3例:测试某些位是例:测试某些位是0是是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * * * * * AND 0 0 0 0 0 0 0

55、1 0 0 0 0 0 0 0 * 请参看教材请参看教材P.69-P.69的例题的例题 CF 0逻辑左移逻辑左移 SHL OPR, CNT逻辑右移逻辑右移 SHR OPR, CNT算术左移算术左移 SAL OPR, CNT(同逻辑左移)(同逻辑左移)算术右移算术右移 SAR OPR, CNT 0 CFCF 4. 移位指令移位指令循环左移循环左移 ROL OPR, CNT循环右移循环右移 ROR OPR, CNT带进位循环左移带进位循环左移 RCL OPR, CNT带进位循环右移带进位循环右移 RCR OPR, CNTCF CFCFCF注意注意: * OPR可用除立即数以外的任何寻址方式可用除立

56、即数以外的任何寻址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以以SHL为例为例* 条件标志位:条件标志位: CF = 移入的数值移入的数值 1 CNT=1时,最高有效位的值发生变化时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变时,最高有效位的值不变 移位指令:移位指令: SF、ZF、PF 根据移位结果设置,根据移位结果设置,AF无定义无定义 循环移位指令:循环移位指令: 不影响不影响 SF、ZF、PF、AFOF = 请参看教材请参看教材P.73下下 请参看教材请参看教材P.74-P.75的例题的例题例:例:(AX

57、)= 0012H,(BX)= 0034H,把它们装配成,把它们装配成(AX)= 1234H 例:例:(BX) = 84F0H (1) (BX) 为无符号数,求为无符号数,求 (BX) / 2 SHR BX, 1SHR BX, 1 ; (BX) = 4278H; (BX) = 4278H (2) (BX) 为带符号数,求为带符号数,求 (BX) 2 SAL BX, 1SAL BX, 1 ; (BX) = 09E0H, OF=1; (BX) = 09E0H, OF=1 (3) (BX) 为带符号数,求为带符号数,求 (BX) / 4 MOV CL, 2 MOV CL, 2 SAR BX, CL ;

58、 (BX) = 0E13CH SAR BX, CL ; (BX) = 0E13CHMOV CL, 8MOV CL, 8ROL AX, CLROL AX, CLADD AX, BXADD AX, BX 0000 (SP)MOV CH, 4 ; MOV CH, 4 ; 循环次数循环次数MOV CL, 4 ; MOV CL, 4 ; 移位次数移位次数NEXT: NEXT: ROL BX, CLROL BX, CLMOV AX, BXMOV AX, BXAND AX, 0FHAND AX, 0FHPUSH AXPUSH AXDEC CHDEC CHJNZ NEXTJNZ NEXT00080004000

59、F(3) (BX)=84F0H(BX)=84F0H,把把 (BX)(BX) 中的中的 16 16 位数每位数每 4 4 位压入堆栈位压入堆栈3.3.4 串处理指令:串处理指令: 设置方向标志指令设置方向标志指令 CLD、STD 串处理指令串处理指令 串重复前缀串重复前缀 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW 请参看教材请参看教材P.75与与 REP 配合工作的配合工作的 MOVS / STOS / LODS REP 执行操作:执行操作

60、:(1) 如如 (CX)=0 则退出则退出 REP,否则转,否则转(2)(2) (CX) (CX) -1(3) 执行执行 MOVS / STOS / LODS(4) 重复重复 (1) (3)MOVS 串传送指令:串传送指令:MOVS DST, SRCMOVSB (字节)(字节)MOVSW (字)(字)例:例:MOVS ES: BYTE PTR DI, DS: SI 执行操作:执行操作: (1) (DI) (SI) (2) 字节操作:字节操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)2 方向标志方向标志 DF=0 时用时用 + ,DF=1

温馨提示

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

最新文档

评论

0/150

提交评论