逻辑运算转移_第1页
逻辑运算转移_第2页
逻辑运算转移_第3页
逻辑运算转移_第4页
逻辑运算转移_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、1第三节第三节 8086/8088的指令系统的指令系统(续续) 四四. 逻辑运算指令逻辑运算指令 五五. 控制转移指令控制转移指令2四四. 逻辑运算指令逻辑运算指令逻辑指令逻辑指令指令分类指令分类逻逻辑辑运运算算AND、OR、XOR、NOT、TEST移移 位位 SHL、SAL、SHR、SAR 循循环环移移位位 ROL、ROR、RCL、RCR3逻辑运算逻辑运算 :与、或、非、异或与、或、非、异或 特点:二进制数运算特点:二进制数运算 ,按位进行按位进行 与与 运算:运算:有有0则则0,全,全1则则1 或或 运算:运算:有有1则则1,全,全0则则0AB00011011AB0001 A B00011

2、011AB0111例例: 1101 1100 1011 1010 1001 1000例例: 1010 1100 0011 1001 1011 11014 非非 运算:运算: 0则则1,1则则0 异或异或 运算:运算:异则异则1,同则,同则0A0 1A1 0 A B00011011A B0110例例: 1011 1010 0100 0101例例: 1010 1100 0011 1001 1001 01015指指令令格格式式执执行行操操作作 AND dst,src (dst) (dst)(src) OR dst,src (dst) (dst)(src) NOT oprd (oprd) (oprd)

3、 XOR dst,src (dst) (dst)(src) TEST oprd1,oprd2 (oprd1)(oprd2)1. 逻辑运算指令逻辑运算指令6AND AL , 0000 1111BOR BX , 00FFHNOT CLXOR DL, ALTEST AL, 0000 0001Bl 除除NOT指令单操作数外,其它均为双操作数指令单操作数外,其它均为双操作数l 可进行字节或字操作可进行字节或字操作l NOT指令不影响标志指令不影响标志l TEST只影响标志位,不影响操作数。只影响标志位,不影响操作数。其他指令其他指令置置CF、OF为为0,AF不定不定 ( 无意义无意义 )SF、ZF、PF

4、据结果置位据结果置位7例例 数字字符的数字字符的ASCII 对应的二进制数对应的二进制数ASCII数数字字 0930H39H应用:应用: MOV AH, 1 ;利用利用DOS调用调用 INT 21H ;从键盘输入字符到从键盘输入字符到AL中中 AND AL, 0000 1111B ;高高4位为位为0,低,低4位不变位不变 、0011 1001B 39 H 0000 1111 B 0F H 0000 1001B 09 H8 逻辑运算常用于使操作数的某位为逻辑运算常用于使操作数的某位为0或或1, 或测试某位为或测试某位为0还是还是1。l使某位为使某位为1 用该位与用该位与1 相或相或,不变的位与,

5、不变的位与0或。或。l使某位为使某位为0 用该位与用该位与0 相与相与,不变的位与,不变的位与1与。与。l使某位求反使某位求反 用该位与用该位与1 异或异或,不变的位与,不变的位与0异或。异或。l测试某位的值测试某位的值 用用TEST指令,据标志判断指令,据标志判断9例例 21H端口管理中断系统,管理端口管理中断系统,管理8个外设的中断个外设的中断为为0, 允许键盘中断允许键盘中断为为1, 禁止禁止7654321010100010 D7 D6 D5 D4 D3 D2 D1 D0允许键盘中断:允许键盘中断: IN AL,21H ;读入读入21端口内容端口内容 AND AL,1111 1101B

6、;置置D1 = 0,其他位不变其他位不变 OUT 21H ,AL ;送出屏蔽字到送出屏蔽字到21H端口端口禁止键盘中断:禁止键盘中断: IN AL,21H OR AL,0000 0010B ;使使D1为为1 OUT 21H,AL 10例例 379H端口的端口的D7存放打印机的状态存放打印机的状态为为0, 表示打印机忙表示打印机忙为为1, 打印机空闲打印机空闲7654321010100010 D7 D6 D5 D4 D3 D2 D1 D0用查询方式控制打印机工作:用查询方式控制打印机工作: MOV DX, 379H ask: IN AL, DX ;从从379H端口读状态端口读状态 TEST AL

7、, 1000 0000B ;检测检测D7位位 JZ ask ;为为0,打印机忙打印机忙,继续查询继续查询print: 、 ;输出字符打印输出字符打印 112. 移位指令移位指令SHL oprd, 1CLSAL oprd, 1CLSHR oprd, 1CLSAR oprd, 1CL0CF0CFCF0CF执行操作执行操作指令格式指令格式12l 移位规则移位规则 左移:左移: 高位高位 低位低位 右移:右移: 高位高位 低位低位 移出位进入移出位进入CF标志标志 对移位指令,移出对移位指令,移出CF标志后丢失标志后丢失 逻辑左移、算术左移的结果相同逻辑左移、算术左移的结果相同 逻辑右移,新移入的信息

