微机原理与接口技术_第3章_指令系统_第1页
微机原理与接口技术_第3章_指令系统_第2页
微机原理与接口技术_第3章_指令系统_第3页
微机原理与接口技术_第3章_指令系统_第4页
微机原理与接口技术_第3章_指令系统_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 8086/80888086/8088指令系统指令系统 3.1 8086/8088指令格式与寻址方式指令格式与寻址方式 3.2 数据传送类指令数据传送类指令 3.3 算数运算类指令算数运算类指令 3.4 逻辑运算与移位指令逻辑运算与移位指令 3.5 串操作类指令串操作类指令 3.6 控制转移类指令控制转移类指令 3.7 标志处理和处理器控制类指令标志处理和处理器控制类指令 3.1 8086/80883.1 8086/8088指令格式与寻址方式指令格式与寻址方式 机器指令机器指令 操作码操作码 地址码地址码操作数或操作数的地址操作数或操作数的地址 表示该指令所要完成的操作表示该指令

2、所要完成的操作 都是二进制代码都是二进制代码 汇编语言:符号化了的机器语言,用助记符代替机汇编语言:符号化了的机器语言,用助记符代替机 器语言的二进制代码。器语言的二进制代码。 2. 8086/80882. 8086/8088汇编语言指令汇编语言指令 标号:标号:指令助记符指令助记符操作数操作数;注释;注释 , az、AZ、09或某些特殊符号(或某些特殊符号(,-,?),?) 第一个字符必须是字母或某些特殊符号(第一个字符必须是字母或某些特殊符号(,-,?),?) ?不能单独使用?不能单独使用 标识符有效长度为标识符有效长度为31个字符个字符 标识符:标识符: 例:例: MOV AL,80H

3、3.1.2 3.1.2 指令的寻址方式指令的寻址方式 指令的寻址方式指令的寻址方式 顺序寻址方式顺序寻址方式 跳转寻址方式跳转寻址方式 3.1.3 8086/80883.1.3 8086/8088操作数的寻址方式操作数的寻址方式 1. 立即数寻址立即数寻址 操作数就包含在指令当中操作数就包含在指令当中 MOV AL,80H ;将十六进制数;将十六进制数80H送入送入AL MOV AX,1090H ;将;将1090H送入送入AX 源操作数源操作数目的操作数目的操作数 例:例: 立即数可以是立即数可以是8位、位、16位位 立即数只能是整数,不能是小数、变量或其它类型的数据立即数只能是整数,不能是小

4、数、变量或其它类型的数据 立即数只能作为源操作数立即数只能作为源操作数 2. 2. 寄存器寻址寄存器寻址 操作数在操作数在8位、位、16位(或位(或32位)通用寄存器中位)通用寄存器中 寄存器可以是寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP AH、AL、BH、BL、CH、CL、DH、DL 在一条指令中,可以对源操作数采用寄存器寻址,也可以在一条指令中,可以对源操作数采用寄存器寻址,也可以 对目标操作数采用寄存器寻址,还可以两者都采用寄存器寻址对目标操作数采用寄存器寻址,还可以两者都采用寄存器寻址 方式方式 INC CX ;将;将CX的内容加的内容加1 ROL AH,1 ;将;将

5、AH中的内容循环左移一位中的内容循环左移一位 MOV AX,BX MOV AX,1090H 例:例: 386以上以上 3. 存储器寻址 存储器寻址存储器寻址 直接寻址直接寻址 寄存器间接寻址寄存器间接寻址 寄存器相对寻址寄存器相对寻址 基址变址寻址基址变址寻址 相对基址变址寻址相对基址变址寻址 操作数的操作数的逻辑地址逻辑地址包含在指令中包含在指令中 (1 1)直接寻址)直接寻址 例:例: MOV AX,1070H ;DS段的段的1070H和和1071H两单元的内容传送到两单元的内容传送到AX中中 假设假设DS=5000H,地址为,地址为51070H字存储单元字存储单元 的内容是的内容是678

6、9H。 注意:立即数寻址和直接寻址的书写格式,注意:立即数寻址和直接寻址的书写格式, 直接寻址的地址要放在方括号中直接寻址的地址要放在方括号中 1070H + 存储器存储器 代码段代码段 数据段数据段 10 70 OP 50000H . 67 89 . 00000H DS16 50000H 6789 AX AH AL 51070H 物理地址物理地址 51070H 51071H 由地址加由地址加 法器完成法器完成 例:例: MOV AX,VALUE 或或 MOV AX,VALUE 符号地址符号地址 (2 2) 寄存器间接寻址寄存器间接寻址 操作数在存储器中,操作数的逻辑地址由操作数在存储器中,操

