版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第三章第三章 教学重点教学重点8088/8086的寻址方式的寻址方式8088/8086的基本指令的基本指令传送指令传送指令算术运算指令算术运算指令逻辑运算和移位指令逻辑运算和移位指令串操作指令串操作指令控制转移指令控制转移指令指令的基本组成指令的基本组成操作码操作码说明计算机要执行哪种操作,如传送、运算、说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部移位、跳转等操作,它是指令中不可缺少的组成部分分操作数操作数 指明参与操作的数是谁或存放在何处指明参与操作的数是谁或存放在何处 寻找操作数的方法叫寻址方式寻找操作数的方法叫寻址方式在转移调用指令中寻找新的转移
2、地址也是寻址方式。在转移调用指令中寻找新的转移地址也是寻址方式。操作码操作码操作数操作数指令由操作码和操作数两部分组成指令由操作码和操作数两部分组成 1 操作数的寻址方式操作数的寻址方式指令系统设计了多种操作数的来源指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址寻找操作数的过程就是操作数的寻址理解操作数的寻址方式是理解指令功能的理解操作数的寻址方式是理解指令功能的前提前提操作数采取哪一种寻址方式操作数采取哪一种寻址方式一方面,会影响处理器执行指令的速度和效率一方面,会影响处理器执行指令的速度和效率另一方面,另一方面,对程序设计也很重要对程序设计也很重要一、一、 立即数寻址方式立
3、即数寻址方式指令中直接给出一个常数作为操作数,其紧跟在指令中直接给出一个常数作为操作数,其紧跟在操作码之后存放在代码段中。立即数直接从指令操作码之后存放在代码段中。立即数直接从指令队列中取得,不用总线周期,执行数度快。队列中取得,不用总线周期,执行数度快。这种操作数被称为这种操作数被称为立即数立即数可以是可以是8位数值(位数值(00HFFH)也可以是也可以是16位数值(位数值(0000HFFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现多以常量形式出现注意:立即数只能是整数而且是常数。注意:立即数只能是整数而且是常数。MOV A
4、X, 0102H;AX0102H二、二、 寄存器寻址方式寄存器寻址方式指令中指明某个寄存器其内容即为操作数,寄存指令中指明某个寄存器其内容即为操作数,寄存器在器在CPU内,不用总线周期,执行速度快。内,不用总线周期,执行速度快。8位寄存器位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器个段寄存器seg:CS、DS、SS、ESMOV AX, BX;AXBX三、直接寻址方式三、直接寻址方式指令中直接给出操作数所在内存单元的有效地指令中直接给出操作数所在内存单元的有效地址址 (EA即偏移地址)即偏移地址
5、)默认的默认的段地址在段地址在DS段寄存器,若在其它段可使段寄存器,若在其它段可使用用段超越前缀段超越前缀改变。改变。用方括号包含有效地址,表达存储单元的内容用方括号包含有效地址,表达存储单元的内容直接地址也可用标号代表,方括号可省略。直接地址也可用标号代表,方括号可省略。MOV AX, 2000H;AXDS:2000HMOV AX, ES: 2000H;AXES:2000H四、寄存器间接寻址方式四、寄存器间接寻址方式指令中给出的寄存器的内容包含操作数的有效地指令中给出的寄存器的内容包含操作数的有效地址。址。间接寻址中使用的寄存器名要用方括号括起来间接寻址中使用的寄存器名要用方括号括起来1、基
6、址寻址、基址寻址 用用BX或或BP作间接寻址寄存器作间接寻址寄存器 如:如:MOV AX,BX ;隐含在;隐含在DS段段 MOV AX,BP ;隐含在;隐含在SS段段MOV AX, BX;AXDS:BX2、变址寻址、变址寻址 用用SI或或DI作间接寻址寄存器作间接寻址寄存器 如:如:MOV CL, SI MOV AX, DI 单独使用单独使用SI或或DI时,隐含在时,隐含在DS段中段中 在串操作时,在串操作时,SI隐含在隐含在DS段中,段中,DI隐含在隐含在ES段段中。中。3、相对基址寻址、相对基址寻址 指令中给出基址寄存器及位移量,二者之和为操指令中给出基址寄存器及位移量,二者之和为操作数的
7、有效地址。作数的有效地址。 位移量可以是位移量可以是8位或位或16位。位。有效地址有效地址BX/BPBX/BP8/168/16位位移量位位移量4、相对变址寻址、相对变址寻址 指令中给出变址寄存器及位移指令中给出变址寄存器及位移量,二者之和为操作数的有效地址。量,二者之和为操作数的有效地址。有效地址有效地址SI/DISI/DI8/168/16位位移量位位移量段地址对应段地址对应BX/SI/DI寄存器寄存器默认是默认是DS,对应,对应BP寄存器寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI
8、+06H5、 基址变址寻址方式基址变址寻址方式有效地址有效地址由基址寄存器(由基址寄存器(BX或或BP)的内容加上)的内容加上变址寄存器(变址寄存器(SI或或DI)的内容构成:)的内容构成:有效地址有效地址BX/BPSI/DI段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应,对应BP基基址寄存器址寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+SI;AXDS:BX+SIMOV AX, BXSI;AXDS:BX+SI6、 相对基址变址寻址方式相对基址变址寻址方式有效地址有效地址是基址寄存器(是基址寄存器(BX/BP)、变址寄存器)、变址寄存器
9、(SI/DI)与一个)与一个8位或位或16位位移量之和:位位移量之和:有效地址有效地址BX/BPSI/DI8/16位位移量位位移量段地址对应段地址对应BX基址寄存器基址寄存器默认是默认是DS,对应,对应BP基基址寄存器址寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变MOV AX, BX+DI+6;AXDS:BX+DI+6MOV AX, 6BX+DIMOV AX, 6BXDIMOV指令的功能指令的功能立即数寻址方式立即数寻址方式寄存器寻址方式寄存器寻址方式直接寻址方式直接寻址方式间接寻址方式间接寻址方式相对寻址方式相对寻址方式基址变址寻址方式基址变址寻址方式相对基址变址寻址方式相
10、对基址变址寻址方式各种寻址方式综合举例各种寻址方式综合举例设设BX=1200H DI=10A0H 位移量位移量=2BC0H DS=2400H 求各种寻址方式下的有效地址和物理求各种寻址方式下的有效地址和物理地址。地址。 直接寻址直接寻址 指令形式:指令形式: MOV AX, 2BC0H EA= 2BC0H 物理地址物理地址=24000H+2BC0H=26BC0H 基址寻址基址寻址 指令形式:指令形式: MOV AX, BX EA= 1200H 物理地址物理地址=24000H+1200H=25200H 变址寻址变址寻址 指令形式:指令形式: MOV AX, DI EA= 10A0H 物理地址物理
11、地址=24000H+10A0H=250A0H 相对相对基址寻址基址寻址 MOV AX, BX+2BC0H EA= 1200H+2BC0H=3DC0H 物理地址物理地址=24000H+3DC0H=27DC0H 相相对变址寻址对变址寻址 MOV AX, DI+2BC0H EA= 10A0H+2BC0H=3C60H 物理地址物理地址=24000H+3C60H=27C60H相对相对基址变址寻址基址变址寻址 MOV AX, BX+DI+2BC0H EA= 1200H+10A0H+2BC0H=4E60H 物理地址物理地址=24000H+4E60H=28E60H2 8086的指令格式指令格式操作码操作码操作
12、码操作码11REGR/M操作码操作码MODREGR/M操作码(操作码(R)单字节指令(隐含操作数)单字节指令(隐含操作数)单字节指令(寄存器模式)单字节指令(寄存器模式)双字节指令双字节指令 (寄存器到寄存器模式寄存器到寄存器模式)不带位移量的寄存器和内存之间的传送不带位移量的寄存器和内存之间的传送R/M位移低位位移低位位移高位位移高位操作码操作码11操作码操作码R/M数据低位数据低位数据高位数据高位操作码操作码MOD操作码操作码R/M位移低位位移低位 位移高位位移高位 数据低位数据低位 数据高位数据高位立即数送寄存器(设立即数为位)立即数送寄存器(设立即数为位)立即数送内存(设位移量为位立即
13、数送内存(设位移量为位)在操作码中一般有在操作码中一般有3位位 W、 D、 Sl W=0 表示字节操作表示字节操作 W=1表示字操作表示字操作 l D=0 REG是源操作数是源操作数 D=1是目的操作数是目的操作数l S是扩展位是扩展位 (用于加、减和比较和(用于加、减和比较和W组合使用)组合使用)l S=0 W=0 8位操作数位操作数l S=0 W=1 16位操作数位操作数l S=1 W=1 由由8位扩展为位扩展为16位操作数位操作数单字节指令中可隐含指出寄存器名,此类指令少,单字节指令中可隐含指出寄存器名,此类指令少,但执行速度较快。但执行速度较快。8086规定:双操作数指令中(除立即数和
14、串操作规定:双操作数指令中(除立即数和串操作指令),其中一个操作数必须在寄存器中,可缩指令),其中一个操作数必须在寄存器中,可缩短指令长度,另一个操作数可以在寄存器中也可短指令长度,另一个操作数可以在寄存器中也可以在内存单元中。以在内存单元中。8086指令中第二个字节,给出两个操作数在什么指令中第二个字节,给出两个操作数在什么地方,以及计算存储器地址的方法。地方,以及计算存储器地址的方法。R/M MOD 数据数据 0 0存储器寻址不带位移量存储器寻址不带位移量 0 1存储器寻址存储器寻址8位位移量位位移量 1 0存储器寻址存储器寻址16位位移量位位移量 1 1寄存器寻址寄存器寻址 REG W=
15、1 W=0 0 0 0 AX AL 0 0 1 BX CL 0 1 0 CX DL 0 1 1 DX BL 1 0 0 SP AH 1 0 1 BP CH 1 1 0 SI DH 1 1 1 DI BH 0 0 0 1 1 0 0 0 0 BX+SIBX+SI+d8BX+SI+d16 0 0 1 BX+DIBX+DI+d8BX+DI+d16 0 1 0 BP+SIBP+SI+d8BP+SI+d16 0 1 1 BP+DIBP+DI+d8BP+DI+d16 1 0 0 SI SI+d8 SI+d16 1 0 1 DI DI+d8 DI+d16 1 1 0 直接寻址直接寻址 BP+d8 BP+d1
16、6 1 1 1 BX BX+d8 BX+d16一般指令中不出现段寄存器名称,而用隐含一般指令中不出现段寄存器名称,而用隐含关系指明。关系指明。如与隐含关系不同,运用前缀改变。如与隐含关系不同,运用前缀改变。 BX 隐含于隐含于DS段段 BP 隐含于隐含于SS段段 SI、DI单独使用隐含于单独使用隐含于DS段段 基址寄存器和变址寄存器同时出现,以基基址寄存器和变址寄存器同时出现,以基址寄存器隐含关系为准。址寄存器隐含关系为准。 SP 隐含于隐含于SS段段 SI、DI用于串操作时,用于串操作时,SI隐含于隐含于DS段,段, DI隐含于隐含于ES段。段。u 使用前缀的形式使用前缀的形式 ADD AX
17、, ES:SI或或 ES:ADD AX, SI一般用所需的时钟周期数表明一般用所需的时钟周期数表明指令执行时间指令执行时间=基本执行时间基本执行时间+计算有效地址时间计算有效地址时间 +为取操作数和存放结果而访问内存的时间为取操作数和存放结果而访问内存的时间3 8086指令系统指令系统80868086指令系统很丰富,包含指令系统很丰富,包含133133条基本指令,功能条基本指令,功能强。强。一般分为五类来介绍一般分为五类来介绍传送指令传送指令算术运算指令算术运算指令逻辑运算和移位指令逻辑运算和移位指令串操作指令串操作指令控制转移指令控制转移指令一、数据传送类指令一、数据传送类指令数据传送是计算
18、机中最基本、最重要的一种操作数据传送是计算机中最基本、最重要的一种操作, ,传送指令也是最常使用的一类指令传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位除标志寄存器传送指令外,均不影响标志位重点掌握重点掌握MOV XCHG PUSH POP XLAT LEA1、通用数据传送指令、通用数据传送指令提供方便灵活的通用传送操作提供方便灵活的通用传送操作有有3条指令条指令MOVXCHGPUSH POP 基本传送指令基本传送指令MOV(move)把一个字节或字的操作数从源地址传把一个字节或字的操作数从源
19、地址传送至目的地址送至目的地址MOV reg/mem,immMOV reg/mem,imm;立即数送寄存器或主存;立即数送寄存器或主存MOV reg/mem/seg,regMOV reg/mem/seg,reg;寄存器送(段)寄存器或主存;寄存器送(段)寄存器或主存MOV reg/seg,memMOV reg/seg,mem;主存送(段)寄存器;主存送(段)寄存器MOV reg/mem,segMOV reg/mem,seg;段寄存器送寄存器或主存;段寄存器送寄存器或主存演示演示MOV指令举例立即数传送指令举例立即数传送mov cl,4;cl4cl4,字节传送,字节传送mov dx,0ffh;d
20、x00ffhdx00ffh,字传送,字传送mov si,200h;si0200hsi0200h,字传送,字传送mov bvar,0ah;字节传送字节传送;假设;假设bvarbvar是一个字节变量,定义如下:是一个字节变量,定义如下:bvarbvar dbdb 0 0mov wvar,0bh;字传送字传送;假设;假设wvarwvar是一个字变量,定义如下:是一个字变量,定义如下:wvarwvar dwdw 0 0明确指令是字节操作还是字操作明确指令是字节操作还是字操作MOV指令举例寄存器传送指令举例寄存器传送mov ah,al;ahal,字节传送,字节传送mov bvar,ch;bvarch ,
21、字节传送,字节传送mov ax,bx;axbx,字传送,字传送mov ds,ax;dsax,字传送,字传送mov bx,al;bxal,字节传送,字节传送 寄存器具有明确的字节和字类型寄存器具有明确的字节和字类型MOV指令举例存储器传送指令举例存储器传送mov al,bx;alds:bxmov dx,bp;dxss:bp+0mov dx,bp+4;dxss:bp+4mov es,si;esds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令MOV指令举例段寄存器传送指令举例段寄存器传送mov si,dsmov ax,ds;axdsmov es,ax;esaxds 对段寄存器
22、的操作不灵活对段寄存器的操作不灵活MOV指令传送功能图解指令传送功能图解立即数立即数段寄存器段寄存器CS DS ES SSCS DS ES SS通用寄存器通用寄存器AX BX CX DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器非法指令的主要现象:非法指令的主要现象:两个操作数的类型不一致两个操作数的类型不一致无法确定是字节量还是字量操作无法确定是字节量还是字量操作两个操作数都是存储器两个操作数都是存储器段寄存器的操作有一些限制段寄存器的操作有一些限制非法指令两个操作数类型不一致非法指令两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操在绝大多数
23、双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令或者同为字节量,否则为非法指令MOV AL, 050AH;非法指令,;非法指令,修正:修正:;mov ax,050ahMOV SI, DL;非法指令,;非法指令,修正:修正:;mov dh,0;mov si,dx非法指令无法确定是字节量还是字量操作非法指令无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明要利用汇编语言的操作符显式指明MOV BX+SI, 25
24、5;非法指令,;非法指令,修正:修正:;mov byte ptrbyte ptr bx+si bx+si,255;byte ptrbyte ptr 说明是字节操作说明是字节操作;mov word ptrword ptr bx+si bx+si,255;word ptrword ptr 说明是字操作说明是字操作非法指令两个操作数都是存储器非法指令两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)数都是存储单元(存储器操作数)MOV buf2, buf1 如如 MOV BX,SI 此类非法指令此类非法指令修正:修正
25、:;假设;假设buf2和和buf1是两个字变量是两个字变量;mov ax,buf1;mov buf2,ax;假设;假设buf2和和buf1是两个字节变量是两个字节变量;mov al,buf1;mov buf2,al非法指令段寄存器的操作有一些限制非法指令段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令指令系统中,能直接对段寄存器操作的指令只有只有MOV等个别传送指令,并且不灵活等个别传送指令,并且不灵活MOV DS, ES;非法指令,;非法指令,修正:修正:;mov ax,es;mov ds,axMOV DS, 100H;非法指令,;非法指令,修正:修正:;mov ax,
26、100h;mov ds,ax MOV CS, SI;非法指令;非法指令;指令存在,但不能执行;指令存在,但不能执行 交换指令交换指令XCHG(exchange)把两个地方的数据进行互换把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据寄存器与存储器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHG reg,reg/memXCHG reg,reg/mem;regreg reg/memreg/mem演示演示数据交换指令举例数据交换指令举例movmov ax,1199h ax,1199h;ax=1199hax=11
27、99hxchg ah,alxchg ah,al;ax=9911hax=9911h;等同于;等同于 xchg al,ahxchg al,ahmovmov wvar,5566h wvar,5566h;wvarwvar是一个字量变量是一个字量变量xchg ax,wvarxchg ax,wvar ;ax=5566hax=5566h,wvarwvar=9911h=9911h;等同于;等同于 xchg wvar,axxchg wvar,ax 注意:不能在两个内存单元之间交换注意:不能在两个内存单元之间交换如:如:XCHG BXXCHG BX,SI SI 错误!错误! 段寄存器中段寄存器中CSCS、IPIP
28、不能做操作数不能做操作数 堆栈操作指令堆栈操作指令堆栈是一个堆栈是一个“后进先出后进先出LIFO”LIFO”(或说(或说“先先进后出进后出FILO”FILO”)的主存区域,位于堆栈段)的主存区域,位于堆栈段中;中;SSSS段寄存器段寄存器记录其段地址记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈只有一个出口,即当前栈顶;用堆栈堆栈指针寄存器指针寄存器SPSP指定指定堆栈只有两种基本操作:进栈和出栈,对堆栈只有两种基本操作:进栈和出栈,对应两条指令应两条指令PUSH和和POP堆栈由栈底向低地址方向生成堆栈由栈底向低地址方向生成图示图示进栈指令进栈指令PUSH进栈指令先使堆栈指针进栈指令先使堆栈
29、指针SP减减2,然后把一,然后把一个字操作数存入堆栈顶部个字操作数存入堆栈顶部PUSH r16/m16/segPUSH r16/m16/seg;SPSPSPSP2 2;SS:SPr16/m16/segSS:SPr16/m16/seg演示演示push axpush 2000h出栈指令出栈指令POP出栈指令把栈顶的一个字传送至指定的目出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针的操作数,然后堆栈指针SP加加2POP r16/m16/segPOP r16/m16/seg; r16/m16/segSS:SPr16/m16/segSS:SP;SPSPSPSP2 2pop axpop wva
30、r演示演示堆栈操作的特点堆栈操作的特点堆栈操作的单位是字,进栈和出栈只对字进行堆栈操作的单位是字,进栈和出栈只对字进行数据从栈顶压入和弹出时,都是低地址送低字节,数据从栈顶压入和弹出时,都是低地址送低字节,高地址送高字节高地址送高字节堆栈操作遵循先进后出原则,但可用存储器寻址堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据方式随机存取堆栈中的数据堆栈段是程序中不可或缺的一个内存区,常用来堆栈段是程序中不可或缺的一个内存区,常用来n临时存放数据临时存放数据n传递参数传递参数n保存和恢复寄存器保存和恢复寄存器应用举例:应用举例: 设设 SS=1000H SP=2000H AX=A
31、26FH 执行执行 PUSH AX 指令的过程和结果指令的过程和结果 SP-2= 1FFEH则则AX内容压入内存内容压入内存 11FFEH和和11FFFH执行后执行后SP=1FFEH(11FFEH)=6FH(11FFFH)=A2H练习练习1:已知:已知SS=1200H 执行执行 MOV AX, 3765H MOV BX, 4288H MOV SP, 1020H PUSH AX PUSH BX POP CX 执行后执行后 AX=( ) BX=( ) CX=( ) SP=( ) 3765H,4288H,4288H,101EH 2、累加器专用传送指令、累加器专用传送指令 输入输出指令(输入输出指令(
32、IN/OUT指令)指令) 格式:格式:IN AL,port;port为直接端口地址为直接端口地址 IN AL,DX ;DX的内容为端口地址(间接方式)的内容为端口地址(间接方式) IN AX,port; IN AX, DX OUT port, AL OUT DX, AL OUT port, AX OUT DX, AX注意:注意:只能用累加寄存器不能用其它寄存器只能用累加寄存器不能用其它寄存器 当端口地址在当端口地址在00HFFH之间可以用直接地址之间可以用直接地址 当端口地址大于当端口地址大于FFH时必须用时必须用DX间址形式间址形式例:例:IN AL,40H; (40H) AL IN AX,
33、80H; (80H)、()、(81H) AX MOV DX, 0382H IN AL,DX ; (0382H) AL OUT 62H, AL MOV DX, 0380H OUT DX,AX 换码指令换码指令XLAT(查表指令)(查表指令)将将BX指定的缓冲区中、指定的缓冲区中、AL指定的位移处的一个指定的位移处的一个字节数据取出赋给字节数据取出赋给AL换码指令执行前:换码指令执行前:在主存建立一个在主存建立一个字节量表格字节量表格,内含要转换成的目的代码,内含要转换成的目的代码表格首地址表格首地址存放于存放于BXBX,ALAL存放相对表格首地址的存放相对表格首地址的位移量位移量换码指令执行后:
34、换码指令执行后:将将ALAL寄存器的内容转换为寄存器的内容转换为目标代码目标代码XLATXLAT;alds:bx+alalds:bx+al 演示演示将存储器操作数的有效地址送至指定的将存储器操作数的有效地址送至指定的16位通用位通用寄存器寄存器址传送指令址传送指令 三条三条LEA 、LDS、LESLEA r16, mem;r16mem的有效地址的有效地址EA例例1: 有效地址的获取有效地址的获取LEA AX, 2375H ; AX=2375H LEA SP, BX+SI ; SP=(BX)+(SI)区别区别: LEA SI, BUFF; SI=BUFF MOV SI,BUFF; SI=(BUF
35、F) 例例2 MOV BX,400H MOV SI ,3CH LEA BX,BX+SI+0F62H;BX400H3CH0F62H139EHLDS r16, mem;ds、r16mem中的双字中的双字例:例:LDS BX,2300H LES r16, mem ;es、r16mem中的双字中的双字例:例:LES DI,SI4、标志传送指令、标志传送指令 读标志指令读标志指令 LAHF ;标志寄存器低字传送到;标志寄存器低字传送到AH 设标志指令设标志指令 SAHF ; AH的内容送标志寄存器低的内容送标志寄存器低8位位 标志寄存器堆栈指令标志寄存器堆栈指令 PUSHF ;标志寄存器内容(;标志寄存
36、器内容(16位)压栈位)压栈 标志寄存器出栈指令标志寄存器出栈指令 POPF ;弹出标志寄存器的内容。;弹出标志寄存器的内容。MOV指令的功能指令的功能XCHG指令的功能指令的功能堆栈的图示堆栈的图示SSSSSPSP0000H0000H(栈顶)(栈顶)存储器存储器高地址高地址堆栈段堆栈段PUSH指令的功能指令的功能POP指令的功能指令的功能XLAT指令的功能指令的功能二、二、 算术运算类指令算术运算类指令算术运算类指令用来执行二进制的算术运算术运算类指令用来执行二进制的算术运算:算:加减乘除以及加减乘除以及BCD码调整码调整。这类指令会根据运算结果影响这类指令会根据运算结果影响状态标志状态标志
37、,有时要利用某些标志才能得到正确的结果;有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志使用他们时请留心有关状态标志重点掌握重点掌握加法指令:加法指令:ADD、ADC、INC 减法指令:减法指令:SUB 、SBB、DEC、CMP、NEG1、 加法和减法指令加法和减法指令加法指令加法指令:ADD, ADC和和INC减法指令减法指令:SUB, SBB, DEC, NEG和和CMP他们分别执行字或字节的加法和减法运算,他们分别执行字或字节的加法和减法运算,除除INC和和DEC不影响不影响CF标志外,其他按定标志外,其他按定义影响全部状态标志位义影响全部状态标志位操作数组合:操作数组
38、合: dest , src运算指令助记符运算指令助记符 reg, imm/reg/mem运算指令助记符运算指令助记符 mem, imm/regADD dest,src;加法:加法:destdestsrc;ADD指令使目的操作数加上源操作数,指令使目的操作数加上源操作数,和的结果送到目的操作数和的结果送到目的操作数SUB dest,src;减法:减法:destdestsrc;SUB指令使目的操作数减去源操作数,指令使目的操作数减去源操作数,差的结果送到目的操作数差的结果送到目的操作数 不带进位加和减指令不带进位加和减指令 加法例题加法例题mov ax,7348h;AX7348Hadd al,27
39、h;AL48H27H6FH,AX736FH;OF0,SF0,ZF0,PF1,CF0add ax,3fffh;AX736FH3FFFHB36EH;OF1,SF1,ZF0,PF0,CF0减法例题减法例题sub ah,0f0h;AHB3HF0HC3H,AXC36EH;OF0,SF1,ZF0,PF1,CF1mov word ptr200h,0ef00h;200HEF00H,标志不变,标志不变sub 200h,ax;200HEF00HC36EH2B92H;OF0,SF0,ZF0,PF0,CF0sub si,si;SI0;OF0,SF0,ZF1,PF1,CF0 带进位加和减指令带进位加和减指令 ADC d
40、est,src;加法:;加法:destdestsrcCF;ADC指令除完成指令除完成ADD加法运算外,还要加法运算外,还要加上进位加上进位CF,结果送到目的操作数,结果送到目的操作数SBB dest,src;减法:减法:destdestsrcCF;SBB指令除完成指令除完成SUB减法运算外,还要减法运算外,还要减去借位减去借位CF,结果送到目的操作数,结果送到目的操作数例:无符号双字加法和减法例:无符号双字加法和减法mov ax,7856h;AX7856Hmov dx,8234h;DX8234Hadd ax,8998h;AX01EEH,CF1adc dx,1234h;DX9469H,CF0su
41、b ax,4491h;AXBD5DH,CF1sbb dx,8000h;DX1468H,CF0DX.AX8234 7856H1234 8998H8000 4491H1468 BD5DH 比较指令比较指令CMP(compare)CMP dest,src;做减法运算:;做减法运算:destsrc;CMP指令将目的操作数减去源操作数,但指令将目的操作数减去源操作数,但差值差值不回送不回送目的操作数目的操作数比较指令通过减法运算影响比较指令通过减法运算影响状态标志状态标志,用,用于比较两个操作数的大小关系于比较两个操作数的大小关系cmp ax,bxcmp al,100如如A、B两数为无符号数,则通过以下
42、标志判断两数为无符号数,则通过以下标志判断ZF=1,A=B;CF=0,AB;CF=1,A B如如A、B两数为有符号数,不能通过两数为有符号数,不能通过CF标志判断标志判断两数的大、小关系,要使用两数的大、小关系,要使用SF、OF标志标志ZF=1 ,A=BSF、OF同号同号 ,则,则ABSF、OF异号异号 ,则,则AB实例验证实例验证 A=10=00001010B B=-10=11110110B A-B=00001010-11110110 =00010100 SF=0 OF=0 , AB B-A=11110110-00001010=11101100 SF=1,OF=0, A B 增量和减量指令增
43、量和减量指令INC reg/mem;增量(加;增量(加1):):reg/memreg/mem1DEC reg/mem;减量(减;减量(减1):):reg/memreg/mem1INC指令和指令和DEC指令是单操作数指令指令是单操作数指令与加法和减法指令实现的加与加法和减法指令实现的加1和减和减1不同的是:不同的是:INC和和DEC不影响不影响CF标志标志inc si;sisi1dec byte ptr si;sisi1 求补指令求补指令NEG(negtive)NEG reg/mem;reg/mem0reg/memNEG指令对操作数执行指令对操作数执行求补运算求补运算,即用零,即用零减去操作数,
44、然后结果返回操作数减去操作数,然后结果返回操作数求补运算也可以表达成:求补运算也可以表达成:将操作数按位取将操作数按位取反后加反后加1NEG指令对标志的影响与用零作减法的指令对标志的影响与用零作减法的SUB指令一样(总使指令一样(总使CF=1)NEG指令也是一个单操作数指令指令也是一个单操作数指令求补运算例题求补运算例题mov ax,0ff64hneg al;AL064H9CH,AXFF9CH;OF0,SF1,ZF0,PF1,CF1sub al,9dh;AL9CH9DHFFH,AXFFFFH;OF0,SF1,ZF0,PF1,CF1neg ax;AX0FFFFH0001H;OF0,SF0,ZF0
45、,PF0,CF1dec al;AL01H10,AX0000H;OF0,SF0,ZF1,PF1,CF1neg ax;AX000;OF0,SF0,ZF1,PF1,CF0乘法指令规定:乘法指令规定:8位位X8位,积为位,积为16位位 被乘数必须在被乘数必须在AL中,乘积在中,乘积在AX中中 16位位X16位,积为位,积为32位位被乘数必须在被乘数必须在AX中,乘积在中,乘积在DX(高(高16位)、位)、AX中中对标志位的理解:对标志位的理解: CF=OF=1 ,表示结果为,表示结果为16位或位或32位有效。位有效。 CF=0,OF=1,表示只有,表示只有8位或位或16位乘积。位乘积。 2、 乘法指令
46、乘法指令乘法指令分乘法指令分无符号无符号和和有符号有符号乘法指令乘法指令MUL reg/mem;无符号乘法;无符号乘法IMUL reg/mem;有符号乘法;有符号乘法例:例:IMUL BL MUL CX MUL byte ptrdi+04h IMUL word ptrsi3、除法指令、除法指令除法指令的规定:除法指令的规定:被除数是被除数是16位,必须存放于位,必须存放于AX中,此时除数只能中,此时除数只能是是8位,得到的商存于位,得到的商存于AL中,余数在中,余数在AH中。中。被除数是被除数是32位,必须存放于位,必须存放于DX、AX中,此时除中,此时除数只能是数只能是16位,得到位,得到1
47、6位的商存于位的商存于AX中,余数中,余数在在DX中。中。除法运算后,状态标志除除法运算后,状态标志除ZF外,无意义。外,无意义。当有符号数相除,商超出表示范围不表示为溢出,当有符号数相除,商超出表示范围不表示为溢出,其与除数为其与除数为0一样,产生一样,产生0号中断。(除法出错)。号中断。(除法出错)。有符号数相除,会有两种结果,选择余数有符号数相除,会有两种结果,选择余数的符号与被除数相同。的符号与被除数相同。(-30)8= -4余余+2或或-3余余-6 取后者取后者当被除数只有当被除数只有8位或位或16位时必须进行扩展。位时必须进行扩展。除法指令分除法指令分无符号无符号和和有符号有符号除
48、法指令除法指令DIV reg/mem ;无符号除法;无符号除法IDIV reg/mem;有符号;有符号除除法法例例: DIV CL; IDIV BL; DIV word ptrbx; IDIV byte ptr2300h 4、 符号扩展指令符号扩展指令无符号数的扩展高位补无符号数的扩展高位补0,有符号数扩展使用符,有符号数扩展使用符号扩展指令。号扩展指令。符号扩展是指用一个操作数的符号位(最高位)符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,即扩展符号位。形成另一个操作数,即扩展符号位。符号扩展虽然使数据位数加长,但数据大小并没符号扩展虽然使数据位数加长,但数据大小并没有改变,扩
49、展的高位部分仅是低位的符号扩展。有改变,扩展的高位部分仅是低位的符号扩展。符号扩展指令有两条,用来将字节转换为字,字符号扩展指令有两条,用来将字节转换为字,字转换为双字转换为双字CBW;AL符号扩展成符号扩展成AXCWD;AX符号扩展成符号扩展成DX符号扩展例题符号扩展例题mov al,64h;AL64H (机器数)(机器数) ,表示,表示10进制数进制数100(真值)(真值)cbw;将符号将符号0扩展,扩展,AX0064H,仍然表示,仍然表示100mov ax,0ff00h;AXFF00H,表示有符号,表示有符号10进制数进制数256cwd;将符号位将符号位“1”扩展,扩展,DX.AXFFF
50、FFF00H;仍然表示;仍然表示2565、十进制调整指令、十进制调整指令 十进制数调整指令对十进制数调整指令对BCDBCD运算的结果进行十进制调运算的结果进行十进制调整,以得到正确的十进制的运算结果。整,以得到正确的十进制的运算结果。BCDBCD码的运算只有字节运算,且必须用码的运算只有字节运算,且必须用ALAL作目的操作目的操作数。作数。80888088指令系统支持两种指令系统支持两种BCDBCD码调整运算码调整运算q压缩压缩BCD码码就是通常的就是通常的8421码;它用码;它用4个二进个二进制位表示一个十进制位,一个字节可以表示两制位表示一个十进制位,一个字节可以表示两个十进制位,即个十进
51、制位,即0099q非压缩非压缩BCD码码用用8个二进制位表示一个十进制个二进制位表示一个十进制位,只用低位,只用低4个二进制位表示一个十进制位个二进制位表示一个十进制位09,高,高4位任意,通常默认为位任意,通常默认为0 加法调整指令加法调整指令非压缩非压缩BCD码相加后用码相加后用 AAA 调整调整 压缩压缩BCD码相加后用码相加后用 DAA 调整调整例例1:设:设AL=09H CL=07H ADD AL,CL; AL=10H AAA ; 结果:结果: AH=01H AL= 06H 调整的方法:当(调整的方法:当(AL)9或或AF=1 (AL)+06H AL ,然后(,然后(AL) 0FH;
52、 (AH)+1 AH 调整后调整后AF、CF 置置1,其他标志无意义。,其他标志无意义。 例例2:设:设AL=28H CL=53H ADD AL,CL; AL=7BH DAA ; 结果:结果: AL=81H 调整的方法:当调整的方法:当AL中低中低4位位9 (AL)+06H AL 。 调整指令影响调整指令影响AF、CF、PF、SF、ZF,OF无意无意义。义。 减法调整指令减法调整指令非压缩非压缩BCD码相减以后用码相减以后用 AAS调整调整压缩压缩BCD码相减以后用码相减以后用 DAS调整调整AAS指令的方法与指令的方法与AAA相似:相似: 当(当(AL)9或或AF=1(半借位)(半借位) (
53、AL)-06H AL ,然后(,然后(AL) 0FH; (AH)-1 AHDAS指令的方法与指令的方法与DAA相似相似(加变减)。加变减)。 乘法调整指令乘法调整指令BCD码相乘只能用非压缩码相乘只能用非压缩BCD码,因而只有一条码,因而只有一条调整指令即调整指令即 AAM调整方法调整方法(AL)除以)除以0AH,得到的商送到,得到的商送到AH, 余数在余数在AL中。中。 例:例:AL=05H, CL=07H MUL CL ;AL=23H AAM ; AH=03H AL=05H 除法调整指令除法调整指令除法也只有非压缩除法也只有非压缩BCD码相除,用码相除,用AAD调整。调整。除法调整指令用于
54、除法指令之前。除法调整指令用于除法指令之前。调整的方法是将调整的方法是将AX中的中的2位被除数调整好,再除位被除数调整好,再除以除数:以除数:(AH)X(0AH)+(AL) AL 例:例:AX=0402H CL=06H AAD ;AL=2AH DIV CL ;AL=07H三、逻辑运算和移位指令三、逻辑运算和移位指令 逻辑运算即位操作,指令以逻辑运算即位操作,指令以二进制位二进制位为基本单位为基本单位进行数据的操作进行数据的操作当需要对字节或字数据中的各个二进制位操作时,当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令可以考虑采用位操作类指令注意这些指令对标志位的影响注意这些
55、指令对标志位的影响1. 逻辑运算指令逻辑运算指令AND OR XOR NOT TEST2. 移位指令移位指令SHL(SAL) SHR SAR3. 循环移位指令循环移位指令ROL ROR RCL RCR1、逻辑运算指令、逻辑运算指令双操作数逻辑指令双操作数逻辑指令AND、OR、XOR和和TEST设置设置CFOF0,根据结果设置,根据结果设置SF、ZF和和PF状态,而对状态,而对AF未定义;它们的操作未定义;它们的操作数组合与数组合与ADD、SUB等一样:等一样:运算指令助记符运算指令助记符 reg, imm/reg/mem运算指令助记符运算指令助记符 mem, imm/reg 单操作数逻辑指令单
56、操作数逻辑指令NOT不影响标志位,操不影响标志位,操作数与作数与INC、DEC和和NEG一样:一样:NOT reg/mem逻辑与指令逻辑与指令AND对两个操作数执行逻辑与运算,结果送目的操作数对两个操作数执行逻辑与运算,结果送目的操作数AND dest,srcAND dest,src;destdestdestdestsrcsrc 只有相只有相“与与”的两位都是的两位都是1,结果才是,结果才是1;否则,;否则,“与与”的结果为的结果为0。可以使某些位清可以使某些位清0,其余位,其余位不变。不变。逻辑或指令逻辑或指令OR对两个操作数执行逻辑或运算,结果送目的操作数对两个操作数执行逻辑或运算,结果送
57、目的操作数OR dest,srcOR dest,src;destdestdestdestsrcsrc只要相只要相“或或”的两位的两位有一位是有一位是1,结果就是,结果就是1;否则,结果为;否则,结果为0。可以使某些位置可以使某些位置1。逻辑异或指令逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果送目的操作数对两个操作数执行逻辑异或运算,结果送目的操作数XOR dest,srcXOR dest,src;destdestdestdestsrcsrc只有相只有相“异或异或”的两的两位不相同,结果才是位不相同,结果才是1;否则,结果为否则,结果为0。可以使某些位取反。可以使某些位取反。测试指令测试
58、指令TEST对两个操作数执行逻辑与运算,结果并不送对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按目的操作数,仅按AND指令影响标志指令影响标志TEST dest,srcTEST dest,src;destdestsrcsrc AND与与TEST指令的关系,指令的关系,同同SUB与与CMP指令的关系一样指令的关系一样例:例:TEST AL, 01H;测试;测试AL的最低位的最低位 TEST AX,8000H;测试;测试AX的最高位的最高位 TEST BX,00FFH;测试;测试BX的低的低8位位 TEST CL,0F0H ; 测试测试CL的高的高4位位 利用利用ZF标志判断被测试位的状态
59、标志判断被测试位的状态 ZF=1,被测试位为,被测试位为0,否则,为,否则,为1。 逻辑非指令逻辑非指令NOT对一个操作数执行逻辑非运算对一个操作数执行逻辑非运算NOT reg/memNOT reg/mem;reg/memreg/memreg/memreg/mem 按位取反,原来按位取反,原来是是“0”的位变为的位变为“1”;原来是;原来是“1”的位变为的位变为“0”逻辑运算举例逻辑运算举例 mov al,75h;AL75Hand al,32h;AL30H;CFOF0, SF0,ZF0,PF1or al,71h;AL71H;CFOF0,SF0,ZF0,PF1xor al,0f1h;AL80H;
60、CFOF0,SF1,ZF0,PF0not al;AL7FH,标志不变,标志不变逻辑运算指令的应用逻辑运算指令的应用例:将内存例:将内存2000单元的内容单元的内容D0、D3清清0,D2、D4置置1,D1、D6取反,其余位不变。取反,其余位不变。mov bl, 2000hand bl,11110110b;BL中中D0和和D3清清0,其余位不变,其余位不变or bl,00010100b;BL中中D2和和D4置置1,其余位不变,其余位不变xor bl,01000010b;BL中中D1和和D6求反,其余位不变求反,其余位不变mov 2000h , bl2、移位指令、移位指令将操作数移动一位或多位,分成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- LY/T 1913-2025观赏百合
- 护理操作技术护理团队
- 手机护理课件查阅工具
- 2.2 平方根 第2课时 课件(共16张) 2023--2024学年北师大版数学 八年级上册
- 位工资专项协议书
- 合同中止三方协议
- 卫生学考试题库及答案
- 2026年肠道浆膜层炎症诊疗试题及答案(消化内科版)
- 2026年写字楼绿化设计合同协议
- 2026年小程序数据分析服务协议
- 《蒙古国乌兰巴托市空气污染防治问题研究》
- 巨人通力电梯-GFS25培训资料-电气部分 -V3.1
- DB34T∕ 3048-2017 高速公路乳化沥青厂拌冷再生基层施工技术指南
- 五年级语文下册总复习:修改病段练习题及参考答案(人教版)
- DZ∕T 0213-2020 矿产地质勘查规范 石灰岩、水泥配料类(正式版)
- 《欣赏建筑之美》参考课件
- 潘重规敦煌词语敦煌曲子词课件
- 龙湖集团工程管理手册
- 榆阳区可可盖煤矿矿山地质环境保护与土地复垦方案
- GB/T 42532-2023湿地退化评估技术规范
- 苏科版二年级下册劳动第8课《杯套》课件
评论
0/150
提交评论