1、第三章 80 x86寻址方式和指令系统第三章第三章 80X8680X86寻址方式和指令系统寻址方式和指令系统3.13.1 80X8680X86寻址方式寻址方式3.23.2 80X8680X86指令格式指令格式3.33.3 80X8680X86指令系统指令系统 第三章 80 x86寻址方式和指令系统3.1 80X863.1 80X86寻址方式寻址方式3.1.1 3.1.1 数据寻址方式数据寻址方式 操作数有可能在:操作数有可能在:(1 1)代码段中,作为指令中的立即数代码段中,作为指令中的立即数 (2 2)CPUCPU寄存器中寄存器中 (3 3)存储器的数据段或堆栈段或附加数据段中)存储器的数据
2、段或堆栈段或附加数据段中所以,总的来说,数据寻址方式分为三种:所以,总的来说,数据寻址方式分为三种:立即寻址立即寻址 寄存器寻址寄存器寻址 存储器寻址存储器寻址第三章 80 x86寻址方式和指令系统一、立即寻址一、立即寻址操作数操作数直接包含在直接包含在代码段的指令代码段的指令中。中。如:如:MOV EAXMOV EAX,80000000H80000000H MOV BX MOV BX,6688H6688H MOV AX MOV AX,1234H1234H立即数只能作为源操作数立即数只能作为源操作数立即寻址主要用来给通用寄存器或存储器赋值立即寻址主要用来给通用寄存器或存储器赋值不允许给段寄存器
3、直接赋值不允许给段寄存器直接赋值第三章 80 x86寻址方式和指令系统例例3.1 立即寻址立即寻址第三章 80 x86寻址方式和指令系统立即寻址过程示意立即寻址过程示意第三章 80 x86寻址方式和指令系统二、寄存器寻址二、寄存器寻址操作数操作数在在寄存器寄存器中。中。3232位寄存器:位寄存器:EAXEAX、EBXEBX、ECXECX、EDXEDX、ESPESP、EBPEBP、ESIESI、EDIEDI1616位寄存器:位寄存器:AXAX、BXBX、CXCX、DXDX、SPSP、BPBP、SISI、DIDI、CSCS、DSDS、SSSS、ESES、FSFS、GSGS8 8 位寄存器:位寄存器
4、:AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH、DLDL 如:如:MOV AXMOV AX,BXBX MOV EDI MOV EDI,ESIESI MOV AL MOV AL,CLCL第三章 80 x86寻址方式和指令系统例例3.2 寄存器寻址寄存器寻址第三章 80 x86寻址方式和指令系统三、存储器寻址三、存储器寻址 操作数操作数在在存储器存储器中,其地址由指令以某种方式中,其地址由指令以某种方式指出。指出。(一)(一)1616位指令模式下:位指令模式下:物理地址物理地址=段基址段基址 10H 10H 有效地址有效地址EAEA(二)二)3232位指令模式下:位指令模式
5、下:物理地址物理地址=段基址段基址 有效地址有效地址EAEAEAEA的计算方法根据采用的寻址方式不同而不同。的计算方法根据采用的寻址方式不同而不同。第三章 80 x86寻址方式和指令系统(一)一)1616位指令模式下的存储器寻址位指令模式下的存储器寻址 1616位指令模式寻址结构位指令模式寻址结构:段基址段基址10H10H基址变址偏移量基址变址偏移量 基址:基址:BXBX、BPBP 变址:变址:SISI、DIDI 偏移量:偏移量:8 8位或位或1616位位 如果有效地址在如果有效地址在BXBX,SISI或或DIDI中,则以中,则以DSDS寄存器内容为段基址;寄存器内容为段基址;如果有效地址在如
6、果有效地址在BPBP中,则以中,则以SSSS段寄存器之内容为段基址。如果段寄存器之内容为段基址。如果使用段超越前缀(使用段超越前缀(CSCS:ESES:DSDS:SSSS:),:),操作数可以放在冒号操作数可以放在冒号前指定的段。前指定的段。1616位指令模式寻址方式位指令模式寻址方式:直接寻址直接寻址 寄存器间接寻址寄存器间接寻址 寄存器相对寻址寄存器相对寻址 基址变址寻址基址变址寻址 相对基址变址寻址相对基址变址寻址 第三章 80 x86寻址方式和指令系统1 1、直接寻址、直接寻址操作数在存储器单元中。操作数在存储器单元中。操作数所在的操作数所在的有效地址有效地址EAEA直接由指令指出直接
7、由指令指出。例例1 MOV AX1 MOV AX,3000H3000H 例例2 MOV BL2 MOV BL,BLOCKBLOCK 例例3 MOV BX3 MOV BX,DATA1DATA1第三章 80 x86寻址方式和指令系统例例3.3 直接寻址直接寻址第三章 80 x86寻址方式和指令系统直接寻址过程示意直接寻址过程示意第三章 80 x86寻址方式和指令系统2 2、寄存器间接寻址、寄存器间接寻址 操操作作数数的的有有效效地地址址在在BXBX、BPBP或或SISI、DIDI中中,EAEA可表示为可表示为例例1 MOV AX1 MOV AX,BXBX例例2 MOV DL2 MOV DL,SIS
8、I第三章 80 x86寻址方式和指令系统例例3.4 寄存器间接寻址寄存器间接寻址第三章 80 x86寻址方式和指令系统寄存器间接寻址过程示意寄存器间接寻址过程示意第三章 80 x86寻址方式和指令系统3 3、寄存器相对寻址、寄存器相对寻址操作数在存储单元中,其操作数在存储单元中,其有效地址有效地址EAEA可表示为可表示为 例例1 MOV AL1 MOV AL,BXBX4000H4000H亦可写成:亦可写成:MOV ALMOV AL,4000HBX4000HBX 例例2 MOV AX2 MOV AX,BP+2000HBP+2000H第三章 80 x86寻址方式和指令系统例例3.6 寄存器相对寻址
9、寄存器相对寻址第三章 80 x86寻址方式和指令系统寄存器相对寻址过程示意寄存器相对寻址过程示意第三章 80 x86寻址方式和指令系统4 4、基址变址寻址、基址变址寻址操作数在存储单元中,其有效地址操作数在存储单元中,其有效地址EAEA可表示为可表示为 例例1 MOV AX1 MOV AX,BXBXSI SI 或写成:或写成:MOV AXMOV AX,BXSIBXSI 例例2 MOV AX2 MOV AX,BX+DIBX+DI 例例3 MOV AX3 MOV AX,BP+SIBP+SI 例例4 MOV AX4 MOV AX,BP+DIBP+DI 第三章 80 x86寻址方式和指令系统例例3.7
10、 基址变址寻址基址变址寻址第三章 80 x86寻址方式和指令系统基址变址寻址过程示意基址变址寻址过程示意第三章 80 x86寻址方式和指令系统5 5、相对基址变址寻址、相对基址变址寻址操作数在存储单元中,其操作数在存储单元中,其有效地址有效地址EAEA可表示为可表示为 例例1 MOV AX1 MOV AX,BXBXSISI1500H1500H或写成或写成 MOV AXMOV AX,1500BXSI1500BXSI 例例2 MOV AX2 MOV AX,BP+DI+1000HBP+DI+1000H第三章 80 x86寻址方式和指令系统例例3.8 相对基址变址寻址相对基址变址寻址第三章 80 x8
11、6寻址方式和指令系统相对基址变址寻址过程示意相对基址变址寻址过程示意第三章 80 x86寻址方式和指令系统(二)二)3232位指令模式下的存储器寻址位指令模式下的存储器寻址 3232位指令模式寻址结构由位指令模式寻址结构由5 5部分组成部分组成:段址段址基址变址基址变址比例因子偏移量比例因子偏移量 其中基址寄存器或变址寄存器可以是除其中基址寄存器或变址寄存器可以是除ESPESP以以外的任何外的任何3232位通用寄存器。当基址寄存器为位通用寄存器。当基址寄存器为EBPEBP时,时,默认段寄存器默认段寄存器SSSS存放段选择符,否则,默认存放段选择符,否则,默认DSDS存存放段选择符。也可使用段超
12、越前缀来指定。比例放段选择符。也可使用段超越前缀来指定。比例因子为因子为1 1,2 2,4 4,8 8。偏移量为。偏移量为8 8位或位或3232位。位。第三章 80 x86寻址方式和指令系统3232位指令模式下的存储器寻址方式位指令模式下的存储器寻址方式1 1、直接寻址、直接寻址 如:如:MOV EAXMOV EAX,10000000H10000000H2 2、间接寻址间接寻址 如:如:MOV EDXMOV EDX,ECXECX3 3、相对基址寻址相对基址寻址 如:如:MOV ECXMOV ECX,EAX+80HEAX+80H4 4、相对比例变址寻址相对比例变址寻址 如:如:MOV EBXMO
13、V EBX,ESI*4+80HESI*4+80H5 5、相对比例基址变址寻址相对比例基址变址寻址 如:如:MOV EAXMOV EAX,EBP+EDI*4+80HEBP+EDI*4+80H第三章 80 x86寻址方式和指令系统3.1.2 3.1.2 程序地址寻址方式程序地址寻址方式一、相对寻址一、相对寻址 相对寻址为段内寻址,指令中给出带符号的相对偏相对寻址为段内寻址,指令中给出带符号的相对偏移量,程序目标地址为当前移量,程序目标地址为当前IPIP值加上相对偏移量作为偏移值加上相对偏移量作为偏移地址。地址。二、二、直接寻址直接寻址 直接寻址是指指令中直接给出转移指令的目标地址。在直接寻址是指指
14、令中直接给出转移指令的目标地址。在段间转移中,指令中给出目标段地址或代码段的段描述符。段间转移中,指令中给出目标段地址或代码段的段描述符。三、间接寻址三、间接寻址 间接寻址间接寻址 分段内和段间间接寻址,指令中以间接方分段内和段间间接寻址,指令中以间接方式给出转移指令的目标地址,通常存放在数据段。式给出转移指令的目标地址,通常存放在数据段。第三章 80 x86寻址方式和指令系统3.1.3 3.1.3 堆栈地址寻址方式堆栈地址寻址方式字数据字数据进栈进栈步骤步骤:1 1、(、(E E)SPSP11(E E)SPSP2 2、高高8 8位位堆栈堆栈3 3、(、(E E)SPSP11(E E)SPSP
15、4 4、低、低8 8位位堆栈堆栈字数据字数据出栈出栈步骤步骤:1 1、栈顶内容、栈顶内容目标寄存器或目标单元的低目标寄存器或目标单元的低8 8位位2 2、(、(E E)SPSP11(E E)SPSP3 3、栈顶内容栈顶内容目标寄存器或目标单元的高目标寄存器或目标单元的高8 8位位4 4、(、(E E)SPSP11(E E)SPSP第三章 80 x86寻址方式和指令系统堆栈操作示意堆栈操作示意第三章 80 x86寻址方式和指令系统思考题思考题 1、设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H,
16、假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式。(1)MOV AL,1234H (2)MOV EDX,BX(3)MOV CL,BX100H (4)MOV SI,EBX(5)MOV AH,BUFBXSI(6)MOV EAX,BP1234H 第三章 80 x86寻址方式和指令系统3.2 80X863.2 80X86指令格式指令格式指令基本格式:指令基本格式:标号:标号:助记符助记符 操作数操作数 ;注释;注释BYTE PTR BYTE PTR 。WORD PTR WORD PTR 。DWORD PTR DWORD PTR 。如如 INC WORD
17、 PTR BXINC WORD PTR BX第三章 80 x86寻址方式和指令系统3.3 80X863.3 80X86指令系统指令系统按功能分类:按功能分类:数据传送指令数据传送指令算术运算指令算术运算指令逻辑运算指令逻辑运算指令控制转移类指令控制转移类指令串操作指令串操作指令输入输入/输出指令输出指令处理器控制指令处理器控制指令中断指令与中断指令与DOS功能调用功能调用第三章 80 x86寻址方式和指令系统3.3.1 3.3.1 数据传送指令数据传送指令通用数据传送指令通用数据传送指令堆栈操作指令堆栈操作指令地址传送指令地址传送指令标志寄存器传送指令标志寄存器传送指令查表指令查表指令符号扩展
18、指令符号扩展指令数据传送指令包括:数据传送指令包括:第三章 80 x86寻址方式和指令系统3.3.1 3.3.1 数据传送指令数据传送指令数据传送指令包括:数据传送指令包括:通用数据传送指令通用数据传送指令堆栈操作指令堆栈操作指令地址传送指令地址传送指令标志寄存器传送指令标志寄存器传送指令查表指令查表指令符号扩展指令符号扩展指令第三章 80 x86寻址方式和指令系统传送指令数据流传送指令数据流*CSCS不能为目的操作数,不能对(不能为目的操作数,不能对(E E)IPIP直接传送数据直接传送数据*堆栈操作不允许为字节操作堆栈操作不允许为字节操作第三章 80 x86寻址方式和指令系统一、通用数据传
19、送指令一、通用数据传送指令DEST:目的操作数目的操作数SRC:源操作数源操作数1、一般传送指令、一般传送指令 MOV DEST,SRC如:如:MOV AL,CL MOV BX,SI MOV EAX,EBX 第三章 80 x86寻址方式和指令系统使用使用MOV指令应注意:指令应注意:立即数不允许直接送段寄存器,且立即数不能立即数不允许直接送段寄存器,且立即数不能做目的操作数做目的操作数源操作数和目的操作数不允许同时为存储器操源操作数和目的操作数不允许同时为存储器操作数作数源操作数和目的操作数不允许同时为段寄存器源操作数和目的操作数不允许同时为段寄存器两操作数的数据类型要一致两操作数的数据类型要
20、一致传送操作不影响标志位传送操作不影响标志位不允许对不允许对CS、(、(E)IP传送数据传送数据第三章 80 x86寻址方式和指令系统2、扩展传送指令、扩展传送指令 MOVSX DEST,SRC MOVZX DEST,SRC如如 MOV BL,80H MOVSX AX,BL;AX=FF80H MOVZX AX,BL;AX=0080H*目的操作数为通用寄存器(目的操作数为通用寄存器(16位或位或32位位)*源操作数长度必须小于目的操作数长度,为通源操作数长度必须小于目的操作数长度,为通用寄存器或存储器操作数(用寄存器或存储器操作数(8位或位或16位位)第三章 80 x86寻址方式和指令系统3、交
21、换指令、交换指令 XCHG DEST,SRC如:如:XCHG EAX,EBX XCHG AX,SI XCHG AL,SI*两操作数中不允许出现立即数两操作数中不允许出现立即数*两操作数不允许同时为存储器操作数两操作数不允许同时为存储器操作数*两操作数数据类型必须一致两操作数数据类型必须一致 第三章 80 x86寻址方式和指令系统二、堆栈操作指令二、堆栈操作指令压栈指令压栈指令 PUSH SRC如:如:PUSH EAX PUSH DS PUSH SI PUSH DWORD PTR SI PUSH 1234H PUSHD 80H 出栈指令出栈指令 POP DEST如:如:POP AX POP DS
22、 POP BX POP DWORD PTR DI 第三章 80 x86寻址方式和指令系统三、地址传送指令三、地址传送指令格式:格式:LEA DEST,SRC *DEST为为16位或位或32位通用寄存器位通用寄存器 *SRC为为16位或位或32位存储器操作数位存储器操作数例例1:LEA BX,SI+1005H 若若SI=1000H 则则BX=?例例2:LEA DI,BLOCK MOV DI,BLOCK 有何区别?有何区别?第三章 80 x86寻址方式和指令系统四、标志寄存器传送指令四、标志寄存器传送指令格式格式1:LAHF SAHF格式格式2:PUSHF POPF格式格式3:PUSHFD POP
23、FD*SAHF、POPF、POPFD影响标志位影响标志位第三章 80 x86寻址方式和指令系统五、查表指令五、查表指令格式:格式:XLAT指令规定:表格存于数据段中指令规定:表格存于数据段中 表首偏移地址表首偏移地址BX 表内表内偏移量偏移量AL 查找结果查找结果AL所找单元的物理地址所找单元的物理地址:(DS)10H+(BX)+(AL)第三章 80 x86寻址方式和指令系统查表指令应用举例查表指令应用举例LEA BX,BLOCK MOV AL,3 XLAT结果:结果:AL内容为内容为4FH例:试编程将内存中以例:试编程将内存中以BLOCK为起始地址的编码表中顺为起始地址的编码表中顺序号为序号
24、为3的编码送的编码送AL寄存器。寄存器。第三章 80 x86寻址方式和指令系统六、符号扩展指令六、符号扩展指令针对带符号数,按带符号数扩展。针对带符号数,按带符号数扩展。1、CBW 功能:功能:AL(8位)位)AX(16位)位)2、CWD 功能:功能:AX(16位)位)DX:AX(32位)位)3、CWDE 功能:功能:AX(16位)位)EAX(32位)位)4、CDQ 功能:功能:EAX(32位)位)EDX:EAX(64位)位)第三章 80 x86寻址方式和指令系统3.3.2 3.3.2 算术运算指令算术运算指令加法指令加法指令减法指令减法指令加加1减减1指令指令比较指令比较指令乘法指令乘法指令
25、除法指令除法指令BCD算术运算指令算术运算指令第三章 80 x86寻址方式和指令系统算术运算类指令特点算术运算类指令特点影响标志位影响标志位操作数不允许为段寄存器操作数不允许为段寄存器不允许两个操作数同为存储器操作数不允许两个操作数同为存储器操作数若无特别规定,操作数类型必须一致若无特别规定,操作数类型必须一致目的操作数不允许为立即数目的操作数不允许为立即数当操作数类型不明确时必须使用当操作数类型不明确时必须使用PTR伪指令伪指令第三章 80 x86寻址方式和指令系统一、加法指令一、加法指令格式(格式(1)ADD DEST,SRC功能:源操作数功能:源操作数+目的操作数目的操作数目的操作数目的
26、操作数格式(格式(2)ADC DEST,SRC功能:源操作数功能:源操作数+目的操作数目的操作数+CF目的操作数目的操作数例:例:32F2H+A020H=?MOV AX,32F2H 或或 MOV AX,32F2HMOV BX,0A020H MOV BX,0A020HADD AX,BX ADD AL,BL ADC AH,BH第三章 80 x86寻址方式和指令系统二、减法指令二、减法指令格式(格式(1)SUB DEST,SRC功能:目的操作数源操作数功能:目的操作数源操作数目的操作数目的操作数格式(格式(2)SBB DEST,SRC功能:目的操作数源操作数功能:目的操作数源操作数CF目的操作数目的
27、操作数*SUB、SBB指令与指令与ADD、ADC一样,影响标志位一样,影响标志位OF、SF、ZF、AF,PF,CF第三章 80 x86寻址方式和指令系统三、加三、加1减减1指令指令加加1指令指令 INC DEST功能:目的操作数功能:目的操作数1目的操作数目的操作数减减1指令指令 DEC DEST功能:目的操作数功能:目的操作数1目的操作数目的操作数*不影响不影响CF,影响影响OF、SF、ZF、AF、PF例:例:INC BX INC BYTE PTR BX DEC EAX DEC WORD PTRSI 第三章 80 x86寻址方式和指令系统四、比较指令四、比较指令格式格式 CMP DEST,S
28、RC功能:目的操作数源操作数功能:目的操作数源操作数(1)若目、源为无符号数)若目、源为无符号数 CF=0 则目则目源源 (若(若ZF=1,则目则目=源)源)CF=1 则目则目 源源(2)若目、源为带符号数)若目、源为带符号数 若目、源为同号数(若目、源为同号数(OF=0)若均为正,若均为正,SF=0 则目则目源(若源(若ZF=1,则目,则目=源)源)SF=1 则目则目 源源 若均为负若均为负,SF=0 则目则目源(若源(若ZF=1,则目,则目=源)源)SF=1 则目则目 源源 第三章 80 x86寻址方式和指令系统若目、源为异号数(若目、源为异号数(OF=0或或1)若目为正,源为负若目为正,
29、源为负 则目则目 源源 若此时若此时 SF=0 则则OF=0 若此时若此时 SF=1 则则OF=1 若目为负若目为负,源为正源为正 则目则目 源源 若此时若此时 SF=1 则则OF=0 若此时若此时 SF=0 则则OF=1综合起来,若目、源为带符号数综合起来,若目、源为带符号数 OF SF=0 则目则目源源 OF SF=1 则目则目 源源 第三章 80 x86寻址方式和指令系统五、交换相加指令五、交换相加指令格式格式 XADD DEST,SRC功能:目的操作数源操作数功能:目的操作数源操作数目的操作数目的操作数 且原目的操作数且原目的操作数源操作数源操作数影响标志位影响标志位OF、SF、ZF、
30、AF、PF、CF六、求补指令六、求补指令格式格式 NEG DEST功能:求目的操作数的相反数的补码功能:求目的操作数的相反数的补码影响标志位影响标志位OF、SF、ZF、AF、PF、CF第三章 80 x86寻址方式和指令系统七、乘法指令七、乘法指令格式格式 MUL SRC (针对无符号数)针对无符号数)IMUL SRC (针对带符号数)针对带符号数)隐含规定:隐含规定:SRCSRC为一乘数因子,可为为一乘数因子,可为 8 8位位/1616位位 /3232位位寄存器或存储器寄存器或存储器另一乘数因子在累加器中(另一乘数因子在累加器中(ALAL/AX AX /EAXEAX)结果为乘积,乘积隐含在(结
31、果为乘积,乘积隐含在(AXAX/DXDX:AXAX/EDXEDX:EAXEAX)字节乘字节乘 字乘字乘 双字乘双字乘*若乘积高位为若乘积高位为0 0,则,则CF=0CF=0,OF=0OF=0 若乘积高位含有效数据若乘积高位含有效数据,则,则CF=1CF=1,OF=1OF=1 对其它标志位无定义对其它标志位无定义 第三章 80 x86寻址方式和指令系统例:计算存于下列内存中的两个无符号数的乘积例:计算存于下列内存中的两个无符号数的乘积 1234H2345H=?结果放结果放RESULT单元单元LEA BX,BLOCKMOV AX,BXMUL WORD PTR BX+4MOV RESULT,AXMO
32、V RESULT+2,DX结果为结果为02820404HCF=1,OF=1第三章 80 x86寻址方式和指令系统八、除法指令八、除法指令格式格式 DIV SRC (针对无符号数)针对无符号数)IDIV SRC (针对带符号数)针对带符号数)隐含规定:隐含规定:SRC为为除数,为除数,为 8 8位位/1616位位 /3232位位寄存器或存储器寄存器或存储器被除数隐含在被除数隐含在 (AXAX/DXDX:AXAX/EDXEDX:EAXEAX)商隐含在商隐含在 (ALAL/AX AX /EAXEAX)余数隐含在余数隐含在 (AHAH/DX DX /EDXEDX)字节除字节除 字除字除 双字除双字除*
33、当除数为当除数为0 0或商溢出时会产生中断或商溢出时会产生中断*被除数必须是除数的双倍长度,否则,需要进行高位扩展被除数必须是除数的双倍长度,否则,需要进行高位扩展 无符号数高位扩展为全无符号数高位扩展为全0 0,带符号数按符号扩展指令扩展,带符号数按符号扩展指令扩展第三章 80 x86寻址方式和指令系统九、组合型九、组合型BCD算术运算指令算术运算指令 组合组合BCD码也称压缩格式的码也称压缩格式的BCD码,码,用一个字节用一个字节存储存储2位位BCD码码。如十进制数如十进制数12的组合的组合BCD码为码为 00010010B 35的组合的组合BCD码为码为 00110101B该类指令使用场
34、合:该类指令使用场合:当参与运算的十进制数以其组合当参与运算的十进制数以其组合BCD码形式存放,加减码形式存放,加减时,计算机会当作二进制数来运算,其结果一定不是理想要得时,计算机会当作二进制数来运算,其结果一定不是理想要得的组合型的组合型BCD码结果,这时,必须用组合型码结果,这时,必须用组合型BCD算术运算指算术运算指令加以调整,即将二进制结果调整为令加以调整,即将二进制结果调整为BCD码表示形式。码表示形式。加法调整指令一般紧跟在加法调整指令一般紧跟在ADD或或ADC之后,减法调整指之后,减法调整指令一般紧跟在令一般紧跟在SUB或或SBB之后。之后。第三章 80 x86寻址方式和指令系统
35、1、组合型、组合型BCD加法调整指令加法调整指令格式格式 DAA功能:功能:AL(二进制和)二进制和)组合组合BCD码码例:例:26+68=?分析:用组合分析:用组合BCD码存放时,两个数应分别为码存放时,两个数应分别为26H和和68H,理想结果应该为理想结果应该为94H。编程如下:编程如下:MOV AL,26HMOV BL,68HADD AL,BL ;AL=8EHDAA ;AL=94H第三章 80 x86寻址方式和指令系统2、组合型、组合型BCD减法调整指令减法调整指令格式格式 DAS功能:功能:AL(二进制差二进制差)组合组合BCD码码例:例:6556=?MOV AL,65H MOV BL
36、,56H SUB AL,BL ;AL=0FH DAS ;AL=09H 第三章 80 x86寻址方式和指令系统十、非组合型十、非组合型BCD算术运算指令算术运算指令 非非 组合组合BCD码也称非压缩格式的码也称非压缩格式的BCD码,码,用一个用一个字节存储字节存储1位位BCD码,高码,高4位无意义位无意义。如非组合如非组合BCD码码 00010010B表示的数为表示的数为2 非组合非组合BCD码码 00110101B表示的数为表示的数为5 3635H即即0011011000110101B表示的数是表示的数是65由于由于09的的ASCII码为码为30H39H,机器采用一个字节存放一位机器采用一个字
37、节存放一位ASCII码,所以,码,所以,ASCII码是一种非组合型码是一种非组合型BCD码。码。非组合型非组合型BCD调整指令有加、减、乘、除四种调整调整指令有加、减、乘、除四种调整指令。指令。第三章 80 x86寻址方式和指令系统1、非组合型、非组合型BCD加法调整指令加法调整指令格式格式 AAA功能:功能:AL(二进制和)二进制和)非组合非组合BCD码码例:例:5+9=?分析:用非组合分析:用非组合BCD码存放时,两个数应分别为码存放时,两个数应分别为05H和和09H,理想结果应该为理想结果应该为0104H。编程如下:编程如下:MOV AL,05HMOV BL,09HADD AL,BL ;
38、AL=0EHAAA ;AX=0104H第三章 80 x86寻址方式和指令系统2、非组合型、非组合型BCD减法调整指令减法调整指令格式格式 AAS功能:功能:AL(二进制差)二进制差)非组合非组合BCD码码 3、非组合型、非组合型BCD乘法调整指令乘法调整指令格式格式 AAM功能:功能:AL(二进制乘积)二进制乘积)非组合非组合BCD码码 4、非组合型、非组合型BCD除法调整指令除法调整指令格式格式 AAD功能:功能:AX(两位非组合两位非组合BCD码)码)二进制数二进制数*AAD指令必须放在除法指令之前进行。指令必须放在除法指令之前进行。其他调整指令都是先运算后调整。其他调整指令都是先运算后调
39、整。第三章 80 x86寻址方式和指令系统思考题思考题判断下列指令是否正确,若有错误,请指出原因,并改正。判断下列指令是否正确,若有错误,请指出原因,并改正。(1 1)MOV BLMOV BL,OFFSET BLOCK OFFSET BLOCK (2 2)LEA DILEA DI,BXBXSISI(3 3)PUSH AL PUSH AL (4 4)POP CSPOP CS(5 5)MOV ESMOV ES,DS DS (6 6)MOV AXMOV AX,SISIDIDI(7 7)MOV BXMOV BXBPBP,AX AX (8 8)ADD AXADD AX,F000HF000H(9 9)MO
40、V BXMOV BX,SI SI (1010)MOV AHMOV AH,DXDX(1111)INC BX INC BX (1212)XCHG AXXCHG AX,2000H 2000H(1313)MOV AXMOV AX,BXBXDX DX (1414)ADD BXADD BX,BXBX(1515)MOV AXMOV AX,DIDISI SI (1616)MOV EAXMOV EAX,ECX*4ECX*480H80H 第三章 80 x86寻址方式和指令系统3.3.3 3.3.3 逻辑运算指令逻辑运算指令包括:逻辑指令、移位指令、位操作指令包括:逻辑指令、移位指令、位操作指令该类指令特点:该类指
41、令特点:影响标志位影响标志位操作数不允许为段寄存器操作数不允许为段寄存器不允许两个操作数同为存储器操作数不允许两个操作数同为存储器操作数若无特别规定,操作数类型必须一致若无特别规定,操作数类型必须一致目的操作数不允许为立即数目的操作数不允许为立即数当操作数类型不明确时必须使用当操作数类型不明确时必须使用PTR伪指令伪指令第三章 80 x86寻址方式和指令系统一、逻辑指令一、逻辑指令1、逻辑与指令、逻辑与指令格式格式 AND DEST,SRC功能:目的操作数功能:目的操作数源操作数源操作数目的操作数目的操作数*常用来使目的操作数的某些位被屏蔽(即清常用来使目的操作数的某些位被屏蔽(即清0)例:例
42、:MOV AL,00111001B 若要使若要使AL中高中高4位清位清0,低,低4位不变,怎么办位不变,怎么办?AND AL,00001111B第三章 80 x86寻址方式和指令系统2、逻辑或指令、逻辑或指令格式格式 OR DEST,SRC功能:目的操作数功能:目的操作数源操作数源操作数目的操作数目的操作数*常用来使目的操作数的某些位置常用来使目的操作数的某些位置1例:例:MOV AL,00001001B 若要使若要使AL中最高中最高2位置位置1,低,低6位不变,怎么办位不变,怎么办?OR AL,11000000B第三章 80 x86寻址方式和指令系统3、逻辑异或指令、逻辑异或指令格式格式 X
43、OR DEST,SRC功能:目的操作数功能:目的操作数 源操作数源操作数目的操作数目的操作数*常用来使目的操作数的某些位变反常用来使目的操作数的某些位变反 例:例:MOV AL,00001001B 若要使若要使AL中中D7、D0位变反,其它位不变位变反,其它位不变*对寄存器操作数清对寄存器操作数清0 例例 XOR DS,DS*测试一操作数与另一操作数是否相等测试一操作数与另一操作数是否相等 例例 XOR AL,BL 若若ZF=1,则,则AL=BLXOR AL,10000001B第三章 80 x86寻址方式和指令系统4、逻辑非指令、逻辑非指令格式格式 NOT DEST功能:目的操作数按位取反功能
44、:目的操作数按位取反目的操作数目的操作数5、测试指令、测试指令格式格式 TEST DEST,SRC功能:目的操作数功能:目的操作数源操作数源操作数*常用来测试目的操作数的某位的状态常用来测试目的操作数的某位的状态(是是0还是还是1)或者用来测试目的操作数的某些位是否同时为或者用来测试目的操作数的某些位是否同时为0 例:若要测试例:若要测试AL中中D7位为位为0还是为还是为1,怎么办?,怎么办?TEST AL,10000000B 若若ZF=1,则,则D7=0 若若ZF=0,则,则D7=1第三章 80 x86寻址方式和指令系统逻辑指令对标志位的影响逻辑指令对标志位的影响NOT 指令不影响标志位指令
45、不影响标志位AND、OR、XOR、TEST 指令影响标志位指令影响标志位SF、ZF、PF,并且使并且使CF=0,OF=0,对,对AF未定义未定义第三章 80 x86寻址方式和指令系统二、移位指令二、移位指令1、移位分类、移位分类 算术移位(算术移位(A)左移(左移(L)右移(右移(R)非循环(非循环(S)左移(左移(L)逻辑移位(逻辑移位(H)右移(右移(R)小循环移位(小循环移位(O)左移(左移(L)循环循环(R)右移(右移(R)大循环移位(大循环移位(C)左移(左移(L)右移(右移(R)移位指令有:移位指令有:SAL、SAR、SHL、SHR ROL、ROR、RCL、RCR第三章 80 x8
46、6寻址方式和指令系统2、移位指令格式、移位指令格式DEST:表示目的操作数,(寄存器或存储器)表示目的操作数,(寄存器或存储器)OPRD:表示移位的次数,可以是立即数,也可表示移位的次数,可以是立即数,也可 以由以由CL间接指定移位次数。间接指定移位次数。SAL DEST,OPRDSAR DEST,OPRDSHL DEST,OPRDSHR DEST,OPRDROL DEST,OPRDROR DEST,OPRDRCL DEST,OPRDRCR DEST,OPRD第三章 80 x86寻址方式和指令系统3、移位示意图、移位示意图1(非循环移位)(非循环移位)(a)SALSHL;(b)SAR;(c)S
47、HR 第三章 80 x86寻址方式和指令系统4、移位示意图、移位示意图2(循环移位)(循环移位)(a)ROL;(b)ROR;(c)RCL;(d)RCR第三章 80 x86寻址方式和指令系统5、对标志位的影响、对标志位的影响SALSHL 影响影响OF、SF、ZF、PF、CFSHRSARROLROR 影响影响CF、OFRCLRCR第三章 80 x86寻址方式和指令系统 设一个字节数据设一个字节数据X存放在存放在AL 寄存器中,试分寄存器中,试分析下列程序段的功能。析下列程序段的功能。XOR AH,AH SAL AX,1 MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX;
48、AH=0;AX=2X;BX=2X;AX=4(2X)=8X;AX=8X+2X=10X功能:功能:10XAX第三章 80 x86寻址方式和指令系统三、位操作指令三、位操作指令1、位测试和设置指令、位测试和设置指令 BT DEST,SRC (指定位送指定位送CF)BTC DEST,SRC (指定位送指定位送CF,该位取反)该位取反)BTR DEST,SRC (指定位送指定位送CF,该位清该位清0)BTS DEST,SRC(指定位送指定位送CF,该位置该位置1)如如 MOV AX,1234H ;AX=0001001000110100B MOV CX,5 BT AX,CX ;CF=1,AX=1234H
49、BTC AX,CX ;CF=1,AX=1214H BTS AX,CX ;CF=0,AX=1234H BTR AX,CX ;CF=1,AX=1214H第三章 80 x86寻址方式和指令系统2、位扫描指令、位扫描指令 BSF DEST,SRC功能:从低位开始扫描功能:从低位开始扫描SRC,若所有位为若所有位为0,则,则ZF=0,否否 则则ZF=1,且将第一个出现且将第一个出现1的位号存入的位号存入DEST中。中。BSR DEST,SRC功能:从高位开始扫描功能:从高位开始扫描SRC,若所有位为若所有位为0,则,则ZF=0,否否 则则ZF=1,且将第一个出现且将第一个出现1的位号存入的位号存入DES
50、T中。中。如如 MOV AX,1234H ;AX=0001001000110100B BSF BX,AX ;ZF=1,BX=0002H BSR DX,CX ;CF=1,AX=000CH 第三章 80 x86寻址方式和指令系统3、位标志指令、位标志指令 CLC (CF=0)STC (CF=1)CLD (DF=0)STD (DF=1)CLI (IF=0)STI (IF=1)4、条件设置字节指令条件设置字节指令 格式:格式:SETCOND DEST 功能:测试条件(功能:测试条件(COND)若为真,则将若为真,则将DEST置置01H,否则置否则置00H。见。见P87的表的表3.3 第三章 80 x8