7、作数的逻辑地址由寄存器寄存器提供提供 寄存器的内容是段内的偏移地址。寄存器的内容是段内的偏移地址。 BX、BP、SI、 DI 之一之一 注:如果没有特殊说明,用寄存器注:如果没有特殊说明,用寄存器SI、DI和和BX间接寻址时,间接寻址时, 对应的段寄存器是对应的段寄存器是DS。如果用寄存器。如果用寄存器BP间接寻址时,间接寻址时, 对应的段寄存器是对应的段寄存器是SS 。 例例1: MOV AX,SI 假设(假设(DS)=5000H,(,(SI)=1234H 则:源操作数的物理地址是则:源操作数的物理地址是51234H 再假设再假设51234H字单元的内容是字单元的内容是6789H, 执行该条

8、指令后(执行该条指令后(AX)=6789H 例例2: MOV BP,CX 假设(假设(SS)=4000H,(,(BP)=1234H,(,(CX)=6789H 则:目的操作数的物理地址为则:目的操作数的物理地址为41234H (SS)16 + (BP)=41234H 执行该条指令后(执行该条指令后(41234)=89H,(,(41235)=67H 8位位移量位位移量 16位位移量位位移量 (3 3) 寄存器相对寻址寄存器相对寻址 带位移量的寄存器间接寻址带位移量的寄存器间接寻址 逻辑地址逻辑地址= BX BP SI DI + 再假设再假设548ACH字字存储单元的内容是存储单元的内容是55AAH

9、 那么,执行该指令后,(那么,执行该指令后,(AX)=55AAH 例:例: MOV AX,DI+1234H 假设(假设(DS)=5000H,(,(DI)=3678H 则:源操作数的物理地址是则:源操作数的物理地址是548ACH 50000H 3678H 1234H 548ACH + 带位移量的寄带位移量的寄 存器间接寻址存器间接寻址 MOV AX,1234HDI 另一种书写格式另一种书写格式 BX、BP和和SI、DI寄存器组合起来进行间接寻址寄存器组合起来进行间接寻址 有效地址有效地址EA (逻辑地址)(逻辑地址) BX BP + SI DI 一个基址寄存器的一个基址寄存器的 内容加上一个变址

10、内容加上一个变址 寄存器的内容。寄存器的内容。 = (4 4) 基址变址寻址基址变址寻址 例:例: MOV AX,BX+SI 假设假设(DS)=1000H,(,(BX)=5000H,(,(SI)=2000H 则:有效地址为:则:有效地址为:7000H(BX)+(SI) 物理地址为:物理地址为:17000H(DS)*16+有效地址有效地址 语句执行后(语句执行后(17000H)和()和(17001H)AX (5 5) 相对基址变址寻址相对基址变址寻址 MOV AX,MASKBXSI MOV BH,4DIBP MOV BH,BP+DI+4 例:例: 基址变址寻址加上一个相对位移量基址变址寻址加上一

11、个相对位移量 综合练习综合练习 假设:假设:BX=0158H,DI=10A5H,位移量,位移量=1B57H,DS=2100H 指令没有使用前缀。指令没有使用前缀。 直接寻址:有效地址直接寻址:有效地址= 物理地址物理地址= 1B57H 21000H+1B57H=22B57H 寄存器间接寻址(寄存器为寄存器间接寻址(寄存器为BX):): 有效地址有效地址= 物理地址物理地址= 0158H 21000H+0158H=21158H BX寄存器相对间接寻址:寄存器相对间接寻址: 有效地址有效地址= 物理地址物理地址= 0158H+1B57H=1CAFH 21000H+1CAFH=22CAFH 综合练习

12、综合练习 假设:假设:BX=0158H,DI=10A5H,位移量,位移量=1B57H,DS=2100H 指令没有使用前缀。指令没有使用前缀。 10A5H 21000H+10A5H=220A5H 10A5H+1B57H=2BFCH 21000H+2BFCH=23BFCH 0158H+10A5H=11FDH 21000H+11FDH=221FDH 变址寻址:变址寻址: 有效地址有效地址= 物理地址物理地址= (DI) DI寄存器相对变址寻址:寄存器相对变址寻址: 有效地址有效地址= 物理地址物理地址= 基址加变址的寻址(基址加变址的寻址(BX为基址寄存器,为基址寄存器,DI为变址寄存器)为变址寄存

13、器) 有效地址有效地址= 物理地址物理地址= 相对基址加变址的寻址相对基址加变址的寻址 (BX为基址寄存器,为基址寄存器,DI为变址寄存器)为变址寄存器) 0158H+10A5H+1B57H=2D54H 21000H+2D54H=23D54H 综合练习综合练习 有效地址有效地址= 物理地址物理地址= 假设:假设:BX=0158H,DI=10A5H,位移量,位移量=1B57H,DS=2100H 指令没有使用前缀。指令没有使用前缀。 通用寄存器 AX、BX、CX、DX BP、SP、SI、DI 段寄存器 CS、 DS、ES、SS 存储器 立即数 MOV指令数据传送方向示意图指令数据传送方向示意图 C

14、S不能做目不能做目 的操作数的操作数 3.2 3.2 数据传送类指令数据传送类指令 格式:格式: MOV OPRD1,OPRD2 目的目的源源 功能:把一个字节或一个字从源操作数功能:把一个字节或一个字从源操作数PORD2送至送至 目的操作数目的操作数OPRD1,源操作数不改变。,源操作数不改变。 注意:源和目的操作数的类型要一致,即同时为字节或同时为字注意:源和目的操作数的类型要一致,即同时为字节或同时为字 段寄存器段寄存器 CS、 DS、ES、SS 立即数立即数 存储器存储器 通用寄存器通用寄存器 AX、BX、CX、DX BP、SP、SI、DI IP 例:例: MOV AX,1000H M

15、OV AL,E MOV AX,2BPSI ;立即数送到;立即数送到AX ;立即数送到;立即数送到AL,E的的ASCII码码 ;存储单元的内容送到;存储单元的内容送到AX (SS) 16 + (BP)+(SI)+2 如果如果BP换成换成BX? 判断对错判断对错 MOV 5,AL MOV BX,SI MOV DS,1000H MOV CS,AX MOV AX,DX MOV SI,SI MOV SI,AX 3. 2.2 3. 2.2 交换传送指令(交换传送指令(XCHGXCHG) 格式:格式:XCHG OPRD1,OPRD2 功能:操作数功能:操作数OPRD1的内容与操作数的内容与操作数OPRD2的

16、内容交换的内容交换 例:例:XCHG AL,AH XCHG SI,BX XCHG AL ,SI+3 XCHG DI+BX+3,DX OPRD1和和OPRD2可以是通用寄存器和存储单元(两个操作数不可以是通用寄存器和存储单元(两个操作数不 能同时为存储单元)可以采用除立即数以外的各种寻址方式能同时为存储单元)可以采用除立即数以外的各种寻址方式 主程序主程序 子程序子程序1子程序子程序2 CS:IP CS:IP 需要一个具有需要一个具有 “后进先出后进先出” 特性的存储特性的存储 区域来保护断点区域来保护断点 堆栈堆栈 3. 2.3 3. 2.3 堆栈指令堆栈指令 假设:假设:SS=5000H,S

17、P=2000H 00000H 52000H FFFFFH 格式:格式: PUSH OPRD 功能:功能:SP-2,把源操作数把源操作数 OPRD 的的16位数位数 据压入堆栈据压入堆栈 例:例:AX=8A9BH 执行执行 PUSH AX SP自动减自动减2 将将AX的内容传送到的内容传送到 SP指向的单元指向的单元 一段一段RAM区域区域 堆栈段堆栈段 50000H 段开始地址段开始地址 SP 栈底栈底 SP 00000H 52000H FFFFFH 51FFEH 51FFFH 500000H 执行执行PUSH AX后后 9B 8A 格式:格式:POP OPRD 功能:从堆栈中弹出功能:从堆栈

18、中弹出 16位数据到目位数据到目 的操作数的操作数OPRD , SP自动加自动加2 2. 出栈指令出栈指令POP可以是通用寄存器、段寄存器可以是通用寄存器、段寄存器 (CS除外)和字存储单元除外)和字存储单元 SP 00000H 52000H FFFFFH 51FFEH 51FFFH 500000H 执行执行POP BX前前 9B 8A执行指令执行指令 POP BX 执行后执行后BX=8A9BH SP自动加自动加2,指向新的栈顶,指向新的栈顶 SP 00000H 52000H FFFFFH 51FFEH 51FFFH 500000H 执行执行POP BX后后 BX 3.2.4 3.2.4 有效

19、地址传送指令有效地址传送指令 格式:格式:LEA REG,OPRD 16位的通用寄存器位的通用寄存器 功能:把操作数的有效功能:把操作数的有效地址地址传送到操作数传送到操作数REG寄存器寄存器 例:例:LEA AX,2728H ; 执行后,执行后,AX=2728H LEA BX,BP+SI ;指令执行后,;指令执行后,BX的内容为的内容为 BP+SI的值的值 注意:注意:LEA 和和 MOV 的区别的区别 格式:格式:XLAT 功能:完成一个字节的查表转换。功能:完成一个字节的查表转换。 把累加器把累加器AL中的值,转换成以中的值,转换成以BX为表基址的表中值为表基址的表中值 执行后执行后AL

20、=30H MOV BX,2000H MOV AL,3 XLAT 10H 00H 78H 02H 12H 19H 30H 24H 79H 40H 例:假设七段码存放在例:假设七段码存放在 2000H开始的内存中,开始的内存中, 取出取出3所对应的七段码所对应的七段码 (程序片段如下)(程序片段如下) 2000H 2009H9 . . . 5 4 3 2 1 0 BX+AL BX+1 BX+0 换码指令的功能换码指令的功能 AL 七段数码管七段数码管 判断对错:判断对错: PUSH AL POP CS XCHG DS,BX XCHG BX,SI POP BH XCHG AX,1234H 3.2.6

21、 3.2.6 标志寄存器传送指令标志寄存器传送指令 格式:格式: LAHF 功能:把标志寄存器的低功能:把标志寄存器的低8位对应的传送到寄存器位对应的传送到寄存器AH OFDFIFTFSFZFAF PFCFFR AH 格式:格式:SAHF 功能:把寄存器功能:把寄存器AH的内容对应的送至标志寄存器的低的内容对应的送至标志寄存器的低8位位 OFDFIF TFSFZFAF PFCFFR AH 格式:格式:PUSHF 功能:功能: SP-2 ,把标志寄存器的内容(,把标志寄存器的内容(16位)压入堆栈位)压入堆栈 格式:格式: POPF 功能:把当前栈顶的一个功能:把当前栈顶的一个字字传送到标志寄存

22、器,传送到标志寄存器,SP+2 MOV AH,0C1H 例:例: AH SF ZF AF PF CF 11000001 11000001 SAHF FR的低的低8位位 3.2.6 3.2.6 标志寄存器传送指令标志寄存器传送指令 3.2.7 3.2.7 输入输入/ /输出数据传送指令输出数据传送指令 格式:格式: IN 累加器,端口地址累加器,端口地址 功能:从一个端口读取一个字节或一个字,传送到功能:从一个端口读取一个字节或一个字,传送到AL或或AX 端口地址可以直接给出端口地址可以直接给出 或由或由DX寄存器间接给出寄存器间接给出 例:例: IN AL,50H ;将;将50H端口的字节读入

23、端口的字节读入AL IN AX,70H ;将;将70H、71H两端口的值读入两端口的值读入AX IN AL,DX ;从;从DX所指的端口中读取一个字节所指的端口中读取一个字节 IN AX,DX ;从;从DX和和DX+1所指的两个端口读取一个字所指的两个端口读取一个字 注意:外部设备最多可有注意:外部设备最多可有65536个个I/O端口(端口(0000FFFFH),), 只有前只有前256个端口可在指令中直接给出(个端口可在指令中直接给出(00FFH) 直接寻址 或长格式 间接寻址或短格式间接寻址或短格式 格式:格式: OUT 端口地址,累加器端口地址,累加器 功能:将功能:将AL中的一个字节或

24、中的一个字节或AX中的一个字输出到指定端口中的一个字输出到指定端口 例:例: OUT 70H , AL OUT DX , AL 传送类指令不影响标志位传送类指令不影响标志位 判断对错:判断对错: OUT 258,AL OUT DX,BL IN AL,1234H IN AL,BH OUT 120,AL OUT DX,AL IN AL,80H IN AL,DX 3.3 3.3 算术运算类指令算术运算类指令 格式:格式: ADD OPRD1,OPRD2 功能:两个操作数相加,结果送至目的操作数功能:两个操作数相加,结果送至目的操作数OPRD1 例:例: ADD AL,50H ;AL的内容和的内容和5

25、0H相加,结果相加,结果AL中中 ADD CX,1000H ;CX的内容和的内容和1000H相加,结果放在相加,结果放在CX中中 ADD DI,SI ;DI和和SI的内容相加,结果放在的内容相加,结果放在DI中中 ADD BX+DI,AX ;BX+DI和和BX+DI+1两个存储单元和两个存储单元和AX 相加,结果放在相加,结果放在BX+DI和和BX+DI+1所所 指的存储单元中指的存储单元中 ADD AX,BX+2000H;BX+2000H和和BX+2001H所指的两个单元所指的两个单元 的内容和的内容和AX的内容相加,结果在的内容相加,结果在AX中中 格式:格式: ADC OPRD1,OPR

26、D2 功能:两个操作数相加再加上进位标志功能:两个操作数相加再加上进位标志CF,结果送至目,结果送至目 的操作数的操作数OPRD1 MOV SI,2000H ;第一个数的首址;第一个数的首址 MOV DI,3000H ;第二个数的首址;第二个数的首址 MOV AX,SI ;第一个数的低;第一个数的低16位取到位取到AX ADD AX,DI ;两个数的低;两个数的低16位相加位相加 MOV SI,AX ;低;低16位相加的结果送到位相加的结果送到2000H字单元字单元 MOV AX,SI+2 ;取第一个数的高;取第一个数的高16位到位到AX中中 ADC AX,DI+2 ;两个高;两个高16位数相

27、加,再加位数相加,再加CF MOV SI+2,AX ;高;高16位的结果送到位的结果送到2002H和和2003H单元单元 例:将两个四字节的无符号数相加,两例:将两个四字节的无符号数相加,两 个数分别放在个数分别放在2000H、3000H开始的单开始的单 元,要求结果放在元,要求结果放在2000H开始的单元开始的单元 MOV DI,2000H MOV SI,3000H MOV AX,SI ADD DI,AX MOV AX,SI+2 ADC DI+2,AX MOV DI,2000H MOV SI,3000H MOV AX,SI ADD DI,AX ADD SI,2 ADD DI,2 MOV AX

28、,SI ADC DI,AX POPF PUSHF 格式:格式: INC OPRD 功能:操作数功能:操作数OPRD的内容加的内容加1,结果送回,结果送回OPRD 该指令结果不影响进位标志该指令结果不影响进位标志CF,影响其它的五个状态标志,影响其它的五个状态标志 例:例: INC AL ;AL的内容加的内容加1 INC CX ;CX的内容加的内容加1 INC BX ;存储单元的内容加;存储单元的内容加1 ;该指令有问题?该指令有问题? 通用寄存器、通用寄存器、 存储器存储器 3.3.2 3.3.2 减法指令减法指令 1. 减法指令减法指令SUB 格式:格式: SUB OPRD1,OPRD2 功

29、能:功能: 目的操作数减去源操作数,结果送到目的标操作目的操作数减去源操作数,结果送到目的标操作 数,源操作数不变数,源操作数不变 执行结果影响标志寄存器执行结果影响标志寄存器 2. 带借位的减法指令带借位的减法指令SBB 格式:格式: SBB OPRD1,OPRD2 功能:操作数功能:操作数OPRD1减去操作数减去操作数OPRD2的同时还要减去的同时还要减去 借位(进位)标志借位(进位)标志CF的现行值的现行值 执行结果影响标志寄存器执行结果影响标志寄存器 格式:格式:DEC OPRD 功能:操作数功能:操作数OPRD的内容减的内容减1,并把结果送回,并把结果送回OPRD 执行结果不影响执行

30、结果不影响CF,但影响其它五个状态标志,但影响其它五个状态标志 格式:格式:NEG OPRD 功能:对操作数取补码,将结果送回操作数功能:对操作数取补码,将结果送回操作数OPRD中中 实际上是用零减实际上是用零减 去操作数去操作数 执行结果影响状态标志执行结果影响状态标志 格式:格式: CMP OPRD1,OPRD2 功能:功能: 操作数操作数OPRD1减去减去OPRD2,运算结果不送,运算结果不送 到到OPRD1但影响状态标志但影响状态标志 注意:两个操作数本身都没有发生变化注意:两个操作数本身都没有发生变化 3.3.3 3.3.3 乘法和除法指令乘法和除法指令 格式:格式: MUL OPR

31、D 功能:如果功能:如果OPRD是字节操作数,则是字节操作数,则AL的内容与的内容与OPRD相乘相乘 16位结果送到位结果送到AX中。中。 如果如果OPRD是字操作数,则是字操作数,则AX的内容与的内容与OPRD相乘相乘 32位的结果送到位的结果送到DX和和AX中,中,DX中是高中是高16位,位,AX中中 是低是低16位位 如果乘积结果的高半部分(字节相乘时为如果乘积结果的高半部分(字节相乘时为AH,字相乘时,字相乘时 为为DX)不等于零,则标志)不等于零,则标志CF=1,OF=1;否则;否则CF=0, OF=0,对其它标志,该指令无定义,对其它标志,该指令无定义 所以,如果所以,如果CF=0

32、,OF=0,表示,表示AH或或DX中的结果数无效。中的结果数无效。 有符号数乘法指令有符号数乘法指令 例: 假设(AL)=0B4H,(BL)=11H 求执行MUL BL的乘积值 求执行IMUL BL 的乘积值 无符号数: (AL)=0B4H=190D (BL)=11H=17D 190D 17D 3060D 3060D=0BF4H 执行 MUL BL 后 (AX)=0BF4H AH0 CF=OF=1 有符号数: (AL)=0B4H= -76D (BL)=11H=17D -76D 17D -1292D -1292D=0FAF4H 执行 IMUL BL 后 (AX)=0FAF4H (AH)不是符号扩

33、展 CF=OF=1 0B4H=10110100B 取补码=4CH = - 76D -1292D= -10100001100B =0FAF4H(补码) 除法指令除法指令DIVDIV(IDIVIDIV) 格式:格式: DIV OPRD 功能:如果功能:如果OPRD是字节操作数,则是字节操作数,则AX的内容除以的内容除以OPRD 8位的商送到位的商送到AL中。中。8位余数送到位余数送到AH中中 如果如果OPRD是字操作数,则是字操作数,则DX中(高中(高16位)和位)和AX中中 (低(低16位)的内容除以位)的内容除以OPRD,16位的商送到位的商送到AX中。中。 16位的余数送到位的余数送到DX中

34、。中。 除法指令对标志位的影响无定义除法指令对标志位的影响无定义 注意:如果除数为注意:如果除数为0,或者,或者8位数除时商超过位数除时商超过8位,或者位,或者 16位除时商超过位除时商超过16位,则认为是溢出,引起位,则认为是溢出,引起0号中断号中断 有符号数除法指令有符号数除法指令 商超过商超过16位怎位怎 么办?么办? 5. 5. 符号扩展指令符号扩展指令 格式:格式:CBW 功能:寄存器功能:寄存器AL中的符号扩展到寄存器中的符号扩展到寄存器AH。若。若AL 的最高有效位为的最高有效位为0,则,则AH=0,否则,否则AH=0FFH 格式:格式: CWD 功能:寄存器功能:寄存器AX中的

35、符号扩展到寄存器中的符号扩展到寄存器DX。若。若AX 的最高有效位为的最高有效位为0,则,则DX=0,否则,否则DX=0FFFFH 例:计算表达式的值:例:计算表达式的值: (X*Y+Z1024)/75 假设其中的假设其中的X、Y、Z均为均为16位带符号数,分别放在名位带符号数,分别放在名 为为XXX、YYY、ZZZ的变量单元中。的变量单元中。 MOV AX,XXX IMUL YYY ;计算;计算X*Y(结果在结果在DX,AX中)中) MOV CX,AX MOV BX,DX ;积保存到;积保存到BX:CX中中 MOV AX,ZZZ CWD ;把;把AX扩展为扩展为32位(扩展到位(扩展到DX)

36、 ADD AX,CX ADC DX,BX SUB AX,1024 ;计算差;计算差 SBB DX,0 ;减借位;减借位 MOV CX,75 IDIV CX ;计算商和余数;计算商和余数 结果商保存在结果商保存在AX中,余数保存在中,余数保存在DX中中 X*Y的值的值 DX:AX是是Z值值 3.4 3.4 逻辑运算和位移指令逻辑运算和位移指令 1. 逻辑逻辑“与与”指令指令AND 格式:格式: AND OPRD1,OPRD2 功能:两个操作数进行按位的逻辑功能:两个操作数进行按位的逻辑“与与”运算,结果送到运算,结果送到 目的操作数目的操作数OPRD1,CF=0,OF=0 结果影响结果影响ZF、

37、SF、PF 例例1: 1010 1001 0101 1110 0000 1000 AND AND AL,AL CF=0 OF=0 例例2: 2. 2. 逻辑逻辑“或或”指令指令OROR 格式:格式: OR OPRD1,OPRD2 功能:两个操作数进行按位的逻辑功能:两个操作数进行按位的逻辑“或或”运算,结果送到运算,结果送到 目的操作数目的操作数OPRD1,CF=0,OF=0 结果影响结果影响ZF、SF、PF 格式:格式: NOT OPRD 功能:把操作数功能:把操作数OPRD按位取反,结果送回按位取反,结果送回OPRD 对标志没有影响对标志没有影响 4. 4. 逻辑逻辑“异或异或”指令指令X

38、ORXOR 格式:格式:XOR OPRD1,OPRD2 功能:两个操作数进行按位的逻辑功能:两个操作数进行按位的逻辑“异或异或”运算,结果送到运算,结果送到 目的操作数目的操作数OPRD1,CF=0,OF=0 结果影响结果影响ZF、SF、PF 格式:格式:TEST OPRD1,OPRD2 功能:两个操作数进行按位的逻辑功能:两个操作数进行按位的逻辑“与与”运算,结果运算,结果不送不送到到 目的操作数目的操作数OPRD1,仅仅影响标志位,仅仅影响标志位 通常用于检测某位是否为通常用于检测某位是否为1,但又不改变原来值的场合,但又不改变原来值的场合 1、检查、检查AL中的中的D6位或位或D2位是否

39、有一位为位是否有一位为1 TEST AL,01000100B 执行指令后,如果执行指令后,如果6、2位都为位都为0,ZF=1,否则,否则ZF=0 TEST AL,44H 例:例: 2、要求屏蔽、要求屏蔽AL寄存器中的第寄存器中的第6位和第位和第4位位 AND AL,0AFH 10101111B 3、要求、要求AL寄存器中的第寄存器中的第0位和第位和第1位变反位变反 XOR AL,03H 00000011B 3.4.2 3.4.2 移位指令移位指令 格式:格式:SAL OPRD,m ;算术左移指令;算术左移指令 SHL OPRD,m ;逻辑左移指令;逻辑左移指令 SAR OPRD,m ;算术右移

40、指令;算术右移指令 SHR OPRD,m ;逻辑右移指令;逻辑右移指令 功能:操作数左或右移功能:操作数左或右移m位位 0 CF高高 低低 操作数操作数 CF 高高 低低 算术右移算术右移SAR CF 高高 低低 0 逻辑右移逻辑右移SHR Shift Arithmetic Left SHift logic Right m为为1或为或为CL 当要移多位时,移位位数当要移多位时,移位位数 需存放在需存放在CL寄存器中。寄存器中。 Debug貌似不行貌似不行 ROL OPRD,m ;循环左移指令;循环左移指令 ROR OPRD,m ;循环右移指令;循环右移指令 RCL OPRD,m ;带进位循环左

41、移指令;带进位循环左移指令 RCR OPRD,m ;带进位循环右移指令;带进位循环右移指令 格式:格式: 功能:操作数左或右循环移功能:操作数左或右循环移m位,位,m是是 移位位数,为移位位数,为1或为或为CL,当要,当要 移多位时,移位位数需存放在移多位时,移位位数需存放在 CL寄存器中。寄存器中。 CF 高高 低低 循环左移指令循环左移指令ROL CF 高高 低低 循环右移指令循环右移指令ROR CF 高高 低低 带进位循环左移指令带进位循环左移指令RCL 高高 低低 CF 带进位循环右移指令带进位循环右移指令RCR 只影响标志只影响标志CF和和OF Rotate Right(lift)

42、例:不用乘法指令,用移位指令编程实现例:不用乘法指令,用移位指令编程实现 AL寄寄 存器的内容乘以存器的内容乘以10(假设结果仍然是(假设结果仍然是8位)位) SAL AL ,1 ;AL中的数左移中的数左移1位(位(2) MOV BL ,AL MOV CL ,2 SAL AL ,CL ;AL中的数再左移中的数再左移2位(位(8) ADD AL ,BL ;AL中的数中的数10 3.5 3.5 串操作类指令串操作类指令 字符串:字符的一个序列字符串:字符的一个序列 字符串操作的几点说明:字符串操作的几点说明: 由变址寄存器由变址寄存器SI指向源操作数(串)指向源操作数(串) 由变址寄存器由变址寄存

43、器DI指向目的操作数(串)指向目的操作数(串) 规定源串放在当前数据段中,目的串放在当前附加段中规定源串放在当前数据段中,目的串放在当前附加段中 即:即:DS:SI 指向源串指向源串 ES:DI 指向目的串指向目的串 3.5.1 3.5.1 重复前缀重复前缀 格式:格式:REP 串操作指令串操作指令 功能:重复后面的串操作指令,(功能:重复后面的串操作指令,(CX)次)次 REP 后面一般跟后面一般跟 MOVS或或STOS 格式:格式:REPZ 串操作指令串操作指令 或或 REPE 串操作指令串操作指令 功能:重复后面的串操作指令,每重复一次功能:重复后面的串操作指令,每重复一次CX1,重复一

44、,重复一 直进行到直进行到CX为为0 或或串操作指令使零标志串操作指令使零标志ZF为为0 止止 即:即: CX0 并且并且 ZF=1时,重复串操作指令时,重复串操作指令 3.5.1 3.5.1 重复前缀重复前缀 格式:格式:REPNZ 串操作指令串操作指令 或或 REPNE 串操作指令串操作指令 功能:重复后面的串操作指令,每重复一次功能:重复后面的串操作指令,每重复一次CX1,重复一,重复一 直进行到直进行到CX为为0 或或串操作指令使零标志串操作指令使零标志ZF为为1 止止 即:即: CX0 并且并且 ZF=0时,重复串操作指令时,重复串操作指令 3.5.2 3.5.2 字符串指令字符串指

45、令 格式:格式:MOVSB 或或 MOVSW 功能:功能:MOVSB指令把寄存器指令把寄存器SI 所指向的一个所指向的一个字节字节数据传送到数据传送到 由寄存器由寄存器 DI 所指向的存储单元中,然后根据方向标志所指向的存储单元中,然后根据方向标志 DF 确定确定SI、DI 增增 1 还是减还是减 1,DF=1,SI、DI自动减自动减1, 若若DF=0,SI 、DI自动加自动加1。 在执行在执行MOVS前,必须确定方向,即前,必须确定方向,即DF置位或复位置位或复位 注意:字符串传送指令注意:字符串传送指令 不影响标志不影响标志 MOVSW指令把寄存器指令把寄存器 SI 所指向的一个所指向的一

46、个字字数据传送到数据传送到 由寄存器由寄存器 DI 所指向的存储单元中,然后根据方向标志所指向的存储单元中,然后根据方向标志 DF确定确定 SI、DI 增增 2 还是减还是减 2,DF=1,SI 、DI自动减自动减2, 若若DF=0, SI 、DI自动加自动加2。 2. 2. 字符串存指令字符串存指令 STOSSTOS 格式:格式:STOSB 或或 STOSW 功能:把累加器的值存到内存中,如果使用了重复前缀功能:把累加器的值存到内存中,如果使用了重复前缀 REP,即对某个区域填充累加器的内容。,即对某个区域填充累加器的内容。 STOSB(字节存)(字节存) 把累加器把累加器AL的内容送到寄存

47、器的内容送到寄存器 DI 所指向的存储单元中,所指向的存储单元中, 然然 后根据方向标志后根据方向标志 DF 确定确定 D I增增1还是减还是减1,DF=1,DI自动减自动减1, 若若DF=0,DI自动加自动加1。 注意:字符串存指令注意:字符串存指令 不影响标志不影响标志 STOSW(字存)(字存) 3. 3. 字符串取指令字符串取指令LODSLODS 格式:格式:LODSB 或或LODSW 功能:功能:把内存中的值取到累加器把内存中的值取到累加器 LODSB(取字节)(取字节) 把寄存器把寄存器SI所指向的一个字节数据取到累加器所指向的一个字节数据取到累加器AL中,中, 然后然后 根据方向

48、标志根据方向标志DF确定确定SI增增1还是减还是减1,DF=1,SI自动减自动减1, 若若DF=0,SI自动加自动加1。 注意:字符串取指令注意:字符串取指令 不影响标志不影响标志 LODSW(取字)(取字) 4. 4. 字符串扫描指令字符串扫描指令 SCASSCAS 格式:格式:SCASB 或或SCASW SCASB(字符串字节扫描)(字符串字节扫描) 把累加器把累加器AL的内容与寄存器的内容与寄存器DI所指向的所指向的一个字节一个字节数据采数据采 用用相减方式比较相减方式比较,结果影响各标志位,不影响两个操作数,结果影响各标志位,不影响两个操作数, 根据方向标志根据方向标志DF,DI增减增

49、减1。 功能:功能: SCASW(字符串字扫描)(字符串字扫描) 5. 5. 字符串比较指令字符串比较指令CMPSCMPS 格式:格式:CMPSB 或或CMPSW CMPSB(字符串字节比较)(字符串字节比较) 把寄存器把寄存器SI所指向的一个字节的数据与寄存器所指向的一个字节的数据与寄存器DI所指向一个所指向一个 字节的数据采用相减方式比较,相减结果影响各有关标志位,字节的数据采用相减方式比较,相减结果影响各有关标志位, 不影响两个操作数,根据方向标志不影响两个操作数,根据方向标志DF,确定,确定SI和和DI增增1或减或减1 功能:功能: CMPSW(字符串字比较)(字符串字比较) 用串传送

50、指令把用串传送指令把1000H单元的单元的3个字节的数据个字节的数据 传送到传送到2000H单元单元 CLD MOV SI ,1000H MOV DI ,2000H MOVSB MOVSB MOVSB HLT LP: CLD MOV SI ,1000H MOV DI ,2000H MOV CL,03 MOVSB DEC CL JNZ LP HLT CLD MOV SI ,1000H MOV DI ,2000H MOV CX,03H REP MOVSB HLT 3.5.3 字符串指令举例 要求把要求把当前数据段当前数据段中偏移中偏移1000H开始的开始的100个个 字节的数据传送到字节的数据传送

51、到2000H开始的单元中。开始的单元中。 CLD PUSH DS POP ES ;ES等于等于DS MOV SI,1000H ;置源串指针初值;置源串指针初值 MOV DI,2000H ;置目的串指针初值;置目的串指针初值 MOV CX,100 ;重复次数;重复次数 REP MOVSB ;每次传送一字节数据;每次传送一字节数据 在某字符串中查找是否存在在某字符串中查找是否存在“”字符(该字符串字符(该字符串 的首地址为的首地址为1000H,长度为,长度为32个字节),如果存个字节),如果存 在把所在地址送入在把所在地址送入BX寄存器中,否则寄存器中,否则BX寄存器清寄存器清0。 CLD MOV

52、 DI,1000H MOV CX,0020H MOV AL,$ REPNE SCASB JNZ ZER DEC DI MOV BX,DI JMP ST0 MOV BX,0 HLT ZER: ST0: ;AL的内容与串中字符比较,的内容与串中字符比较, 结果不为零重复结果不为零重复 结果不为结果不为“0”,没找到,否,没找到,否 则,找到了,地址为则,找到了,地址为DI-1。 CLD ;清方向标志;清方向标志DF LEA DI,1000H MOV CX,20H ;传送;传送32个数据个数据 XOR AX,AX REP STOSW ;将;将32个字清零个字清零 HLT 将当前段将当前段1000H开

53、始的开始的64个单元清零个单元清零 重复重复CX次次 3.6 3.6 控制转移类指令控制转移类指令 程序的寻址程序的寻址 代码段寄存器代码段寄存器CS 程序指针寄存器程序指针寄存器 IP 段间转移(段间调用):改变了段和偏移量(段间转移(段间调用):改变了段和偏移量(CS和和 IP) 不在同不在同 一段了一段了 FAR 段内转移(段内调用):只改变偏移量段内转移(段内调用):只改变偏移量 IP 在同在同 一段一段 NEAR 直接转移:转移的地址信息直接出现在指令中直接转移:转移的地址信息直接出现在指令中 间接转移:转移的目标地址信息间接存储于间接转移:转移的目标地址信息间接存储于 某寄存器或某

54、一内存单元某寄存器或某一内存单元 相对转移:以当前的相对转移:以当前的IP值增加或减少某一个值值增加或减少某一个值 绝对转移:以一个新的值完全代替当前的绝对转移:以一个新的值完全代替当前的IP值值 JMP SHORT L1 JMP NEAR PTR L2 JMP WORD PTR BX JMP WORD PTR BX JMP FAR L2 JMP DWORD PTR BX 段内直接短转移段内直接短转移 段内直接近转移段内直接近转移 段内间接近转移段内间接近转移 段间直接远转移段间直接远转移 段间间接远转移段间间接远转移 3.6.2 3.6.2 调用和返回指令调用和返回指令 格式:格式:CALL

55、 过程名过程名 功能:调用当前段内的子程序功能:调用当前段内的子程序 操作:操作:SPSP2,SPIP,IPIP+disp 子程序入口地址与子程序入口地址与 当前地址的差值当前地址的差值 格式:格式:RET 操作:操作:IP SP,SP SP+2 格式:格式:CALL OPRD 操作:操作:SPSP2,SPIP,IP(OPRD) 格式:格式: RET 操作:操作:IP SP,SP SP+2 16位通用寄存器或位通用寄存器或 字存储器字存储器 格式:格式:CALL 过程名过程名 功能:调用其它代码段中的子程序功能:调用其它代码段中的子程序 操作:操作:SPSP-2,SPCS,SPSP-2,SPIP IP过程入口地址的偏移量过程入口地址的偏移量 CS过程入口地址的段值过程入口地址的段值 远过程远过程 格式:格式:RET 操作:操作:IP SP,SP SP+2,CSSP,SPSP+2 格式:格式:CALL OPRD 操作:操作:SPSP-2,SPCS, SPSP-2

温馨提示

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

评论

0/150

提交评论