收藏 分享(赏)

2_8086指令系统.ppt

上传人:kpmy5893 文档编号:8505151 上传时间:2019-06-30 格式:PPT 页数:117 大小:393KB
下载 相关 举报
2_8086指令系统.ppt_第1页
第1页 / 共117页
2_8086指令系统.ppt_第2页
第2页 / 共117页
2_8086指令系统.ppt_第3页
第3页 / 共117页
2_8086指令系统.ppt_第4页
第4页 / 共117页
2_8086指令系统.ppt_第5页
第5页 / 共117页
点击查看更多>>
资源描述

1、1,封面,第二章,8086指令系统,2,第二章8086指令系统目录,第二章 8086的指令系统概 述2.1 数据传送类指令2.2 算术运算类指令2.3 位操作类指令2.4 控制转移类指令2.5 串操作类指令2.6 处理机控制类指令要点与习题分析,3,概述,概 述 8086的指令系统按功能分类可以分成六组,本章分类逐条讲解。 在汇编语言中,指令的一般格式为 标号:指令助记符 目的操作数,源操作数:注释其中括弧括起的部分不是必需的,为可选项。“标号”在第三章详细介绍。 后面讲解指令时,除前一章介绍的符号外,本书用AX,BX形式表示寄存器的内容。 学习一条指令应掌握的内容:指令的功能 操作数的寻址方

2、式 指令对标志的影响 避免非法指令,返回第二章,4,2.1节 目录 2.1.1-2.1.5(传送),2.1 数据传送指令2.1.1 通用数据传送指令MOV/XCHG/XLAT2.1.2 堆栈操作指令PUSH/POP2.1.3 标志传送指令LAHF/SAHF/PUSHF/POPF2.1.4 地址传送指令LEA/LDS/LES2.1.5 输入输出指令IN/OUT,返回第二章,5,2.1.1 目录:13,2.1.1 通用数据传送指令1.MOV类指令 MOV reg/mem,imm; MOV seg/reg/mem,reg; MOV seg/reg,mem; MOV reg/mem,seg2.交换指令

3、XCHG3.换码指令XLAT,2.1节 目录,6,2.1.1-1 mov类例1,1.MOV 类指令格式1:MOV reg/mem,immMOV AX,2050H / MOV CL,58H MOV BYTE PTR BX,55H/MOV WORD PTR BX,55HMOV BYTE PTR SI+05,55HMOV BYTI PTR BP+DI,55HMOV BYTE PTR BX+DI+2000H,55HMOV BYTE PTR 4050H,55H MOV 55H,AL MOV DH,385 MOV BX,55H MOV BX,55H MOV DS,2000H,MOV BYTE PTRBX,

4、55H MOV WORD PTRBX,55H,7,mov类例2,格式2: MOV seg/reg/mem,regMOV DS,AX/MOV ES,AX/MOV SS,AXMOV AX,BX /MOV SP,AX /MOV DH,CL/MOV AL,BHMOV 2050H,AX / MOV 2050H,BLMOV BX+SI+2000H,DX / MOV 2005HBPDI,CLMOV DS,AL / MOV CS,AXMOV DL,AX / MOV BX,CL / MOV SI,CH / MOV BL,DI,CS不能做目的操作数,8,mov类例3,格式3: MOV seg/reg,memMOV

5、 DS,BX / MOV ES,BP+SI+25HMOV AX,2050H / MOV AL,2050H注意:MOV mem,mem 形式的指令是非法指令,也就是说,如果一条指令有两个操作数,不允许两个操作数都是存储器数,如下列指令为非法指令:MOV BX,2050H / MOV 2050H,BX+SI该项规定不仅适用于“MOV”类指令,也适用于其他各类指令(串操作除外)。,记住: CS不能作目 的 操 作 数,9,mov类例4(END),格式4:MOV reg/mem,segMOV AX,DS / MOV BX,ES / MOV AX,CSMOV SI,DS / MOV BX+SI,CS “

