




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、13.3.5 程序控制指令程序控制指令分为:转移指令循环控制指令调用和返回指令中断指令2使程序转移到指定的目标地址,并从该地址开始执行新的程序段。转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。1.转移指令34转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于相对于IPIP的的位移量位移量: 位移量位移量 转移范围转移范围 汇编语言中格式汇编语言中格式 8 8位位 -128 -128+127 +127 JMP SHORT OPRDJMP SHORT OPRD 16 16位位 - -3276832768+ +32767 JMP
2、 NEAR PTR OPRD32767 JMP NEAR PTR OPRD例:JMP0120H ;直接转向0120H JMPSHORT LP ;转向LP JMPNEAR PTR BBB;转向BBB由于是段内转移,故转移后CS内容保持不变 段内直接转移段内直接转移5段内间接转移段内间接转移转移的目标地址由寄存器寄存器或存储单元存储单元的内容给出。 例例1:JMP SI若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。注意:目标地址以段内偏移的形式给出,而不是相注意:目标地址以段内偏移的形式给出,而不是相对于对于IPIP的位移量,所以它是一个
3、的位移量,所以它是一个1616位的操作数位的操作数。6例例2:JMP BX+DI设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMPJMP WORD PTRBX+DIWORD PTRBX+DI表示所取得的目标地址是一个字。7段间直接转移段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。 例:例:JMP2000H:1000H执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR
4、。 例:例:JMP FAR PTR far_label其中的far_label为远类型的标号。8转移的目的地址(段和偏移)在两个相邻的字存储单元字存储单元中。例如:JMPJMP DWORD PTRSIDWORD PTRSI设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H则指令执行后:(IP)=1000H,(CS)=4A00H于是转到4B000H处开始执行指令。例中的DWORD PTRDWORD PTR表示转移地址是一个双字。段间间接转移段间间接转移91212+)4000 41212DSSI0010004A 412124121
5、3412144121510004A00IPCS段间间接转移操作示意图段间间接转移操作示意图1111111111101100JMP DWORD PTR SI的机器码DS:SI10条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进行分支转移。格式: JXX label;xx为条件名称缩写指令的转移范围为-128+127字节。主要的条件转移指令参见p132表3-4。(2)(2)条件转移指令条件转移指令 - J- JXX11 根据单个标志位设置的条件转移指令根据单个标志位设置的条件转移指令JB/JC ;低于,或CF=1,则转移JNB/JNC/JAE ;高于或等于,或CF=0,则
6、转移JP/JPE ;奇偶标志PF=1(偶),则转移JNP/JPO ;奇偶标志PF=0(奇),则转移JZ/JE ;结果为零(ZF=1),则转移JNZ/JNE ;结果不为零(ZF=0),则转移JS ;SF=1,则转移JNS ;SF=0,则转移JO ;OF=1,则转移JNO ;OF=0,则转移12这类指令主要用来判断两个数的大小。一般指令序列为: CMP dist,src ;比较 Jxx label ;根据比较结果转移 判断无符号数的大小lJA 高于则转移(distsrc) 转移条件为: CF=0ZF=0lJNA/JBE 低于或等于则转移(distsrc) 转移条件为: CF=1ZF=1 根据组合条
7、件设置的条件转移指令根据组合条件设置的条件转移指令13lJG ;大于则转移(distsrc) 转移条件为: (SF OF=0)ZF=0lJGE ;大于或等于则转移(distsrc) 转移条件为: (SF OF=0)ZF=1lJL ;小于则转移(distsrc) 转移条件为: (SF OF=1)ZF=0lJLE ;小于或等于则转移(distsrc) 转移条件为: (SF OF=1)ZF=1 判断有符号数的大小14根据根据CXCX内容来决定是否转移的转移指令内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。15例:在以data为首地址的内存数据段中,
8、存放200个16位带符号数,试找出其中最大和最小的数,并分别放在MAX和MIN中设计思路:1)取出第一个数据分别作为最大值和最小值,分别送入MAX和MIN单元 2)比较带符号的大小,须采用JG和JL等用于符号数的条件转移指令 START: LEA SI ,DATA ;数据块首地址送地址指针SI MOVCX ,200 ; 数据块长度送循环计数器CX CLD ; 置方向标志DF=0,增量方向 LODSW ; 一个16位带符号数送AX MOVMAX, AX ; 将该数送MAX单元 MOV MIN , AX ; 将该数送MIN单元 DEC CX ; 循环计数器减一 NEXT: LODSW ; 取下一个
9、16位带符号数送AX CMP AX, MAX ; 与MAX单元的内容相比较 JGLARGER ; 若(AX) (MAX) ,则转移至LARGER CMP AX, MIN ;与MIN单元的内容相比较 JL SMALL ; 若(AX)(MIN), 则转移至SMALL JMP GOON ; 不需要交换,转移至GOONLARGER: MOV MAX, AX ; 将大数交换至MAX单元中 JMP GOON ;转移至GOONSMALL: MOV MIN, AX ; 将小数交换至MIN单元中GOON: LOOP NEXT ; (CX)-1,若CX不为0,则转移至NEXT HLT162.循环控制指令用在循环程
10、序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128+127的范围之内。循环控制指令不影响标志位。17(1)LOOP格式:格式:LOOP LOOP label操作:操作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 注:注:LOOP指令与下面的指令段等价:指令与下面的指令段等价: DEC CX JNZ label18(2)LOOPZ (LOOPE)格式:格式:LOOPZLOOPZ label操作:操作:(CX)-1CX; 若(CX)0ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。(3
11、)LOOPNZ (LOOPNE)格式:格式:LOOPNZ LOOPNZ label操作:操作:(CX)-1CX; 若(CX)0ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。19例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元不再减1。程序段如下:(逻辑地址为1A00:0H) MOV AX, 1A00H MOV DS, AX ; 1A00H段 MOV DI, -1 ;初始化偏移地址 MOV CX, 256 ;设置循环计数器GOON: INC DI ;偏移地址从0开始增加 DEC BYTE PTRDI ;(DS:DI)
12、-1 (DS:DI) LOOPNZ GOON ;若(CX)0ZF=0,则转 ;至GOON处执行 HLT 20例2:在8000H开始的长度为1000字节的字符串中 查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。 MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH ;查不到S时,0FFFFH送 ;ADDR单元 GOON: SCASB ;与字符S比较 LOOPNZ GOON;若(CX)0ZF=0,则转移 JNZ DONE ;(CX)=0但与S不相等(ZF)=0 ; 程序结束 DEC DI ;DI纪录的是下一单元
13、的地址 MOV ADDR,DI ;查到S的单元地址送ADDR DONE: HLT 213. 过程调用和返回指令过程(子程序) 一段具有特定功能的,供其它程序调用的公用程序。特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,多次调用;可带参数调用,以完成不同的功能。优点 程序代码短,结构清晰,便于编程、调试、修改和阅读。 两条相关指令: 子程序调用指令 CALL 子程序返回指令 RET22一般格式:一般格式:CALL CALL subsub ; ;subsub为子程序的入口为子程序的入口根据子程序
14、入口的寻址方式,子程序调用有四类。段内直接调用段内直接调用子程序的偏移地址直接由CALL指令给出。 格式:格式:CALL CALL near_procnear_proc CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。 注:汇编以后的调用地址是相对于CALL的下一条指令的位移量。例:例:CALL 0120H ;CALL 0120H ;子程序偏移地址由指令给子程序偏移地址由指令给出出(1)调用指令CALL23位移量由汇编程序在汇编时进行计算,如下例: CS:0102 CALL 0120H;3字节 CS:0105 001BH CS:0120 则位移量为: 0120-010
15、5H=001BH于是CALL0120H的机器码为E8 1B 001B 00 CS:0102E8 CS:01031B CALL 0120H CS:010400 CS:0105 24子程序的偏移地址在寄存器或存储器中子程序的偏移地址在寄存器或存储器中。 格式:格式:CALL CALL mem16/reg16mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。 例: CALLBX ;子程序地址由BX给出 CALLWORD PTRSI ;子程序地址在存储器中段内间接调用段内间接调用25CALL IPH IPL操作图示:操作图示:81200H81201
16、H26子程序的段地址和偏移地址直接由子程序的段地址和偏移地址直接由CALLCALL指令给出。指令给出。 格式:格式:CALL CALL far_procfar_proc ;far_proc ;far_proc为远过程的地址为远过程的地址指令的操作为:指令的操作为: CSCS内容压栈内容压栈 IPIP内容压栈内容压栈 CSCS段地址段地址 IPIP偏移地址偏移地址例:CALL 2000H:1000H CALL TIMER ;TIMER为远过程段间直接调用段间直接调用27子程序的段和偏移地址为存储器的连续子程序的段和偏移地址为存储器的连续4 4个单元中的内容。个单元中的内容。 格式:格式:CALL
17、 CALL mem32mem32指令的操作为:指令的操作为: SP(SP)-2SP(SP)-2 ( (SP)+1,(SP)(CS) ;CSSP)+1,(SP)(CS) ;CS压栈压栈 CS CS(mem32+2)(mem32+2) SP(SP)-2SP(SP)-2 ( (SP)+1,(SP)(IP) ;IPSP)+1,(SP)(IP) ;IP压栈压栈 IP IP(mem32)(mem32)例:CALL DWORD PTRDI调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。段间间接调用段间间接调用28CALL IPH IPL CSH CSLDID
18、I+1DI+2DI+3段间间接调用示意图段间间接调用示意图29例:下面的程序执行后,(AX)=? (DX)=? CS:2000H MOV AX, 2012H ;2012H AX 2003H MOV CX, 200CH ; 200CH CX 2006H PUSH CX ;CX的内容送堆栈 2007H CALL 4000H ;200A送堆栈保存, ;4000H送IP 堆栈 200AH ADD AX, BX SP 200CH ADD AX, DX 200EH HLT SP CS:4000H MOV BX, 200AH;200A送BX POP DX ; 200A弹出堆栈给DX RET ; 返回主程序0
19、A200C2030段内段内返回指令RET的操作为: 恢复子程序执行前IP的内容。段间段间返回指令RET的操作为: 恢复子程序执行前IP和CS的内容。 另有一种带立即数的返回指令另有一种带立即数的返回指令 “ RET n RET n ”,其,其中中n n为偶数,表示从栈顶弹出地址后另外丢弃的字为偶数,表示从栈顶弹出地址后另外丢弃的字节数。节数。例:例:RET 4 ;RET 4 ;返回后再丢弃栈顶的返回后再丢弃栈顶的4 4个字节个字节(2)返回指令RET314.中断指令8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“
20、断点”。有关中断的详细情况将在第六章讨论。 中断指令共有三条: (1)INT n 执行类型n的中断服务程序,N=0255 (2)INTO 执行溢出中断的中断服务程序 (3)IRET 从中断服务程序返回调用程序32(1) INT n 格式: INT n 说明:CPU根据n的值计算出中断向量的地址,该地址放在内存的固定位置 n4 = 向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“中断向量”。0000 : n4 XXHXXHYYHYYH中断服务程序入中断服务程序入口的偏移地址口的偏移地址(IP)中断服务程序入中断服务程序入口的段地址口的段地址(CS)中断类型码中断
21、类型码n = 0255内存中断向量33INT指令的操作: 将FLAGS压入堆栈; 将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈); 取中断服务程序入口地址送入CS和IP。 INT指令只影响IF(中断允许标志)和TF(跟踪标志), 对其余标志位无影响INT指令可用于调用系统服务程序,如INT 21H34INT指令的操作例: INT 21HIPLIPHCSLCSHSP=1200FLAGSLFLAGSHSP=11FA执行执行INT 21H指令后指令后保护断点保护断点堆栈堆栈执行执行INT 21H指令前指令前35INT指令的操作例(续): 执行INT 21H指令后, CS=? IP=?因为因为n=21H,所以,所以n4=84H。下图中,下图中,(0:0084H)=2000H:1123H所以:所以: CS=2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高速公路项目技术方案
- 2025全国特种作业操作证安全检查作业(露天矿山)模拟考试试卷(附答案)
- 六年级数学单元知识点测试题
- 岩石力学实验标准操作方法大全
- 2025年注册会计师(CPA)考试 会计科目考前冲刺复习指导试卷
- 2025年考研英语(一)完形填空专项训练试卷:词汇积累与解题策略
- 四年级语文《长城》课文解析与教学案例
- 2025年注册会计师(CPA)考试会计科目押题模拟试卷冲刺
- 隧道二次衬砌专项施工方案编制指南
- 2025年经济师职业资格考试 经济基础知识重点考点强化试卷
- 检验科运用PDCA循环降低检验标本的丢失率和不合格率
- 化学(基础模块)中职PPT完整全套教学课件
- 安全用电的触电急救
- 离心式通风机-离心式通风机的构造和工作原理
- GCP的质量控制课件
- 卿涛人力资源管理第2章人力资源战略
- 2023年12月英语四级真题及答案下载(第一套)(word版)
- 2022年全国医院感染横断面调查个案登记表
- 新能源概论新能源及其材料课件
- 2016年-中国PCI冠脉介入指南专业解读
- 幼儿园教学课件小班社会《孤独的小熊》课件
评论
0/150
提交评论