8、以逻辑右移,新移入的信息以0填入填入 算术右移,保持最高有效位原来的值(符号为不变)算术右移,保持最高有效位原来的值(符号为不变)0CF0CFSHLSALCF0CFSHRSAR13例例 若(若(AL)=96H, CF=0 执行执行 SHL AL, 1执行前执行前:(AL)=96H ,CF=010010110执行后:执行后:( (AL)=2CH ,CF=100101100执行前执行前:(AL)=96H ,CF=010010110执行后执行后:(AL)=E5H ,CF=111100101CF例例 若(若(AL)=96H, CF=0, (CL) =2 执行执行 SAR AL, CL143. 循环移位

9、指令循环移位指令指令格式指令格式执行操作执行操作CFCFCFCFROL oprd, 1CLROR oprd, 1CLRCL oprd, 1CLRCR oprd, 1CL15l 移位规则移位规则 左移:左移: 高位高位 低位低位 右移:右移: 高位高位 低位低位 移出位进入移出位进入CF标志标志 对循环移位指令,改变各位的位置,信息不丢失对循环移位指令,改变各位的位置,信息不丢失 带进位循环移位,带进位循环移位,CF标志参加循环移位标志参加循环移位ROLCFCFCFCFRORRCLRCR16例例 若(若(AL)= 96H, CF=0 执行执行 ROL AL, 1执行前执行前:1001010CF=

10、0 , (AL)=96h1执行后执行后:0010101CF=1, (AL)=2Dh1例例 若(若(AL)= 96H, CF=0, (CL)=2 执行执行 RCR AL, CL1001010执行前:执行前:1CF=0 , (AL)=96H0100111右移右移1位位:0CF=0 , (AL)=4BH0010001再右移再右移1位位:1CF=1 , (AL)=25H17注意事项:注意事项: SHL AL, 1 SHR AL, CL ROL BX, 1 RCR AL, CLl源操作数为移位的次数源操作数为移位的次数 为为1可在指令中直接给出可在指令中直接给出 大于大于1时,移位次数需由时,移位次数需

11、由CL给出给出 RCR AX,5 SHL BL, ALl 目的操作数类型决定操作类型目的操作数类型决定操作类型SAL BL,CL 字节操作字节操作ROL BX,CL 字操作字操作当移位次数当移位次数l oprd可以是可以是reg/meml 可进行字节或字操作可进行字节或字操作18用用SAR指令与用指令与用IDIV指令做除法的区别指令做除法的区别用用SAR指令做除法指令做除法(对负数向下舍入)(对负数向下舍入):MOV AX , 81H; (AX) = -127SAR AX , 1; (AX)= - 64用用IDIV指令做除法指令做除法(IDIV指令对负数向上舍入)指令对负数向上舍入) :MOV

12、 AX , 81H;(AX)= -127MOV CL , 2IDIV CL;(AL)= -63 ,(AH)= -119(3)每四位一组存入堆栈(字操作)每四位一组存入堆栈(字操作) (BX)=84F0H (SS)=3000H (SP)=1000H MOV CH,4 MOV CL,4 NE : ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX DEC CH JNZ,NE 1 11 11 11 10 00 00 00 00 01 12 23 34 45 56 67 70 00 01 10 00 00 00 01 18 89 910101111121213131414

13、1515(CH)=4ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=4F08H(AX)=4F08H(AX)=0008H(30FFEH)=0008H(CH)=3ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=F084H(AX)=F084H(AX)=0004H(30FFCH)=0004H(CH)=2ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=084FH(AX)=084FH(AX)=000FH(30FF8H)=000FH(CH)=1ROL BX,CLMOV AX,BX AND

14、AX,000FH PUSH AX(BX)=84F0H(AX)=84F0H(AX)=0000H(30FF4H)=0000H20五五. 控制转移指令控制转移指令在在8086/8088中,中,指令的地址指令的地址固定由固定由CS和和IP两个寄存器决定。两个寄存器决定。CPU 总线总线 内存内存DSESSSCSIP数据暂存器数据暂存器PSW标志标志寄存器寄存器执行部件控制电路执行部件控制电路指令译码器指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地地址址加加法法器器、指令指令1指令指令2指令指令3指

15、令指令4、数据数据1数据数据2数据数据3、地址总线地址总线AB数据总线数据总线DB控制总线控制总线CB地地址址译译码码器器21l CS和和IP两寄存器的内容决定了程序的流程两寄存器的内容决定了程序的流程 改变改变CS和和IP寄存器的值,寄存器的值, 就改变了程序执行的流程。就改变了程序执行的流程。BB0001B12090 指令指令1指令指令2指令指令3指令指令n指令指令n+1指令指令n+3CS:IPCS:IP22l 8086/8088 中中CS和和IP的变化规则的变化规则:第一条指令第一条指令在内存的在内存的ROM区区。 0000:000hFFFF:0000h内存内存1、 RESET复位后复位

16、后, ( CS ) = FFFFH,( IP ) = 0 故故8088从内存从内存FFFF:0000H处取第一条指令执行。处取第一条指令执行。232、非控制转移指令、非控制转移指令,指令本身对,指令本身对CS和和IP均无操作,均无操作, 形成顺序执行结构。形成顺序执行结构。BB0001B12090指令指令1指令指令2指令指令3CS:IP顺序执行结构顺序执行结构: 顺序存放,顺序执行顺序存放,顺序执行t 程序是指令的集合程序是指令的集合t 指令在内存中顺序存放指令在内存中顺序存放t 对非控制转移指令,对非控制转移指令, CPU取来一条指令后,取来一条指令后, 自动将自动将IP的值加上该指令的字节

17、数,的值加上该指令的字节数, 使使IP顺序指向下一条指令,顺序指向下一条指令, CPU取来紧连着的指令执行。取来紧连着的指令执行。 (此时此时IP的变化由的变化由CPU内部的硬件自动完成内部的硬件自动完成)243、 控制转移指令控制转移指令以以CS和和IP为主要操作对象,为主要操作对象, 改变改变CS和和IP的值,使程序产生分支、调用结构。的值,使程序产生分支、调用结构。指令指令1指令指令2指令指令3指令指令439D87D0287C3A30020CS:IP 分支结构、调用结构分支结构、调用结构: 顺序存放,非顺序执行顺序存放,非顺序执行 CMP AX, BX JGE great XCHG AX

18、, BX great: MOV max, AX 、 控制转移指令控制转移指令JGE可以改变可以改变IP的值的值, 使程序非顺序执行使程序非顺序执行25指指令令类类型型助助记记符符无无条条件件转转移移 JMP条条件件转转移移JE/JZ, JNE/JNZ, JS, JNS, JO, JNOJP, JNP, JC, JNC, JCXZJA/JNBE, JAE/JNB, JB/JNAE, JBE/JNAJG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG循循环环控控制制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ过过程程调调用用CALL, RET中中断断指指令令IN

19、T, INTO, IRETl 控制转移指令分类控制转移指令分类掌握:掌握:JMP, JZ, JNZ, JC, LOOP CALL, RET, INT N, IRET26l 控制转移指令(控制转移指令(JMP、Jcc、LOOPxx、CALL)概述)概述例例 JMP exit JZ zero LOOP next CALL display指令格式:指令格式: 助记符助记符 操作数操作数 助记符助记符 JMP、Jcc、LOOPxx、CALL 操作数操作数 给出要转移到的目的地址给出要转移到的目的地址27目的地址在目的地址在reg、mem中,中,取来指令后间接得到目的地址取来指令后间接得到目的地址操作数

20、操作数(目的地址目的地址)的三种表示方法:的三种表示方法:目的地址在指令中目的地址在指令中,取来指令后直接得到目的地址取来指令后直接得到目的地址例例 CMP AX, BX JGE great XCHG AX, BX great: MOV max, AX例例 JMP AX JMP WORD PTR BX 符号地址符号地址 (标号或过程名标号或过程名) 寄存器寄存器reg 存储器存储器mem 28 符号地址符号地址 : 在汇编格式指令中用符号来表示地址在汇编格式指令中用符号来表示地址 可以是可以是标号、过程名标号、过程名(子程名子程名) 标号标号 指示指令所在的地址。指示指令所在的地址。 用用 符

21、号名:符号名: 表示。表示。例例 CMP AX, BX JGE great XCHG AX, BX great: MOV max, AX根据标号与控制转移指令所在位置,标号有三种类型:根据标号与控制转移指令所在位置,标号有三种类型:SHORT 短属性短属性 NEAR 近属性近属性 FAR 远属性远属性 29SHORT 短属性标号短属性标号标号与控制转移指令在同一段中标号与控制转移指令在同一段中,标号的偏移地址距离控制转移指令的偏移地址(标号的偏移地址距离控制转移指令的偏移地址(-128 127)XXXX:(yyyy-128) next: 、 、 、 、 Jcc next XXXX:yyyy 、

22、 、 、 、 XXXX:(yyyy+127) next: 、 位移量位移量 = 符号地址的偏移量符号地址的偏移量 - 当前当前IP的值的值SHORT属性标号的位移量在(属性标号的位移量在(00FFH), 用用1个字节个字节存放存放- -128+ +12730NEAR近属性标号近属性标号标号与控制转移指令在同一段中标号与控制转移指令在同一段中,标号的偏值在标号的偏值在0000 FFFFH。XXXX:0000 next: 、 、 、 、 JMP next XXXX:yyyy 、 、 、 、 XXXX:FFFF next: 、 位移量位移量 = 符号地址的偏移量符号地址的偏移量 - 当前当前IP的值

23、的值 NEAR属性标号的位移量在(属性标号的位移量在(0000FFFFH),用),用 1 个字个字存放存放-yyyyFFFF-yyyy31FAR 远属性标号远属性标号标号与控制转移指令不在同一段中。标号与控制转移指令不在同一段中。 AAAA:bbbb next: 、 、 、 、 JMP next XXXX:yyyy 、 、 、 、 ZZZZ:wwww next: 、 用用2个字个字分别存放符号地址的段值、偏移值分别存放符号地址的段值、偏移值32 过程名过程名 ( 子程名子程名 ) 过程指示过程过程指示过程(子程子程)第一条指令的地址。第一条指令的地址。例例 display PROC near

24、、 、 、 display ENDP按过程与调用语句间的位置,过程有两种类型:按过程与调用语句间的位置,过程有两种类型:NEAR类型类型:调用指令与过程:调用指令与过程在在同一个段中同一个段中FAR类型类型:调用指令与过程:调用指令与过程不在不在同一个段中同一个段中过程定义方法:过程定义方法:符号名符号名 PROC 类型类型 、 、 、符号名符号名 ENDP 33例例 NEAR 类型过程类型过程 (调用指令与过程调用指令与过程在在同一个段中同一个段中) code SEGMENT ;code段段 、 、 CALL sub ;调用调用 、 、 、 、 sub PROC NEAR ;过程定义过程定义

25、 、 、 、 RET ;返回返回 sub ENDP code ENDS 34例例 FAR 类型过程类型过程 (调用指令与过程调用指令与过程不在不在同一个段中同一个段中) code1 SEGMENT ;code1段段 、 、 CALL display ;调用调用 、 、 code1 ENDS code2 SEGMENT ;code2段段 、 display PROC FAR ;过程定义过程定义 、 、 、 RET ;返回返回 display ENDP code2 ENDS 35 当前当前IP的值为控制转移指令下一条指令的偏移地址的值为控制转移指令下一条指令的偏移地址。 位移量位移量 = 符号地址

26、的偏移量符号地址的偏移量 - - 当前当前IP的值。的值。 符号地址(目标地址)符号地址(目标地址)= 当前当前IP的值的值 + 位移量位移量指令格式:指令格式: 助记符助记符 操作数操作数操作数操作数执行操作执行操作符号地址符号地址 (SHORT ) ( IP) (IP)+ 8位位移量位位移量 符号地址符号地址 ( NEAR属性属性) (IP) (IP)+ 16位位移量位位移量reg (16位)位) mem ( DW 类型类型 ) ( IP) ( reg ) (IP) (mem)符号地址符号地址 ( FAR属性属性) ( IP) 符号地址的偏值符号地址的偏值 (CS) 符号地址的段值符号地址

27、的段值mem ( DD类型类型 ) ( IP) ( mem ) (CS) (mem+2 )寻址方式寻址方式段内直接段内直接段内间接段内间接段间直接段间直接段间接间段间接间36转转移移方方式式CS操操作作数数跳跳转转范范围围段段内内直直接接短短 方方 式式不不变变符符号号地地址址(SHORT)-128 127即即 0FFH段段内内直直接接近近 方方 式式不不变变符符号号地地址址(NEAR 属属性性)一一个个段段内内0FFFFH段段 内内间间接接方方式式不不变变regmem (DW 类类型型)一一个个段段内内0FFFFH段段 间间直直接接方方式式变变符符号号地地址址(FAR 属属性性)整整个个内内

28、存存0FFFFFH段段 间间间间接接方方式式变变mem(DD 类类型型)整整个个内内存存0FFFFFHl 转移方式:转移方式:由由CS是否变化、以及操作数类型决定是否变化、以及操作数类型决定37转转移移方方式式无无条条件件转转移移JMP条条件件转转移移Jcc循循环环转转移移LOOPxx子子程程调调用用CALL段段内内直直接接短短 方方 式式段段内内直直接接近近 方方 式式段段 内内间间接接方方式式段段 间间直直接接方方式式段段 间间间间接接方方式式l 各控制转移指令允许使用的转移方式各控制转移指令允许使用的转移方式38例例 JMP again JMP BX JMP WORD PTR BX JM

29、P DWORD PTR BX Jnz next (若若 next的位移量在的位移量在-128127) Jz AX LOOP BX Jnz next (若若 next的位移量超出的位移量超出-128127)指令指令JMP、Jcc、LOOPxx、CALL本身对标志无影响。本身对标志无影响。39 (1) 无条件转移指令无条件转移指令JMP 格式格式 JMP 目标地址目标地址 执行操作执行操作 无条件转移到目标地址处无条件转移到目标地址处 转移方式转移方式 5种方式均可种方式均可例例 、 、 JMP next 、 、next: MOV AX, BX 、40(2) 条件转移指令条件转移指令 格式格式:

30、Jcc 符号地址符号地址 测试条件的助记符测试条件的助记符 执行执行: 当转移条件满足,转向目标地址去执行。当转移条件满足,转向目标地址去执行。 当、不满足,执行当、不满足,执行Jcc后的下一条指令。后的下一条指令。 转移方式转移方式: 只允许段内直接短方式,跳转范围在只允许段内直接短方式,跳转范围在-128127 例例 、 CMP AX, BX JZ zero ; ZF =1 ? 、 、 zero: MOV flag,0 、41按转移条件不同,条件转移指令可以分为四大类按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件以单个状态标志作为转移条件 以以CX的值为的值为0作

31、为转移条件作为转移条件助助记记符符转转移移条条件件JZZF=1JSSF=1JOOF=1JPPF=1JCCF=1助助记记符符转转移移条条件件JNZZF=0JNSSF=0JNOOF=0JNPPF=0JNCCF=0助助记记符符转转移移条条件件JCXZCX=042 以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件 以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件助助记记符符转转移移条条件件JA/ /JNBECFZF=0高高于于/ /不不低低于于等等于于JAE/ /JNB/ /JNCCF=0高高于于等等于于/ /不不低低于于/ /无无进进位位JB/ /JN

32、AE/ /JCCF=1低低于于/ /不不高高于于等等于于/ /有有进进位位JBE/ /JNACFZF=1低低于于等等于于/ /不不高高于于助记符助记符转移条件转移条件JG/ /JNLE(SFOF)ZF=0大于大于/ /不小于等于不小于等于JGE/ /JLSFOF=0大于等于大于等于/ /不小于不小于JL/ /JNGESFOF=1小于小于/ /不大于等于不大于等于JLE/ /JNG(SFOF)ZF=1小于等于小于等于/ /不大于不大于43补充补充: 调用调用DOS功能在屏幕上显示单字符方法功能在屏幕上显示单字符方法在屏幕上显示字符在屏幕上显示字符“1”:MOV DL, 31H ;将字符的将字符的

33、ASCII码放在码放在DL中中MOV AH, 2H ;功能号功能号2放在放在AH中中INT 21H ;DOS中断程序调用中断程序调用44例例 将将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来10100110(BL) MOV CX , 8 ;显示字符个数为显示字符个数为8next: SHL BL , 1 ;将显示位移至将显示位移至CF中中 JC one ;CF=1? MOV DL , 30H ;CF=0, 将将0的的ASCII放在放在DL中中 JMP exitone: MOV DL , 31H ;CF=1, 将将1的的ASCII放在放在DL中中exit: MOV AH ,

34、 2 INT 21H ;调用调用DOS功能显示功能显示 DEC CX ;循环次数减循环次数减1 JNZ next ;判断是否结束判断是否结束 、31 30 31 30 30 31 31 30MOV DL, BL MOV AH, 2HINT 21H思考思考: 1. 去掉指令去掉指令JMP exit ,程序执行结果会怎样?,程序执行结果会怎样? 2. 将指令将指令SHL改为改为SHR,程序执行的结果会怎样?,程序执行的结果会怎样?451 0 1 0 0 1 1 00 1 0 0 1 1 0 10 0 0 0 0 0 0 10 0 1 1 0 0 0 1编程方法编程方法2:10100110(BL)

35、MOV CX , 8 ;显示位数为显示位数为8next: ROL BL , 1 ;将显示位移至将显示位移至D0位位 MOV DL , BL ;放在放在DL中中 AND DL , 01H ;只保存显示位的值只保存显示位的值 ADD DL , 30H ;转换成相应的转换成相应的ASCII MOV AH , 2 INT 21H ;调用调用DOS功能显示功能显示 DEC CX ;循环次数减循环次数减1 JNZ next ;判断是否结束判断是否结束 、31 30 31 30 30 31 31 3046 (3) 循环指令循环指令 格式格式 LOOPxx符号地址符号地址 执行执行 (CX) (CX)- -

36、1 此操作不影响标志此操作不影响标志 检查转移条件,满足,转向目标地址去执行检查转移条件,满足,转向目标地址去执行; 不满足,执行不满足,执行LOOPxx后一条指令后一条指令转移方式转移方式 只允许段内直接短方式,跳转范围只允许段内直接短方式,跳转范围-128127助助记记符符转转移移条条件件不不转转移移条条件件LOOPCX0 0CX=0LOOPZCX0 0 且且 ZF= =1 1CX=0 或或 ZF=0LOOPNZCX0 且且 ZF=0CX=0 或或 ZF=1 与条件转移指令不同的是与条件转移指令不同的是,循环指令隐含,循环指令隐含 ( CX ) 减减1操作。操作。47用用循环指令循环指令改

37、写上例改写上例:将将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来 MOV CX , 8 next: ROL BL , 1 MOV DL , BL AND DL , 0000 0001B ADD DL , 0011 0000B MOV AH , 2 INT 21H DEC CX JNZ next 、 LOOP next DEC CX影响影响ZF标志标志 48循环指令说明:循环指令说明:t比较两串时,当有字符不等,就可退出,说明两字符串不等。比较两串时,当有字符不等,就可退出,说明两字符串不等。可用可用LOOPZ,当相等时继续比较。,当相等时继续比较。t在串中查找字符,查到

38、了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等时继续查找。,不相等时继续查找。l LOOPZ和和LOOPNZ提供了提前结束循环的可能提供了提前结束循环的可能, 不一定要等到不一定要等到(CX)= 0才退出循环。才退出循环。l LOOP退出循环条件是退出循环条件是(CX)= 0t执行完执行完 LOOPNZ或或LOOPZ后,根据后,根据ZF标志的值判断结果标志的值判断结果 对查找字符,对查找字符,ZF=1,说明找到;说明找到; 否则没有找到否则没有找到。 对串比较,对串比较, ZF=1, 说明两串相等;否则不等。说明两串相等;否则不等。49例例 在在string字符串

39、中查找空格字符,串长度为字符串中查找空格字符,串长度为N。A B C D E、 、 、Y Z1234:0000 stringDS:BX修改偏址修改偏址BXYNAL 关键字关键字CX 串长度串长度DS:BX 串首址串首址BX是关键字?是关键字? (CX) (CX)- -1找到处理找到处理未找到处理未找到处理 (CX) = 0 ?YN结束出口结束出口50用条件转移:用条件转移: MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX,string MOV AL,20H next: CMP AL,BX JZ find INC BX DEC CX JNZ next

40、 未找到处理未找到处理 JMP exit find: 找到处理找到处理exit: 结束出口结束出口在在string字符串中查找空格字符,串长度为字符串中查找空格字符,串长度为N。修改偏址修改偏址BXYNAL 关键字关键字CX 串长度串长度DS:BX 串首址串首址BX是关键字?是关键字? (CX) (CX)-1找到处理找到处理未找到处理未找到处理 (CX) = 0 ?YN结束出口结束出口51用循环指令:用循环指令: MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL, 20Hnext: CMP AL,BX PUSHF INC

41、 BX POPF LOOPNZ next JZ find 未找到处理未找到处理 JMP exitfind: 找到处理找到处理exit: 结束出口结束出口修改偏址修改偏址BXYNAL 关键字关键字CX 串长度串长度DS:BX 串首址串首址BX是关键字?是关键字? (CX) (CX)-1找到处理找到处理未找到处理未找到处理 (CX) = 0 ?YN结束出口结束出口52思考思考: 去掉指令去掉指令JMP exit ,程序执行结果会怎样?,程序执行结果会怎样? PUSHF、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 执行完执行完LOOPNZ后,可否根据后,可否根据CX

42、=0来判断查找结果?来判断查找结果? 有人认为有人认为CX=0,即说明没找到,对吗?,即说明没找到,对吗?用条件转移:用条件转移: MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX,string MOV AL,20H next: CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到处理未找到处理 JMP exit find: 找到处理找到处理 exit: 结束出口结束出口用循环指令:用循环指令: MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV A

43、L, 20Hnext: CMP AL,BX PUSHF INC BX POPF LOOPNZ next JZ find 未找到处理未找到处理 JMP exitfind: 找到处理找到处理exit: 结束出口结束出口53 DEC BXnext: INC BX CMP AL, BX MOV CX , N MOV AX , SEG string MOV DS , AX LEA BX , string MOV AL , 20Hnext: CMP AL , BX PUSHF INC BX POPF LOOPNZ next JZ find 未找到处理未找到处理 、 JMP exitfind: 找到处理找到

44、处理 、去掉去掉PUSHF、POPF 指令,程序改写为:指令,程序改写为:54(4) 调用和返回指令调用和返回指令主主程程序序子子程程序序调调用用返返回回返回指令返回指令返返回回 、 、 、调用指令调用指令 、 、 、调调用用 主主程程序序子子程程序序 、55指指令令类类型型助助记记符符过过程程调调用用和和返返回回调调用用指指令令 CALL返返回回指指令令 RET中中断断调调用用和和返返回回中中断断调调用用 INT中中断断返返回回 IRET溢溢出出中中断断 INTO56l 调用指令调用指令CALL 段内直接调用段内直接调用 格式格式 CALL 符号地址符号地址 ;NEAR属性属性 执行执行 (

45、SP) (SP)- 2 (SS:SP) (IP) (IP) 符号地址的偏址符号地址的偏址 ;转至符号地址处取指令转至符号地址处取指令入栈保存返回地址偏值入栈保存返回地址偏值57 段间直接调用段间直接调用格式格式 : CALL 符号地址符号地址 ;FAR属性属性执行执行 : (SP) (SP)- 2 (SS:SP) (CS) (SP) (SP)- 2 (SS:SP) (IP) (IP) 符号地址的偏址符号地址的偏址(CS) 符号地址的段址符号地址的段址入栈保存返回地址段值入栈保存返回地址段值入栈保存返回地址偏值入栈保存返回地址偏值转至符号地址转至符号地址58l 返回指令返回指令RET 段间返回段

46、间返回格式格式 RET 或或 RETF 执行执行 (IP) (SS:SP) (SP) (SP)+ 2 (CS) (SS:SP) (SP) (SP)+ 2从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址偏值从堆栈取返回地址段值从堆栈取返回地址段值 段内返回段内返回 格式格式 RET 执行执行 (IP) (SS:SP) (SP) (SP)+ 259段内和段间返回指令的汇编语言格式均可用段内和段间返回指令的汇编语言格式均可用RET, 但机器码不同,段内为但机器码不同,段内为C3H, 段间为段间为CBH, 汇编程序据过程类型确定返回类型汇编程序据过程类型确定返回类型。例例1

47、 display PROC NEAR 、 、 C3H 、 RET ;NEAR 属性的过程对应段内返回属性的过程对应段内返回 display ENDP例例2 display PROC FAR 、 、 CBH 、 RET ;FAR属性的过程对应段间返回属性的过程对应段间返回 display ENDP60例例 段内直接调用段内直接调用 code SEGMENT 、 、 CALL sub 2000:200H 、 、 、 、 sub PROC NEAR2000:300H 、 、 、 RET sub ENDP code ENDS 0002A4501000:1004SS:SP 调用后调用后 (IP)=300

48、H1000:1006SS:SP 返回后返回后 (IP)=200H0002A4501000:1006SS:SP 1000:1004SS:SP 61例例 段间直接调用段间直接调用 code1 SEGMENT 、 、 CALL sub 2000:100H 、 、 code1 ENDS code2 SEGMENT 、 sub PROC FAR3000:200H 、 、 、 RET sub ENDP code2 ENDS 1000:1002SS:SP 调用后调用后 (IP)=200H (CS)=3000H1000:1006SS:SP 00010020A450 返回后返回后 (IP)=100H, (CS)

49、=2000H1000:1002SS:SP 1000:1006SS:SP 00010020A45062注意:注意: l 在调用、在调用、 返回指令中,返回指令中, 利用堆栈保存、利用堆栈保存、 恢复返回地址。恢复返回地址。l 对堆栈的操作应有目的性,对堆栈的操作应有目的性, 不乱用堆栈操作,不随意修改堆栈内容,不乱用堆栈操作,不随意修改堆栈内容, 否则易造成死机否则易造成死机。63例例 段内直接调用段内直接调用 code SEGMENT 、 、 CALL sub 2000:200H 、 、 、 、 sub PROC NEAR2000:300H 、 MOV AX, 1234h PUSH AX 、

50、RET sub ENDP code ENDS 0002A4501000:1004SS:SP 调用后调用后 (IP)=300H1000:1006SS:SP 返回后返回后 (IP)=1234h1000:1002SS:SP 1000:1006SS:SP 34120020A450结论:结论:不能正常返回不能正常返回300h调用处继续执行调用处继续执行64(5) 中断调用、中断返回指令中断调用、中断返回指令 中断(中断(Interrupt):): 有时当系统运行或程序运行期间遇到某些特殊情况,有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。需要计算机自动执

51、行一组专门的例行程序来进行处理。 中断种类:中断种类: 中断分为内部(软)中断和外部(硬)中断两种。中断分为内部(软)中断和外部(硬)中断两种。 内部中断内部中断如除法运算中除数为如除法运算中除数为0、中断指令引起的中断。、中断指令引起的中断。 外部中断外部中断处理处理I/O设备与设备与CPU之间的通信。之间的通信。65 中断例行程序(或中断子程序)中断例行程序(或中断子程序)(Interrupt routine): 是一种是一种特殊的子程序特殊的子程序, ( (DOS系统中有大量这样的子程系统中有大量这样的子程,用户也可以编写这样的子程),用户也可以编写这样的子程) 特殊在它的特殊在它的调用

52、方法与普通的子程序不同调用方法与普通的子程序不同。 中断子程以中断子程以类型号类型号N来区分来区分 共有共有256个类型号(个类型号(0FFH, 即即 0255)类型号类型号0 处理除处理除0错误的中断子程错误的中断子程类型号类型号09H 处理键盘操作的中断子程(外部中断)处理键盘操作的中断子程(外部中断)类型号类型号21H 与与DOS系统功能相关的中断子程系统功能相关的中断子程66 中断向量表:中断向量表:指存放指存放 256 个中断向量的内存区域个中断向量的内存区域 每个中断向量占每个中断向量占4个单元个单元 256 个中断向量占个中断向量占1K个单元个单元 4 256 = 1024 =

53、1K 中断向量表地址为中断向量表地址为 0:0 0:03FF H 即即0段前段前1K个内存单元个内存单元,低端低端1K内存。内存。67中断向量:中断向量:指中断子程的入口地址指中断子程的入口地址, 包括包括段地址、偏移地址段地址、偏移地址偏移偏移地址地址段段地址地址0:N40:N42中断子程中断子程N的入口地址的入口地址在内存中的位置在内存中的位置其中:前两个单元存放偏移地址其中:前两个单元存放偏移地址 后两个单元后两个单元 存放段地址存放段地址 类型类型N的中断向量固定存放在的中断向量固定存放在4个内存单元中,即:个内存单元中,即: ( 0 : N4 0 : N4 + 3 )68中断子程中断

54、子程1的入口地址:的入口地址:段地址:段地址: 0070h偏移地址:偏移地址:0465h65h04h70h00h0:00040:0006例:例:已知内存已知内存0:47单元的内容如图,单元的内容如图, 问中断类型号为问中断类型号为1的中断子程的入口地址是多少?的中断子程的入口地址是多少?D: DEBUG- -D 0:0 L200000:0000 9E 0F C9 00 0000:0000 9E 0F C9 00 65 04 70 0065 04 70 00-16 00 13 08 65 04 70 00-16 00 13 08 65 04 70 000000:0010 65 04 70 00

55、54 FF 00 F0-58 7F 00 F0 F5 E7 00 F00000:0010 65 04 70 00 54 FF 00 F0-58 7F 00 F0 F5 E7 00 F0- -思考:思考:用什么命令可以查看到该中断子程?用什么命令可以查看到该中断子程?- U 0070:046569类型类型FF中断向量中断向量类型类型0中断向量中断向量 、 段值段值类型类型0向量的偏值向量的偏值类型类型1向量的偏值向量的偏值 、 段值段值1020H3040H类型类型FF向量的偏值向量的偏值 、 段值段值类型类型1中断向量中断向量类型类型N中断向量中断向量0 : 00000 : 00040 : N4

56、0 : 03fc中中断断向向量量表表0:03FF例中类型例中类型N的中断子程从的中断子程从3040:1020H开始开始70 有的中断子程在软、硬件有的中断子程在软、硬件条件满足时条件满足时,CPU会自动去执行会自动去执行 例如:例如: 除除0时时,CPU自动执行自动执行类型类型0的中断子程的中断子程 按下某键按下某键,CPU自动执行自动执行类型类型09的中断子程的中断子程(外部中断)(外部中断)71l 中断调用指令中断调用指令INT保保存存现现场场取中断子程入口地址取中断子程入口地址入栈保存入栈保存IP入栈保存入栈保存CS入栈保存入栈保存PSW清清IF标志标志清清TF标志标志 格式格式 : I

57、NT N ;其中其中 N=0 FFH 即即0255 执行执行 : (SP) (SP)- - 2 (SS:SP) (PSW) IF 0 TF 0 (SP) (SP)- - 2 (SS:SP) (CS) (SP) (SP)- - 2 (SS:SP) (IP) (IP) (0: N 4) (CS) (0: N4 + 2) 72q CPU响应一次中断自动完成三件事情:响应一次中断自动完成三件事情:(PSW)入栈)入栈 保护现场,保护现场,IF=0,TF=0,(CS),(),(IP)保存入栈)保存入栈 保留断点,保留断点, 转中断例行程序去执行。转中断例行程序去执行。从中断向量表获取中断子程的入口地址从

58、中断向量表获取中断子程的入口地址CS:IP ,转至中断子程入口取指令转至中断子程入口取指令73执行执行INT前前 SS:SP(PSW)(CS)(IP) SS:SPIF=0,TF=0从中断向量表获取中断子程的入口地址,从中断向量表获取中断子程的入口地址,CS:IP转至中断子程入口取指令转至中断子程入口取指令INT指令指令执行执行INT后后74l中断返回指令中断返回指令IRET 格式格式 IRET 执行执行 (IP) (SS:SP) (SP) (SP)+ 2 (CS) (SS:SP) (SP) (SP)+ 2 (PSW) (SS:SP) (SP) (SP)+ 2中断返回时:中断返回时: 恢复(恢复

59、(IP)、()、(CS)及()及(PSW)从堆栈取返回地址,从堆栈取返回地址,并恢复现场并恢复现场75 CS:IP转至主程被中断处取指令转至主程被中断处取指令执行执行IRET后后 SS:SP(PSW)(CS)(IP)执行执行IRET前前 SS:SP 、76 内内 存存 0000:0000 、 、0:1C4 =70h FF53H 中断向量表中断向量表0:1C4+2=72h F000H (1K字节字节) 、 0:03FFH 、 、 、 INT 1CH 中断调用中断调用 1271:0102H 、 、 、 、 、 F000:FF53H 、 、 中断子程中断子程 、 IRET 中断返回中断返回 、 、

60、F000:FFFFH 、(PSW)=0300HIF=1,TF=12000:0106SS:SP INT 1C执行前执行前 IF=1,TF=1 (PSW) =0300H (CS) )=1271H 2000:0100SS:SP 127100 03 0102INT 1C执行后执行后 (IP) =0102H (PSW)=0000HIF=0,TF=0IRET执行后执行后 2000:0106SS:SP (CS)=F000, (IP)=FF53、了解了解 INT指令调用中断子程指令调用中断子程 IRET指令中断返回过程指令中断返回过程77注意:注意: 不随意修改中断向量表的内容,否则易造成死机不随意修改中断向

温馨提示

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

评论

0/150

提交评论