6、MOV”类指令小结:立即数只能作源操作数,且要与目的操作数匹配。两个操作数类型要匹配。如汇编程序无法确定操作类型,要加类型说明符。CS一般不能作目的操作数(用转移指令改变)。如果指令有两个操作数,不允许两个都是存储器数。上述四类格式以外的指令必定是非法指令。所有“MOV”类指令均不影响标志。,CS可以作源操作数,返回2.1.1,MOV BX,2050H,10,2.1.1-2. xchg -3.XLAT,2.交换指令XCHG指令格式:XCHG reg/mem ,reg/mem;将操作数格式“mem,mem” 排除在外!例:XCHG AX,BX / XCHG DH,CLXCHG CX,2000H

7、/ XCHG BX+SI,AL 交换指令不影响标志。3.换码指令XLAT指令格式:XLAT ;ALDS16+BX+AL 该指令的操作数是隐含的(AL),且寻址方式可理解为寄存器相对寻址,偏移量在AL中。 该指令又称“查表指令”,通常用于编写查表程序。 换码指令不影响标志。,11,查表示意图(end),查表步骤(求某数的平方) 在内存中建立数据表格; 将表格的首地址送入BX中; 假定要求“3”的平方,将3送入寄存器AL中; 执行指令 XLAT; 执行:ALBX+3(DS)执行结束:AL= 9。AL中的内容被“换码”!,表格首地址,查表示意图,2.1节 目录,H,12,2.1.2堆栈操作指令(1)

8、,2.1.2 堆栈操作指令能够实现“后进先出(先进后出)的存储器组织(或存储器块)称为堆栈。引入堆栈:以三层子程序嵌套为例,逐级进入子程序时,A、B、C三点都有断点和现场需要保护,顺序为ABC;当子程序sub3执行结束,逐级返回时,,main,sub1,sub2,sub3,最后被保护的C点数据应最先恢复,最先保护的A点数据应最后恢复。为此,通常在内存中开辟一段区域,结合软硬件技术,使其具有保护数据和后进先出的功能。此为堆栈。,13,堆栈操作指令(2),8086堆栈管理:8086使用段寄存器SS和指针寄 存器SP管理堆栈,SS决定了堆栈区的首地址,SP的初始,14,堆栈操作指令(3),1.PUS

9、H r16/m16/seg;“r16/m16/seg”作为源操作数,堆栈中的存储单元作为目的操作数,指令操作如下:SPSP-1,SS:SPsrc高8位SPSP-1,SS:SPsrc低8位例1:PUSH BX;(设DS:BX字单元数据为55AAH),15,堆栈操作指令(4),2.POP r16/m16/seg;“r16/m16/seg”应看作目的操作数,堆栈中的单元看作源操作数,指令操作如下: dest低8位SS:SP,SP SP+1 dest高8位SS:SP,SP SP+1例2:POP BX;设接在例1后执行。,16,堆栈操作指令(5)(END),使用堆栈指令: 堆栈操作是字操作指令,不要写出

10、“PUSH AL”等。 在“POP”指令中,“POP CS”为非法指令。 堆栈中的数据弹出后,数据并没有在堆栈中消失,除非压入新数据,画图时注意。 堆栈操作指令不影响标志。 使用堆栈指令保护和恢复现场时,要注意指令的排列顺序,如:,PUSH AX PUSH BX PUSH DSPOP DS POP BX POP AX,2.1节 目录,17,2.1.3标志传送指令(1),2.1.3 标志传送指令1.标志寄存器传送 LAHF ;AH标志寄存器低8位,即SF/ZF/AF;PF/CF送AH相应位,不影响标志。 SAHF ;标志寄存器低8位 AH,该条指令影;响前五个标志。 PUSHF ;标志寄存器入栈

11、,不影响标志。 POPF ;标志寄存器SS:SP,SPSP+2;该指令影响标志。,18,标志传送指令(2)(end),2.标志位操作 (1)CF标志 CLC ;CF0 STC ;CF1 CMC ;CFCF (2)DF标志(串操作指令使用) CLD ;DF0 STD ;DF1(3)IF标志(控制可屏蔽中断能否被响应) CLI ;IF0 STI ;IF1注释:对其他标志没有提供直接修改的指令,但是如果必要,可以用前述的四条标志传送指令结合逻辑运算指令进行修改。,2.1节 目录,19,2.1.4地址传送指令(1),2.1.4 地址传送指令1.有效地址传送指令LEALEA r16,mem ;r16me

