




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,3.3.5程序控制指令,程序控制指令分为:转移指令循环控制指令调用和返回指令中断指令,.,2,使程序转移到指定的目标地址,并从该地址开始执行新的程序段。转移指令的实质:改变IP(或CS)的内容。所有转移指令不会影响标志位。分为无条件转移和条件转移两种。,1.转移指令,.,3,(1)无条件转移指令-JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。段内直接转移:JMPdisp指令中给出的8/16位的位移量加到IP。CS保持不变。段内间接转移:JMPreg/memreg/mem中的16位偏移地址送IP。CS保持不变。段间直接转移JMPsegment:offset指令中给出的16位的段和16位的偏移地址送到CS和IP。段间间接转移JMPmem32mem32中的16位的段和16位的偏移地址送到CS和IP。,.,4,转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP的位移量:位移量转移范围汇编语言中格式8位-128+127JMPSHORTOPRD16位-32768+32767JMPNEARPTROPRD例:JMP0120H;直接转向0120HJMPSHORTLP;转向LPJMPNEARPTRBBB;转向BBB由于是段内转移,故转移后CS内容保持不变,段内直接转移,.,5,段内间接转移转移的目标地址由寄存器或存储单元的内容给出。例1:JMPSI若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数。,.,6,例2:JMPBX+DI设指令执行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H;则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成:JMPWORDPTRBX+DI表示所取得的目标地址是一个字。,.,7,段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址。例:JMP2000H:1000H执行时,(IP)1000H,(CS)2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FARPTR。例:JMPFARPTRfar_label其中的far_label为远类型的标号。,.,8,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如:JMPDWORDPTRSI设指令执行前:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H则指令执行后:(IP)=1000H,(CS)=4A00H于是转到4B000H处开始执行指令。例中的DWORDPTR表示转移地址是一个双字。,段间间接转移,.,9,1212,+),4000,41212,DS,SI,00,10,00,4A,41212412134121441215,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMPDWORDPTRSI的机器码,DS:SI,.,10,条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进行分支转移。格式:JXXlabel;xx为条件名称缩写指令的转移范围为-128+127字节。主要的条件转移指令参见p132表3-4。,(2)条件转移指令-JXX,.,11,根据单个标志位设置的条件转移指令JB/JC;低于,或CF=1,则转移JNB/JNC/JAE;高于或等于,或CF=0,则转移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,这类指令主要用来判断两个数的大小。一般指令序列为:CMPdist,src;比较Jxxlabel;根据比较结果转移判断无符号数的大小JA高于则转移(distsrc)转移条件为:CF=0ZF=0JNA/JBE低于或等于则转移(distsrc)转移条件为:CF=1ZF=1,根据组合条件设置的条件转移指令,.,13,JG;大于则转移(distsrc)转移条件为:(SFOF=0)ZF=0JGE;大于或等于则转移(distsrc)转移条件为:(SFOF=0)ZF=1JL;小于则转移(distsrc)转移条件为:(SFOF=1)ZF=0JLE;小于或等于则转移(distsrc)转移条件为:(SFOF=1)ZF=1,判断有符号数的大小,.,14,根据CX内容来决定是否转移的转移指令JCXZlabel若(CX)=0,则转移到label处开始执行。,.,15,例:,在以data为首地址的内存数据段中,存放200个16位带符号数,试找出其中最大和最小的数,并分别放在MAX和MIN中设计思路:1)取出第一个数据分别作为最大值和最小值,分别送入MAX和MIN单元2)比较带符号的大小,须采用JG和JL等用于符号数的条件转移指令START:LEASI,DATA;数据块首地址送地址指针SIMOVCX,200;数据块长度送循环计数器CXCLD;置方向标志DF=0,增量方向LODSW;一个16位带符号数送AXMOVMAX,AX;将该数送MAX单元MOVMIN,AX;将该数送MIN单元DECCX;循环计数器减一NEXT:LODSW;取下一个16位带符号数送AXCMPAX,MAX;与MAX单元的内容相比较JGLARGER;若(AX)(MAX),则转移至LARGERCMPAX,MIN;与MIN单元的内容相比较JLSMALL;若(AX)(MIN),则转移至SMALLJMPGOON;不需要交换,转移至GOONLARGER:MOVMAX,AX;将大数交换至MAX单元中JMPGOON;转移至GOONSMALL:MOVMIN,AX;将小数交换至MIN单元中GOON:LOOPNEXT;(CX)-1,若CX不为0,则转移至NEXTHLT,.,16,2.循环控制指令,用在循环程序中以确定是否要继续循环。循环次数通常置于CX中。转移的目标应在距离本指令-128+127的范围之内。循环控制指令不影响标志位。,.,17,(1)LOOP格式:LOOPlabel操作:(CX)-1CX;若(CX)0,则转至label处执行;否则退出循环,执行LOOP后面的指令。注:LOOP指令与下面的指令段等价:DECCXJNZlabel,.,18,(2)LOOPZ(LOOPE)格式:LOOPZlabel操作:(CX)-1CX;若(CX)0ZF=1,则转至label处执行;否则退出循环,执行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1CX;若(CX)0ZF=0,则转至label处执行;否则退出循环,执行LOOP后面的指令。,.,19,例1:给1A000H开始的256个内存单元均减去1,若发现某个单元减为0则立即退出循环,其后的单元不再减1。程序段如下:(逻辑地址为1A00:0H)MOVAX,1A00HMOVDS,AX;1A00H段MOVDI,-1;初始化偏移地址MOVCX,256;设置循环计数器GOON:INCDI;偏移地址从0开始增加DECBYTEPTRDI;(DS:DI)-1(DS:DI)LOOPNZGOON;若(CX)0ZF=0,则转;至GOON处执行HLT,.,20,例2:在8000H开始的长度为1000字节的字符串中查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。MOVDI,8000HMOVCX,1000MOVAL,SMOVADDR,0FFFFH;查不到S时,0FFFFH送;ADDR单元GOON:SCASB;与字符S比较LOOPNZGOON;若(CX)0ZF=0,则转移JNZDONE;(CX)=0但与S不相等(ZF)=0;程序结束DECDI;DI纪录的是下一单元的地址MOVADDR,DI;查到S的单元地址送ADDRDONE:HLT,.,21,3.过程调用和返回指令,过程(子程序)一段具有特定功能的,供其它程序调用的公用程序。特点调用子程序时,IP(CS)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(CS)。子程序执行结束后一般均要返回调用程序。一次定义,多次调用;可带参数调用,以完成不同的功能。优点程序代码短,结构清晰,便于编程、调试、修改和阅读。两条相关指令:子程序调用指令CALL子程序返回指令RET,.,22,一般格式:CALLsub;sub为子程序的入口根据子程序入口的寻址方式,子程序调用有四类。段内直接调用子程序的偏移地址直接由CALL指令给出。格式:CALLnear_procCALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。注:汇编以后的调用地址是相对于CALL的下一条指令的位移量。例:CALL0120H;子程序偏移地址由指令给出,(1)调用指令CALL,.,23,位移量由汇编程序在汇编时进行计算,如下例:CS:0102CALL0120H;3字节CS:0105001BHCS:0120则位移量为:0120-0105H=001BH于是CALL0120H的机器码为E81B00CS:0102E8CS:01031BCALL0120HCS:010400CS:0105,.,24,子程序的偏移地址在寄存器或存储器中。格式:CALLmem16/reg16CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP。例:CALLBX;子程序地址由BX给出CALLWORDPTRSI;子程序地址在存储器中,段内间接调用,.,25,IPHIPL,代码段,数据段,CALLWORDPTRSI指令的操作图示:假定:(DS)=8000H,(SI)=1200H,81200H,81201H,.,26,子程序的段地址和偏移地址直接由CALL指令给出。格式:CALLfar_proc;far_proc为远过程的地址指令的操作为:CS内容压栈IP内容压栈CS段地址IP偏移地址例:CALL2000H:1000HCALLTIMER;TIMER为远过程,段间直接调用,.,27,子程序的段和偏移地址为存储器的连续4个单元中的内容。格式:CALLmem32指令的操作为:SP(SP)-2(SP)+1,(SP)(CS);CS压栈CS(mem32+2)SP(SP)-2(SP)+1,(SP)(IP);IP压栈IP(mem32)例:CALLDWORDPTRDI调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。,段间间接调用,.,28,CALL,代码段,数据段,IPHIPL,CSHCSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALLDWORDPTRDI,.,29,例:下面的程序执行后,(AX)=?(DX)=?CS:2000HMOVAX,2012H;2012HAX2003HMOVCX,200CH;200CHCX2006HPUSHCX;CX的内容送堆栈2007HCALL4000H;200A送堆栈保存,;4000H送IP堆栈200AHADDAX,BXSP200CHADDAX,DX200EHHLTSPCS:4000HMOVBX,200AH;200A送BXPOPDX;200A弹出堆栈给DXRET;返回主程序,0A,20,0C,20,.,30,段内返回指令RET的操作为:恢复子程序执行前IP的内容。段间返回指令RET的操作为:恢复子程序执行前IP和CS的内容。另有一种带立即数的返回指令“RETn”,其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。例:RET4;返回后再丢弃栈顶的4个字节,(2)返回指令RET,.,31,4.中断指令,8086/8088CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情况将在第六章讨论。中断指令共有三条:(1)INTn执行类型n的中断服务程序,N=0255(2)INTO执行溢出中断的中断服务程序(3)IRET从中断服务程序返回调用程序,.,32,(1)INTn,格式:INTn说明:CPU根据n的值计算出中断向量的地址,该地址放在内存的固定位置n4=向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“中断向量”。,0000:n4,XXH,XXH,YYH,YYH,中断服务程序入口的偏移地址(IP),中断服务程序入口的段地址(CS),中断类型码n=0255,内存,中断向量,.,33,INT指令的操作:将FLAGS压入堆栈;将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈);取中断服务程序入口地址送入CS和IP。INT指令只影响IF(中断允许标志)和TF(跟踪标志),对其余标志位无影响INT指令可用于调用系统服务程序,如INT21H,.,34,INT指令的操作例:,INT21H,IPL,IPH,CSL,CSH,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT21H指令后,保护断点,堆栈,执行INT21H指令前,.,35,INT指令的操作例(续):,执行INT21H指令后,CS=?IP=?因为n=21H,所以n4=84H。下图中,(0:0084H)=2000H:1123H所以:CS=2000HIP=1123H,0000:0084H,23H,11H,00H,20H,IP,CS,0000:21H4,.,36,INTO检查溢出标志OF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版全新房产租赁抵押贷款委托合同
- 2025版财务合规性评估与会计顾问服务合同
- 诺如病毒胃肠炎知识培训课件
- 2025年古建筑修复用吊顶安装施工合同
- 2025年度事业单位临时聘用合同(含合同续签与终止)
- 2025出国留学海外实习项目合作与服务协议
- 2025年度城市更新土石方运输工程合作协议
- 2025年度森林碳汇项目树木种植与碳交易服务合同
- 红酒品鉴师west课件
- 2025年新建住宅区回迁安置房买卖合同(选房尚未开始)
- 资阳市安岳县县属国有企业招聘(33人)考前自测高频考点模拟试题附答案详解
- 2025北京平谷区初三二模数学试题及答案
- 2025年四川省资阳市中考真题化学试题(无答案)
- 2025年中级会计职称考试经济法冲刺试题及答案
- 2025年事业单位工勤技能-福建-福建行政岗位工四级(中级工)历年参考题库典型考点含答案解析
- 2025年应急通信保障中心招聘笔试预测试题及答案
- 2025-2026学年苏少版(新疆专用2024)小学综合实践四年级上册《遇见草木染》教学设计
- 保安培训课件45张
- 成人肺功能检查技术进展及临床应用指南课件
- 2025-2030牛肉分销渠道冲突与供应链协同优化报告
- 肿瘤科中医护士进修汇报
评论
0/150
提交评论