下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令.控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变说明只有中断返回指令(IRET)改变控制标志位许多转移指令受状态标志位的影响1•无条件转移指令(JMP操作数;程序转向label标号指定的地址)♦寻址方式:直接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式♦目标地址范围/段内(注意转移范围是+-,即前后都可以转移!当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负)伞段内转移 近转移(near)转移范围用二个字节表达,在当前代码段64KB范围内转移(±32KB范围)不需要更改CS段地址,只要改变IP偏移地址,由16位带符号数给出。沪段内转移 短转移(short转移范围用一个字节表达,在当前代码段256B范围内转移(一128〜+127范围),只改变IP的值,由8位带符号数给出。/段间段间转移——远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址。段间间接转移指令中,目的地址存放在连续4个存储单元字节中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。注:实际编程时,汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移程序员可用操作符short、nearptr或farptr强制.廖思考:如果转移超过16BIT,怎么办?答:变成段间转移。JMP1234H这个指令对否?JMP12345678H呢?2、条件转移指令(Jcclable;条件满足,发生转移:IP-IP+8位位移量;条件不满足,顺序执行)注意:1・Jcc本身不是一条指令,它是条件转移指令的统称。2•操作数label是采用短转移,条件转移只能是短转移。3・8位位移量是相对于当前IP的,相对寻址方式。Jcc指令为2个字节,条件不满足时的顺序执行,就是当前指令偏移指针IP加。5・不影响标志,但要利用标。16条指令分成4种情况:⑴判断单个标志位状态⑵比较无符号数高低
⑶比较有符号数大小⑷判断计数器CX为0训JZ/JEZF=1JCONAECF=1MW等干mZF=0不等千湘JNC/JNMJAECF=0JSSF=1JBE/JNACFb1J|ZFb1紆鼾麻千JNSSF=0JNBE/JACF=0£ZF=0秫千鼾倔干JP/JPEPF=1"1”的像为借JL/JNGESFHOF小祕袴干JNP/JPOPF=0“1"JNL/JGESF=OFJOOF=1JLE/JNGZFHOF或ZF=1小干咖干JNOOF=0JNLE/JGSF=OFlZF=0不小干等干庆干指令应用示例:例1•计算IX—YI(绝对值);X和Y为存放于X单元和Y单元的16位操作数;结果存入resultmovax,Xsubax,Yjnsno_negnegax;neg是求补指令No_neg:movresult,ax例2•设字符的ASCII码在AL寄存器中,在字符ASCII码中为“1”的个数已为奇数时,则令其最高位为“0”;否则令最高位为“1”。可尝试一下jp的写法哦~还有,ASCII码是七位!!要记住!!andal,7fh可尝试一下jp的写法哦~还有,ASCII码是七位!!要记住!!;个数已为奇数,则转向nextoral,80h;否则,最高位置“1”next:...例3•记录BX中1的个数方法一:xoral,al;AL=0,CF=0again:testbx,0ffffh;等价于cmpbx,0jznext;ZF=1,去nextshlbx,1jncagainincaljmpagainnext: ... ;AL保存1的个数方法二:xoral,al;AL=0,CF=0again:cmpbx,0jznextshlbx,1;也可使用shrbx,1 adcal,0 这一步好屌!!jmpagainnext: ... ;AL保存1的个数例4.无符号数比较高低补充知识:无符号数的大小用高(人匕02。)低(Below)表示利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系:⑴低于(不高于等于):JB(JNAE)⑵不低于(高于等于):JNB(JAE)⑶低于等于(不高于):JBE(JNA)⑷不低于等于(高于):JNBE(JA)比较之前一定要做可以改变标志位的减法,才能通过标志位来确定两数的高低大小关系。比较两数大小,并将较大的数保存在AX里。cmpax,bx;比较ax和bxjnbnext;若axMbx,转移xchgax,bx ;若axVbx,交换next: ...例5.比较有符号数大小有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)两数的大小分成4种关系:⑴小于(不大于等于):JL(JNGE)⑵不小于(大于等于):JNL(JGE)⑶小于等于(不大于):JLE(JNG)⑷不小于等于(大于):JNLE(JG)尝试将例4程序段改成有符号数比较大小。答:即把JNB改成JNL.3.循环指令(loop)LOOPlabel;CX^CX-1,;CXH0,循环到标号label,CX=0,顺序执行LOOPZlabel;CX—CX-1,
;CXH0且ZF=1,循环到标号label,CX=0,顺序执行LOOPNZlabel;CX^CX-1,;CXH0且ZF=0,循环到标号label,CX=0,顺序执行注意:1、 循环指令利用CX计数器自动减1,方便实现计数循环的程序结构。2、 label操作数采用相对寻址方式。况示例:记录空格个数movcx,count;设置循环次数movsi,offsetstringxorbx,bx;bx清0,用于记录空格数moval,20h非空格,转移是空格,个数加1again:cmpal,es:[si]非空格,转移是空格,个数加1jnznext;ZF=0,incbx;ZF=1,DeccxJnzagainnext: incsiDeccxJnzagainloopagain不为0继续循环;字符个数减不为0继续循环4.子程序指令子程序是完成特定功能的一段程序,当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行,当运行完子程序功能后,采用RET返回指令回到主程序继续执行。CALL指令分成4种类型(类似JMP)CALLlabel ;段内调用、直接寻址CALLr16/m16 ;段内调用、间接寻址CALLfarptrlabel;段间调用、直接寻址CALLfarptrmem;段间调用、间接寻址注意:CALL指令需要保存返回地址:段内调用一一入栈偏移地址IPSP—SP-2,SS:[SP]~IP段间调用一一入栈偏移地址IP和段地址CS(先保护CS,再保护IP)SP—SP-2,SS:[SP]~CSSP~SP-2,SS:[SP]~IPRET指令根据段内和段间、有无参数,分成4种类型RET ;无参数段内返回RETi16 ;有参数段内返回RET ;无参数段间返回RETi16 ;有参数段间返回需要弹出CALL指令压入堆栈的返回地址段内返回一一出栈偏移地址IPIP~SS:[SP],SP—SP+2段间返回一一出栈偏移地址IP和段地址CS(先返回IP,再返回CS)IP~SS:[SP],SP—SP+2CS~SS:[SP],SP—SP+25、中断指令中断的指令有3条:INT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论