12、m所指单元的偏移地址例:设BX=0400H,SI=003CHLEA BP,2050h;执行后 BP=2050HLEA BP,SI;执行后 BP=003CHLEA BX,BX+SI;执行后 BX=043CHLEA BX,BX+SI+0F62H;执行后 BX=139EH 备注:指令中“r16”常用的寄存器是BX、BP、SI、DI。 一般不使用其他寄存器。指令中源操作数常用的是变量名,而不是上面例子中例举的形式,如:LEA BX,WORD_VAR。所以,本条指令常被描述为“取变量的偏移地址”,属常用指令。,20,地址传送指令(2),2.指针传送指令LDSLDS r16,mem ;r16mem,DSm

13、em+2操作:按mem规定的寻址方式计算某单元物理地址。按计算出的物理地址做双字操作,即前一个字(偏移指针)送r16,高位字(段指针)送DS。例:设DS=400H,BX=100H,SI=200H,04300=2050H,04302H=0500HLDS SI,BX+SI执行后DS=0500H,SI=2050H示意图: LDS SI,BX+SI,21,地址传送指令(3)(end),3.指针传送指令LESLES r16,mem ;r16mem,ESmem+2 操作解释:基本与“LDS”指令相同,不同的是把段寄存器 DS换成ES。其他问题:“LEA”指令的作用为取偏移地址,要 注意与“MOV”指令区别

14、:设SI=2050H,DS:2050H(DS:SI)=55AAH 则“LEA BX,SI”执行后,BX=“MOV BX,SI”执行后,BX=“LDS”的r16常用SI; “LES”中,r16常用DI。地址传送指令不影响标志。,2050H,55AAH,2.1节 目录,22,2.1.5输入输出指令(1),2.1.5 输入输出指令1.输入指令 IN AL,i8;字节输入,AL端口i8 IN AX,i8;字输入,AL端口i8,AH端口i8+1 IN AL,DX;字节输入,AL端口DX IN AX,DX;字输入,AL端口DX,AHDX+1 注释:“i8”从形式上来说是立即数,实际上是端口地 址,因而指令

15、的寻址方式为直接寻址。 “MOV”指令中,直接寻址要加中括号,输入输出指令不加。(MOV AL,2000H;IN AL,25H) 第三、四两条指令为寄存器间接寻址,但对DX不加中 括号。(mov al,bx;in al,dx),23,输入输出指令(2),2. 输出指令 OUT i8,AL;字节输出,端口i8AL OUT i8,AX;字输出,端口i8AL,端口i8+1AH OUT DX,AL;字节输出,端口DXAL OUT DX,AX;字输出,端口DXAL,DX+1AH注释:输入输出指令从寻址方式来说分成两种: 直接寻址和寄存器DX间接寻址。如果要访问的端口地址 在0255之间,既可以用直接寻址

16、,也可以用DX间接寻 址;如果要访问的端口地址256,则只能用DX间接寻 址。另外,输入输出指令中可用的数据寄存器只能是 AL和AX,其他寄存器不可使用。不影响标志。,24,输入输出指令(3)(end),例题:(对错混合)1.IN AL,205H () 7.MOV AX,55AAH2.IN AX,20H MOV DX,3FCH3.IN AL,25H OUT DX,AX4.IN AH,0FFH () 8.MOV AH,86 5.MOV DX,2050H OUT 25H,AH ()OUT DX,AL 9.IN AL,25H6.MOV DX,2050H MOV BL,ALIN BX,DX () IN

17、 AL,36H(OUT DX,BX ) () MOV BH,AL,2.1节 目录,25,2.2节 目录 2.2.1-2.2.6(算术),2.2 算术运算指令2.2.1 加法指令ADD/ADC/INC 2.2.2 减法指令SUB/SBB/DEC/NEG/CMP2.2.3 乘法指令 MUL/IMUL2.2.4 除法指令 DIV/IDIV2.2.5 符号扩展指令 CBW/CWD2.2.6 十进制调整指令(BCD)/DAA/DAS/AAA/AAS/AAM/AAD,返回第二章,26,2.2.1加法指令(1),2.2.1 加法指令1. ADD ADD reg/mem,imm;dest dest+src A

