如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
(一)无条件转移和条件转移指令五.控制转移指令(五.控制转移指令Controltransferinstructions)1、JMP(Jump)无条件转移指令转移分成两类:段内或段间转移。包括:无条件转移指令有五种:转移指令段内转移:只要改变IP寄存器的内容子程序调用和返回指令段内直接转移、段内相对转移、段内间接转移。循环控制指令段间直接转移:要修改IP、CS寄存器的内容中断指令。段间直接转移、段间间接转移:JMP指令操作:无条件地将控制转移到指令中规定的目的地。目标地址可以是:直接方式/间接方式给出。JMP指令不影响标志位。2、Jcc条件转移指令2Jcc指令格式:JccOPR“cc”-表示条件。是段内相对转移,转移范围为:-128~+127。128127操作:根据上一条指令所设置的条件码来判别测试条件转移。具体:每一种条件转移指令都有它的测试条件。•单标志位条件转移•根据两个无符号数比较结果转移满足条件时:•比较两个带符号数,并根据比较结果转移()←()位移量•测试CX的值为零转移JCXZIPIP当前+位移量D8,使用相对寻址方式,范围-128~+127个字节不满足条件时:(IP)不变,顺序执行下一条指令注:例:比较二个数是否相等如相等做动作1否则做动作21)所有条件转移指令都是相对转移形式,范围(-128~+127)。……CMPAX,BX当需往一个较远地方进行条件转移时,JEaction_1或……选用条件转移转到附近一个单元,CMPAX,BXJNZaction_2然后,再用无条件转移转到较远的目的地。Action_2:……2)条件转移指令中,相当一部分指令是在比较完二个数大小后,……action_1:……根据结果而决定是否转移。:action_1:……action_2:3)条件转移指令不影响标志位。……P48例2-71(二)子程序调用和返回指令(三)循环控制指令1、CALL(Callaprocedure)调用循环控制指令用于使一些程序段反复执行形成循环程序。段内直接调用段间直接调用段内间接调用段间间接调用有三种:1、LOOP(Loop)循环指令2、RET(Returefromprocedure)返回2、LOOPE/LOOPZ(Loopifequal/Loopifzero)当相等/为“0”循环段内返回段间返回3、LOOPNE/LOOPNZ(Loopifnotequal/Loopifnotzero)段内带立即数返回段间带立即数返回当不相等/不为“0”循环CALL指令和RET指令都不影响条件码。格式:LOOPxx符号地址与条件转移指令不同的是:循环指令隐含(CX)减1操作。执行操作:例:用循环指令将BL寄存器的内容按二进制形式显示出来①(CX)←(CX)-1此操作不影响标志MOVCX,8②检查转移条件xx,满足转向目标地址去执行;next:ROLBL,1不满足执行LOOPxx后一条指令MOVDL,BL转移方式只允许段内直接短方式,跳转范围-128~127ANDDL,00000001BADDDL,00110000BMOVAH,2助记符转移条件不转移条件INT21HLOOPCX≠0CX=0DECCXLOOPZCX≠0且ZF=1CX=0或ZF=0JNZnextLOOPNZCX≠0且ZF=0CX=0或ZF=1……LOOPnext例:在string字符串中查找空格字符,串长度为N。注:CX串长度N•LOOP退出循环条件是(CX)=0用条件转移:JZDS:BX串首址•LOOPZ和LOOPNZ提供了提前结束循环的可能,AL关键字不一定要等到(CX)=0才退出循环。MOVCX,NMOVAX,SEGstringY判是关键字?1)在串中查找字符,查到了,就可退出,MOVDS,AX[BX]LEABX,stringN可用LOOPNZ,不相等时继续查找。MOVAL,20H修改偏址BXnext:CMPAL,[BX]2)比较两串时,当有字符不等,就可退出,说明两字符串不等。JZfind(CX)(CX)-1INCBX可用LOOPZ,当相等时继续比较。NDECCX(CX)=0?3)执行完LOOPNZ或LOOPZ后,根据ZF标志的值判断结果JNZnextY未找到处理未找到处理找到处理对查找字符,ZF=1,说明找到;否则没有找到。……对串比较,ZF=1,说明两串相等;否则不等。Find:找到处理……结束出口2用条件转移:用循环指令:JZLOOPNZnext用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。MOVCX,NMO