18、DD reg/mem,reg/mem;dest dest+src;排除操作数:mem ,mem2.ADC指令格式同ADD;dest dest+src+CF3.INCINC reg/mem ; reg/memreg/mem+1,27,加法指令(2),注释:加法指令对标志的影响:ADD和ADC指令对所有的6个状态标志都有影响,INC指令不影响CF,影响其他五个标志。学习加减法指令要会设置标志、使用标志。加减法运算要注意OF和CF的意义不同,用法不同。例题:(对错混排)ADD AL,25H ADD BYTE PTRBX,05ADD AL,125H ADD WORD PTRBX,05ADD AX,25

19、00H ADD BX,2050HADD AX,05 ADD AL,BLADD BX,05 ADD CH,DL,28,加法指令(3),ADD BH,CX ADD AX,DX ADD SI,BP ADD BX,BX+SI ADD DX,BX+DI ADD AX,BX+BP ADD AX,SI+DI ADD BP+DI+205H,AL ADD BP+SI,CX ADD BX,SI+05H,前面所有指令都可以换成 ADC。对于多字节加法,最低字 节(字)可以用ADD,剩下的应 使用ADC。如(dx ax)+(si di)ADD AX,DI;低16位相加ADC DX,SI;高16位相加+CF,INC 2

20、5HINC ALINC CXINC BX+SIINC BYTE PTRBX+SIINC WORE PTRBX+DI+25,29,加法指令(4),加法指令标志设置设AL=76H ADD AL,65H01110110+ 0110010111011011AL=0DBH, OF=1,SF=1,ZF=0 AF=0,PF=0,CF=0OF=1:只对有符号数运算有意义。看作有符号数是+118+101,应等于+219,大于+127,因而溢出。CF=0:只对无符号数运算有意义。118+101=219,219255,无进位。,30,加法指令5 end,加法指令OF设置方法: (正+负)或(负+正)永远不会溢出,O

21、F=0。 正+正,结果为正(符号位为0),OF=0。结果为负(符号位为1), OF=1。 负+负,结果为负(符号位为1),OF=0。结果为正(符号位为0), OF=1。 计算 0FCH + 0FBH11111100+ 11111011111110111 看作有符号数运算:(-4)+(-5)=(-9) OF=0 看作无符号数运算:252 + 251=503 CF=1,返回 2.2,31,2.2.2减法指令(1),2.2.2 减法指令1.SUBSUB reg/mem,imm; dest dest - src SUB reg/mem,reg/mem;dest dest - src;排除操作数:mem

22、 ,mem2.SBB指令格式同SUB;dest dest src CF3.DECDEC reg/mem ; reg/memreg/mem -1,32,减法指令(2),减法指令用法:SUB、SBB、DEC三条指令的指令格式以及基本用法与ADD、ADC、INC相同。SUB和SBB影响所有六个状态标志:AF为半借位,CF为借位;其余4个标志的含义同加法指令。DEC不影响CF标志,影响其他五个标志。,33,减法指令(3),OF和CF标志设置:OF仅仅对有符号数运算有意义。 (正数sub正数)或(负数sub负数) OF=0 正数sub负数,结果的符号位为0, OF=0结果的符号位为1, OF=1负数su

23、b正数,结果的符号位为1, OF=0结果的符号位为0, OF=1CF设置:(借位标志,仅仅对无符号数运算有意 义,对有符号数运算无意义。)够减CF=0;不够减 CF=1。,34,减法指令(4),4.NEG 求补指令NEG reg/mem ; reg/mem 0 reg/mem “求补运算”一般表达为“ 取反加一”,与“零减”等同。例如,将8位二进制数表示为 XXXX XXXXB, 0-XXXX XXXXB =( 1111 1111B + 1 )-XXXX XXXXB 即,35,减法指令(5),相当于减法指令,标志设置与减法指令相同;(只有对零求补,其他情况) (设字长为8位,对-128求补时,

24、OF=1,其它OF=0) 例1:设AL=1010 1010B 执行 NEG AL;AL=0101 0101B+1=01010110B 例2:设DS:BX=(-4)补=1111 1100 执行 NEG BYTE PTRBX 后则 DS:BX=0000 0100=+4(-4的绝对值);结论:对一个负数的补码求补,得到该负数的绝对值。 (其实,反过来也一样,对+执行指令,将得 到-4的补码。),36,减法指令(6)(end),5.CMPCMP reg/mem,imm ; dest srcCMP reg/mem,reg/mem ;排除操作数:mem ,mem; dest src与减法指令不同的是不保留

25、运算结果,即不改变目的操作数,只根据运算结果设置标志。该指令常用来比较两数大小。执行CMP dest,src无符号数比较:CF=0 destsrcCF=1 destsrc有符号数比较,情况较为复杂,在条件转移指令介绍。,返回 2.2,37,2.2.3乘法指令(1),2.2.3 乘法指令1.无符号数乘法指令MUL r8/m8;AXAL r8/m8,字节乘MUL r16/m16;DX,AXAX r16/m16,字乘注释:指令指定的是乘数,被乘数是隐含的。如乘 数类型为字节,则被乘数为AL,16位乘积用AX;如乘数类型为字,则被乘数为AX,32位乘积用DX,AX。影响 CF 、OF 标志:如果乘积的

26、高一半为零,则 CF=OF=0,否则,CF=OF=1。对其他标志无定义。,38,乘法指令(2),例题:无符号数 0B4H 与 11H 相乘MOV AL,0B4H ;180DMOV BL,11H ; 17DMUL BL ;AX=3060D,CF=OF=1(乘积高8位不为零) 用两条指令是否可以?MOV AL,0B4H ;设置被乘数MUL 11H ;指定立即数作乘数 其他指令:MUL BX;DX,AXAXBXMUL BX+SI;当乘数为存储器操作数,MUL BYTR PTRBX+SI MUL WORD PTRBX+SI,39,乘法指令(3)(end),2.有符号数乘法指令IMUL r8/m8 ;A

27、X AL r8/m8IMUL r16/m16 ;DX,AX AX r16/m16指令用法与“MUL”指令基本相同,只是专用于有符号数的相乘。CF = OF = 0,乘积的高一半为低一半的符号扩展(不是有效乘积);CF=OF=1,则乘积的高一半为乘积的一部分。对其他状态标志无定义。相同的二进制数,看作无符号数相乘与看作有符号数相乘,结果是不同的。如 0B4H 与 11H 相乘,使用“MUL”指令,结果为 0BF4H(无符号数3060);如使用IMUL指令,则结果为 0FAF4H,将其看作补码,真值为-1292。,返回 2.2,40,2.2.4除法指令(1),2.2.4 除法指令1.无符号数除法指

28、令DIVDIV r8/m8;ALAXr8/m8的商,AH 余数DIV r16/m16;AXDX AXr16/m16的商,DX余数指令指定的是除数,被除数是隐含的;除数为字节,则称为“字节除”,被除数使用AX;除数为字,称为“字除”,被除数使用DX AX。操作数的格式与乘法指令相同。指令对状态标志无定义。,41,除法指令(2)(end),2. 有符号数除法指令IDIVIDIV r8/m8 ; ALAXr8/m8的商,AH 余数IDIV r16/m16;AXDXAXr16/m16的商,DX余数专用于有符号数除法,其他与DIV相同。除法指令的溢出问题:DIV下列情况可能产生溢出 除数为零 字节除时,

29、被除数的高8位除数(商8位) 字除时,被除数的高16位除数(商16位)有符号数情况类似。当产生除法溢出,CPU自动产生“0号”中断,运行相应中断服务程序。程序设计时,应避免产生除法溢出。,返回 2.2,42,2.2.5符号扩展指令(end),2.2.5 符号扩展指令1.字节扩展为字CBWCBW ; 将AL的符号位扩展到AH2.字扩展为双字CWDCWD ; 将AX的符号位扩展到DX注释:注意符号扩展涉及的对象是AL和AH以及AX和DX,与其他寄存器无关。用来为有符号数除法准备被除数(16位被除数和32位被除数)。为无符号数除法准备被除数,43,符号扩展说明,符号扩展说明 例如,ALBL,由于CP

30、U使用AX作被除数,故必须将AL中的被除数扩展到AX中。如果做有符号数除法,应使用符号扩展指令CBW;如果做无符号数除法,应使AH为0(xor ah,ah或and ah,0/mov ah,0等)。 做AXBX,应使用同样的方法处理被除数,即将符号扩展到DX,或使DX中为0。 除法指令举例: div bl / div byte ptrbx idiv cx / idiv word ptrbp+si div 2050h () div bx(),返回 2.2,44,2.2.6十进制调整指令(1),2.2.6 十进制(BCD码运算)调整指令 压缩的BCD码:一个字节存放两位BCD码,如“0110 100

31、1”(69H),如看成压缩的BCD码,即为十进制数 69。一个字节的压缩BCD码可表示的数:0099。 非压缩的BCD码:一个字节存放一位BCD码,该字节低4位为合法的BCD码,高4位未定义。如“0110 1001”,看成压缩的BCD码,是69;看成非压缩的BCD码,是9。另外: 高4位通常用0表示。(0000 1001) 09的ASCII码也可看成非压缩的BCD码。0011 0000,0011 00010011 1001,45,十进制调整指令(2),补充:调整原理做BCD码运算 9+60 0 0 0 1 0 0 1 + 0 0 0 0 0 1 1 00 0 0 0 1 1 1 19+6应该等

32、于15,即应为 0001 0101,现得到一个非法的BCD码;试一试加 6,加6后,得到了正确结果。,AF=1,非法BCD,46,十进制调整指令(3),BCD码加法运算,当结果大于 9 时 或 AF 或 CF 等于 1 时需要做加6调整。原因:用二进制数运算规律进行十进制数运算。一位十进制数逢十进一,四位二进制数逢十六进一,加6是为了 1)强迫进位 ;2)补充进位多带走的6。BCD码减法运算:够减时不需要调整;AF 或 CF为1 时(有借位),需要做减 6 调整,抵消多借的 6。,47,十进制调整指令(4),1. 压缩BCD码调整指令加法调整DAADAA ;判断AL中的结果(低4位和高4位)是

33、否需要调整,若需要,做加6调整;若不需要,做下一条指令。注释: 如果做BCD码加法运算,ADD、ADC指令后应紧跟DAA指令,以保证结果正确。 调整对象只能是AL寄存器(BCD码运算只能使用以AL寄存器为目的操作数的8位数运算指令)。 对OF标志无定义,设置其他标志。,48,十进制调整指令(5), 减法调整DASDAS : 判断AL中的结果(低4位和高4位)是否需要调整,若需要,做减6调整;若不需要,做下一条指令。注释: 如果做BCD码减法运算,SUB、SBB指令后应紧跟DAA指令,以保证结果正确。 调整对象只能是AL寄存器(BCD码运算只能使用以AL寄存器为目的操作数的8位数运算指令)。 对

34、OF标志无定义,设置其他标志。(关于BCD码符号问题省略),49,十进制调整指令(6),2.非压缩BCD码调整指令加法调整AAAAAA ;操作如下:( AL低4位 9)且AF=0,不需要调整,将AL高4位清零,置CF=AF=0,结束指令。如(0AH AL低4位)或 AF=1,则AL+6(调整),AH+1(将进位记到高位),将AL高4位清0,置CF=AF=1,结束指令。设AH=06,AL=08,BL=09 执行下列指令ADD AL,BL;AH=06H,AL=11H,AF=1,CF=0AAA ;AH=07H,AL=07H,AF=1,CF=1,调,50,十进制调整指令(7),减法调整AASAAS ;

35、操作如下: ( AL低4位 9)且AF=0,不需要调整,将AL高4位清零,置CF=AF=0,结束指令。如果AF=1,则AL 6,AH 1,AL高4位清 0,置AF=CF=1。设AX=0608H BL=09H 执行下列指令SUB AL,BL ;AH=06,AL=0FFH,AF=1 ,CF=1AAS ;AH=05,AL=09, AF=1 ,CF=10608H 09H 68 9=59。,调,只有AF=1,AL在AF间,51,十进制调整指令(8), 乘法调整AAMAAM ;AX将AX中的乘积调整为非压BCD码注释:只能使用字节乘(乘积在AX);相乘的两个非压缩BCD码高4位必须为零;相乘后先得到二进制

36、数乘积(最大9x9=81),在 寄存器AL中(低4位);调整:将AL中的数0AH,商放入AH,余数保存在AL中,在AX寄存器即得到结果的非压缩BCD码。本指令根据AL内容设置SFZFPF,其余无定义。例题:,设AL=07H,BL=09H 执行指令: MUL BL;AH=0 , AL=3FH(63) AAM ;AH=06H,AL=03H;AX=0603H:63的非压缩BCD码,52,十进制调整指令(9)(end), 除法调整AADAAD ;AX将AX中的非压BCD码变成二进制数,即;AL AH10AL ,AH 0注释:其他调整指令先运算,后调整;除法调整是先 调整,后运算。MOV AX,0608

37、H;68的非压缩BCD码,被除数MOV BL,09H ;除数,非压缩BCD码9AAD ;AH=0,AL=1068=68=44H;AX=0044H:变成二进制数的被除数DIV BL ;AL=07(商);AH=05(余数),返回 2.2,53,2.3节 目录 2.3.1-2. 3.3(位),2.3 位操作指令2.3.1 逻辑运算指令AND/OR/XOR/NOT/TEST2.3.2 移位指令SHL/SHR/SAL/SAR2.3.3 循环移位指令ROL/ROR/RCL/RCR,返回第二章,54,2.3.1 逻辑运算指令(1),2.3.1 逻辑运算指令1.与运算指令ANDAND reg/mem , im

38、mAND reg/mem , reg/mem ;排除操作数“mem,mem”注释:操作数格式同加减法指令;设置CF=OF=0,影响SF、ZF、PF,对AF无定义。2.或运算指令OR注释:指令格式、标志设置同AND指令。3.异或运算指令XOR注释:指令格式、标志设置同AND指令。,55,逻辑运算指令(2),4. 测试指令TEST注释:指令格式及运算均与AND指令相同,但是不保留运算结果,即不影响目的操作数,只根据运算结果设置标志。5.非运算指令NOTNOT reg/mem注释:不影响任何标志。 下面举例说明逻辑运算指令的应用。,56,逻辑运算指令(3),屏蔽若干位。 (常用指令)AND AL,0

39、1H;屏蔽AL的D7D1,保留D0AND AL,0FH;屏蔽AL高4位,保留低4位 使若干位置1 (常用指令)OR BL,0F0H;使BL高4位置1,低4位不变 清除CF、OF 或 设置标志AND AL,AL (AND AL,0FFH;OR BL,BL;);类似指令没有改变目的操作数,但使CF=OF=0,也可能纯粹以设置其他标志(ZF)为目的。,57,逻辑运算指令(4),求反 NOT AL / NOT WORD PTRBX+DI对指定位求反XOR AL,0FH;AL高4位不变,低4位求反XOR CL,55H;CL偶数位求反,奇数位不变清除寄存器及CF(常用指令)XOR AX,AX / XOR

40、BX,BX XOR BYTE PTRBX,BYTE PTRBX ,58,逻辑运算指令(END),不改变操作数,测试操作数或操作数的指定位 TEST AL,0FFH;由ZF标志判断AL是否为零;也可以用CMP指令。 TEST AL,01;由ZF标志判断AL的D0是否为零,;ZF=1,则AL.D0=0 ;ZF=0,则AL.D0=1 AND AL,01 ;也可完成上述功能,但是改变了目;的操作数,返回 2.3,59,2.3.2 移位指令(1),2.3.2 移位指令共四条指令,分成逻辑左移、算术左移、逻辑右移和算术右移,其中两条左移指令对应同一条机器指令,所以,从机器指令的角度来说,移位指令只有三条。

41、,符号位不变,60,移位指令(2),1.左移指令(逻辑左移、算术左移:一条指令)SHL reg/mem,1/CL;操作数左移1位或CL规定的;位数,最低位补0,最高位进CF。SAL reg/mem, 1/CL;同SHL2.右移指令(逻辑右移 SHR;算术右移 SAR)SHR reg/mem,1/CL;操作数右移1位或CL规定的;位数,最高位补0,最低位进CF。SAR reg/mem,1/CL;操作数右移1位或CL规定的;位数,最高位不变,最低位进CF。,61,移位指令(3),注 释标志设置AF:对AF无定义;CF:按移入的值或为0或为1;根据移位后的结果设置SF、ZF、PF;OF:当移动一位时

42、,移位后如果符号位发生变化,则OF=1,符号位不发生变化,则OF=0,移位次数大于一时,OF不定。操作数左移一位,相当于乘2(对有符号数同理,只要OF=0,结果就对)。,62,移位指令(4)(end),操作数逻辑右移(SHR)一位,相当于无符号数除以2;操作数算术右移(SAR)一位,相当于有符号数除以2。 指令举例SHL AX,1 SAR BYTE PTRBP+SI,1SHR BH,1 SAR AL,3 ,返回 2.3,MOV CL,3SAR AL,CL,63,2.3.3 循环移位指令(1),2.3.3 循环移位指令小循环(不带进位)左移(ROL)和右移(ROR)大循环(带进位)左移(RCL)

43、和右移(RCR),64,循环移位指令(2)(end),1.小循环移位指令ROL、RORROL reg/mem,1/CL ;左移ROR reg/mem,1/CL ;右移2.大循环移位指令RCL、RCRRCL reg/mem,1/CL ;左移RCR reg/mem,1/CL ;右移例1. 将DX,AX中的32位数左移一位。SHL AX,1RCL DX,1 移位指令和循环移位指令结合,可实现32位数乘2除2。,返回 2.3,65,2.4节 目录,2.4 控制转移类指令2.4.1 无条件转移指令2.4.2 条件转移指令2.4.3 循环控制指令2.4.4 子程序调用及返回指令2.4.5 中断控制指令2.

44、4.6 系统功能调用,返回第2章,66,2.4.1 无条件转移指令(1),2.4.1 无条件转移指令(JMP)1.段内转移直接寻址JMP SHORT LABEL;IPIP+8位偏移量JMP NEAR PTR LABEL; IPIP+16位偏移量 注释:指令中“LABEL”称为“标号”,是某一条指令的名字,其物理意义为指令在内存中的偏移地址。段内:不改变段寄存器(在当前代码段内),只改变指令指针寄存器;直接寻址:汇编指令中直接给出了转移目标的地址,但从指令的操作来说,应属相对寻址。,67,短转移的转移范围,短转移的转移范围:相对于JMP的下一条指令, 转移范围为128127;相对于JMP指令,转

45、移范围 为-126+129;近转移:相对于JMP的下一条指令,转 移范围为3276832767(3276532770)。“JMP SHORT LABEL”示意图:,转移目的地址的计算: IP+偏移量IP 即 IP+(-128+127)IP 当计算上式时,IP为(XXXX+2) 即 XXXX+2+(-128+127)=目的 即 XXXX+(-126+129)=目的 也就是说,相对于地址XXXX来说, 转移范围为 -126+129。,68,无条件转移指令(2),2. 段内转移间接寻址JMP r16/m16;IPr16 或 IPm16指令举例JMP SHORT L_PRO1;短转移,目标指令为L_P

46、RO1JMP NEAR PTR L_PRO2;JMP SI; IPSI,通过寄存器间接给出指令偏移地址。JMP BX; IPBX JMP WORD PTRBX;通过存储器间接给出指令的 偏移地址,而存储器寻址方式为寄存器BX间接寻址。JMP WORD PTRBP+DI+20H;,69,无条件转移指令(3),3. 段间转移直接寻址JMP (FAR PTR) LABEL;IP LABEL的偏移地址,CSLABEL的段地址 注释:“LABEL”是位于另一个代码段的某一条指令的 名字;另外,指令中的“FAR PTR”可以省略,因为汇 编程序可以自动识别:“LABEL”与相应的“JMP”指令 是否在同一

47、代码段内,从而产生段内或段间转移指令的 机器代码。 CODE2 SEGMENTCODE1 SEGMENT PRO1:MOV JMP FAR PTR PRO1 CODE1 ENDS CODE2 ENDS,70,无条件转移指令(4)(end),4. 段间转移间接寻址JMP FAR PTR mem (JMP DWORD PTR mem);IP mem,CS mem+2 注释:通过存储器的一个双字单元提供转移目标的段地 址和偏移地址,低位字为偏移地址,高位字为段地址。JMP DWORD PTRBX+DIDS=4000H,BX=1230H,SI=02H 计算物理地址: 40000H+1230H+2=41232H,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报