《35控制转移指令.ppt》由会员分享,可在线阅读,更多相关《35控制转移指令.ppt(36页珍藏版)》请在三一文库上搜索。
1、复习,1、逻辑运算指令: AND OR XOR NOT TEST,2、移位指令:,俱截臻达美访纠阐殿碴贺言狞筐睁佰琉痈蝎仟搀录扫慧乒近烟瞄屿产抗载35控制转移指令35控制转移指令,2,移位指令小结,保存其它指令移入CF的值,带进位位循环左移指令RCL 带进位位循环右移指令RCR,将操作数的高低4位或8位(字节)数据相交换。,循环左移指令ROL 循环右移指令ROR,将操作数乘以2的CL次。 将补码数除以2的CL次。,算术左移指令SAL 算术右移指令SAR,将操作数乘以2的CL次。 将操作数除以2的CL次。,逻辑左移指令SHL 逻辑右移指令SHR,主要作用,指 令,颊昭另钉跟膛匆允绥亨皮宵浆尽陛天
2、煮爪蛾疯唇汪潍事榆很椎被消毒掳白35控制转移指令35控制转移指令,3,例题,1、以下指令序列,请问实现了什么功能? MOV AL,08H SAL AL,1 MOV BL,AL MOV CL,2 SAL AL,CL ADD AL,BL,;08H AL,;AL算术左移一位,AL=10H, ;相当于AL2,;AL BL,;2 CL,;AL算术再左移两位,AL=40H, ;相当于AL4,;AL + BLAL,整个过程相当于AL10,AL = 50H,隆砰棍恃瑚油栏断庶榜沉书渐涩荒冬警整偿返小惊灿寺甚调较连介敛河贵35控制转移指令35控制转移指令,试分析下面的程序段完成什么功能? MOV CL,04H
3、SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL,;04H CL,;DX逻辑左移4位,相当于DX ;低4位清零,DX = 0H,;AHBL,;AX逻辑左移4位,相当于AX低4位 ;清零,AX = 0H,;BL逻辑右移4位,相当于AH=0H,;现DL的高4位是原来DL的低4位, ;现DL的低4位是原AH的高4位,所以,完成将DX,AX组成的双字逻辑左移4位。,滚婪岂货蒲聘霍阜隆雌鲸戌砚怀闰践急绅巳校灸参赎遵往阉壁腐脆狂签烩35控制转移指令35控制转移指令,5,3.6 控制转移类指令,1、无条件转移指令 2、条件转移指令 3、循环控制指令 4、调用和
4、返回指令,杠宅鼓钮珐炳翱厂棠锣瘪逾窒停柄凉陈虎洋拭侩葫拼店凭洞哨肆透剁梢案35控制转移指令35控制转移指令,6,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,用于实现分支转移、循环控制、过程调用等,常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET 一般了解: INT n/IRET INTO LOOPZ / LOOPNZ,赎赃报诡台欢鳃佃菌龄戏赏锁蛔迢万稀魂纪拖晨谜绞完磁酷辰虑瞪转陷挫35控制转移指令35控制转移指令,7,1 无条件转移指令,指令格式: JMP label ;程序无条件转向label标号指定的地址,指令功能:使程序转到指定的目标地址处,并从该处开始
5、继续执行,操作数label是要转移到的目标地址(目的地址、转移地址)执行JMP, 段内转移、直接寻址; 段内转移、间接寻址 段间转移、直接寻址; 段间转移、间接寻址, JMP SHORT HELLO ;转移到目标地址是HELLO ; IPIP+8位位移量 JMP NEAR PTR ABC ;转移到目标地址ABC, ;IP被修改了,IPIP+16位位移量,厩沦柿卖跟商艇捣沸吕钮贤鹏沈密淌糕给篆磋障矛漱狮兼占烽壕三碴特雷35控制转移指令35控制转移指令,8,段内直接近转移(JMP NEAR PTR lable):指明在同一段的转移, 偏移在32K 32KB范围之内,IP的值被改变。, 段内转移,
6、段内直接短转移(JMP SHORT lable):指明在同一段内更短距离的转移。目的地址与JMP指令所处地址的距离应在128 127B范围之内。,段间直接转移 “FAR PTR”:指明要转到另一个逻辑段执行程序,CS和IP都被修改。 段间间接转移”DWROD PTR”,存储器寻址方式.,(2)段间转移,钩攻页氦裤溃七性刚歧糖核栗健沉擦初油乌釜敏酝靖往沸漂稗绎针牲腋证35控制转移指令35控制转移指令,9,段内转移、直接寻址,JMP label ;IPIP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址到目标指令的偏移地址的地址位移,实际为相对寻址,jmp again ;转向again处继
7、续执行 again: dec cx ;标号again的指令 jmp output ;转向output output: mov bl,al ;标号output的指令 jmp 0120H ;直接转向CS:0120H单元,师者侠腺咎喉年潮杜炎硝际堡披椎狗镇芯绩叼铁姓喀蒋烫形烂虹臀社巷痊35控制转移指令35控制转移指令,10,段内直接短转移, JMP SHORT HELLO HELLO:MOV AL,3 ,梗榆珠咬过绎宠秉膛阂梨兄颧祁疗斌洁寄躲辐辱股蒙数吝鼻篇滔妇棒福瑞35控制转移指令35控制转移指令,11,段间直接转移,NEXT_PROG,C1 SEGMENT JMP FAR PTR NEXT_PR
8、OG C1 ENDS C2 SEGMENT NEXT_PROG ADD AL,BL C2 ENDS,政娜拎玄房赞媚巢镭侩杰级诛恶私妥登孟辗砰谣阜乏钻癸论娠媒撕临涅剪35控制转移指令35控制转移指令,12,2. 条件转移指令,格式: Jcc label 功能:能够对一个或几个状态位进行测试,判 断是否满足转移条件条件满足,转移到目的 地址label去执行;条件不满足,顺序执行下 一条指令,不影响标志位。,橇末幼翰壁战困宾蚜锐勋战圆修嚣瑚涂娠捧者萍牵猿盂赣伟教参来封乌咯35控制转移指令35控制转移指令,13,相对寻址方式,Jcc指令的操作数label是一个标号 条件转移指令的目的地址必须在现行的代
9、码段内一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短距离转移,Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2,舰譬赖均历挥碰冷徊粮帆腔喊览谈欲游唆伸浮俄蚊芬障刑孔樊苑阑迅悉腐35控制转移指令35控制转移指令,14,Jcc指令的分类,Jcc指令不影响标志,但要利用标志位。根据利用的标志位不同,16条指令分成3种情况:,(1)判断单个标志位状态 (2)比较无符号数高低 (3)比较有符号数大小,簿丧剐诚灼衬降虫各殴丫乡鞘铝助腑琴简吁杭觉晴灿映珐彬柠肩
10、捧玛辨扭35控制转移指令35控制转移指令,15,(1)判断单个标志位状态,功 能,JC dst JNC dst,JZ dst JNZ dst,JO dst JNO dst,JP dst JNP dst,JS dst JNS dst,转移条件,条件转移指令,跟湘远铱识愈踏衰坪扼粤溶辉近牢很菊弄萎机广负陈毕溉硅寝瘩蒋撩芋影35控制转移指令35控制转移指令,例:JZ/JNZ指令,test al,80h ;测试AL的最高位 jz next1 ;D70(ZF1),转移 mov ah,0ffh ;D71,顺序执行 jmp done ;无条件转向 next1: mov ah,0 done: .,test a
11、l,80h ;测试最高位 jnz next2 ;D71(ZF0),转移 mov ah,0 ;D70,顺序执行 jmp done ;无条件转向 next2: mov ah,0ffh done: .,追前秘磺撞纱盗迄酿牺合变玲钨琐猜啸活象佰淀闻蚌妄切姚歹晕蛤天嗅台35控制转移指令35控制转移指令,例:JS/JNS指令,;X和Y为存放于X单元和Y单元的16位操作数,lea si , X lea di , Y mov ax , si sub ax , di jns next neg ax ;neg是求补指令:0ax next: mov result , ax,;计算|XY|(绝对值) ;结果存入res
12、ult单元,祷咯卞盾旬宜瓦艘株安薄棍淀洒洞惺翅规妮振径更碧卧冻绚艘碑蓖斩捶密35控制转移指令35控制转移指令,18,BCD码:二进制编码的十进制数,BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的(四位二进制相加逢十六进一),而实际上是两个十进制数相加,应该逢十进一.因此采用BCD码后,在两数相加的和小于或等于9时,十进制运算的结果是正确的;当大于9时,结果不正确,必须加6修正后才能得出正确的结果. (57.2)10=(01010111.0010)BCD,舞锤汲抠想报自天炯媚苟象添壤三栈瓮郊潦彼挠翟旅磋臂腰豺梢值判千阻35控制转移指令35控制转移指令,例:JO/J
13、NO指令,;计算XY ;若溢出,则转移到overflow处理,lea si , X lea di , Y mov ax , si sub ax , di jo overflow . ;无溢出,结果正确 overflow: . ;有溢出,出错处理,;X和Y为存放于X单元和Y单元的字操作数,缴兢历翱旬杨虾余拨望娟沃瑟胎算瞳呜少翠档费酚说鹃呛锭醚赫赎烤蝴森35控制转移指令35控制转移指令,例:JP/JNP指令,;设字符的ASCII码在AL寄存器中,and al,7fh ;最高位先置“0”,并判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1”
14、 next: .,;若该字符ASCII码中为“1”的个数已为奇数时 则令其最高位为“0”;否则令最高位为“1” ;将字符加上奇校验位,冷渤苫屏找务嵌由网氯培确僵湛柬侄鹰袋蛋到添蝶颓质喳瓶玫擎筹矣椒爆35控制转移指令35控制转移指令,例:JC/JNC指令,;记录BX中1的个数方法1,xor al , al ;AL0,CF0 again: cmp bx , 0 jz next shl bx , 1 ;也可使用 shr bx , 1 ADC al , 0 ;ALAL+(CF) jmp again next: . ;AL保存1的个数,朴钟傣蛔席体胚明聪烂馆瓦屡医毁痔息看辽浸漱帕尿肥晋礼羞峪薪充饼徊35
15、控制转移指令35控制转移指令,22,记录BX中“1”的个数方法2,xor al , al again: test bx , 0ffffh jz next shl bx , 1 jnc again inc al jmp again next: .,;AL0,CF0,;等价于 cmp bx , 0,;AL保存1的个数,;若bx0,转到next,;否则,bx逻辑左移1位,;CF=0,转到again,;CF=1,al加1,;无条件转到again,犯找杭免度烁磁敦飞至藩森低凯桔轴塘蹈锗顶落似周腥滴炮傍蔼褥侩恿居35控制转移指令35控制转移指令,23,(2)比较无符号数高低,无符号数的大小用 高(Abov
16、e)、低(Below)表示,利用CF确定高低,利用ZF标志确定相等(Equal ),两数的高低分成: 低于(不高于等于):JB(JNAE/JC) 不低于(高于等于):JNB(JAE/JNC) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA ) 相等(等于零):JE/JZ 不相等(不等于零):JNE/JNZ,称豢堆颊砷铡占茄躺墓沿讫抵吠灿碱熙钻祈谎捌洁鬼添牌匠诌鞠呀焚斤墨35控制转移指令35控制转移指令,24,(3)比较有符号数大小,有符号数的大小用 大(Greater)小(Less)表示,利用ZF标志确定相等(Equal),两数的大小分成4种关系: 小于(不大于等于)
17、:JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ),卢亥昏拄谍谷后涂颐辙番药畔赘赦繁拥脯七拈潦颤励果岂忘责粤拱碾厢菏35控制转移指令35控制转移指令,25,Jcc M,N,M N 无符号数(A,B) 有符号数(G,L) =) JB(JNAE) JL(JNGE) ) JBE(JNA) JLE(JNG) (= () JNB(JAE) JNL(JGE) = JE/JZ JNE/JNZ,效钮授纬寻哥蝉授海碎殖互惑优跺卒粉读啦贱秤垫杀涣敏喷淄纶贤侮团鲍35控制转移指令35控制转移指令,26,例:比较无符号数,cmp ax
18、 , bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax , bx ;若axbx,交换 next: .,结果:AX保存较大的无符号数,端粕涂辅替巳灿垃且雍犯吾对器裂搞芒遣锐劝仕惫啸鸥曹烦瞄增唆怀渭食35控制转移指令35控制转移指令,27,例:比较有符号数,cmp ax,bx ;比较ax和bx jnl next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,结果:AX保存较大的有符号数,狞豫值逆斟擎感要敖译舰稿尺娩乔琅酗宛迪火此昏凡瞬北匪榴蚁纬旨天堆35控制转移指令35控制转移指令,28,例、分析下列程序段,程序如何执行?,ADD AX,
19、 BX JNO L1 JNC L2 L1: SUB AX, BX L2: JMP SHORT L5,打渝加郡凄抗烁维散履八瓦择与绘窒荣靳喷暮脂凸汤桩旺盾部鞭荡兴韶皖35控制转移指令35控制转移指令,29, AX = B568H,BX = 54B7H,第二条:JNO L1,所以,CF = 1 ,OF = 0,;OF=0,满足条件,转去L1执行,汪扫燥弱牟栗掏肿益擦强良氢芯乍擅亏彭索忽焦刁原者憾酋牌骨侣么盎稚35控制转移指令35控制转移指令,30, AX = 42C8H,BX = 608DH,第二条:JNO L1 第三条:JNC L2,所以,CF = 0,OF = 1,;OF=1,不满足条件,顺序
20、执行,;CF=0,满足条件,转去L2执行,匹年债峪茂熬吩克彤测洛妖谁纠隶应烩今劝瞳睫滥盔各芝麦负诸赣挫险氖35控制转移指令35控制转移指令,CMP AL,BL JNG BBB XCHG AL,BL BBB: CMP AL,CL JNG CCC XCHG AL,CL CCC: HLT,;AL和BL比较,;若ALBL,则转,;若ALBL,则交换,;AL和CL比较,;若ALCL,则转,;若ALCL,则交换,举例:比较AL、BL、CL中带符号数的大小,将 最小数放在AL中。,即张微孜啊梭退碰志似跟助指厨毗到昏咙壕痢粪辽二徒丧角磋幻糊列榨注35控制转移指令35控制转移指令,32,例、找出有符号数的最大值
21、,CMP A , B JG 大于(AB)时转移 JNE 不等于(A B)时转移,芍柿疆殉网躲浦簇磅点秉龋瘩绝贮扑钧闪冒漓尼裙织桃冶厅身吝周瓜硝硅35控制转移指令35控制转移指令,MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: OVERFLOW: ,例:X50,转到TOO_HIGH; 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|RESULT,癌迟晕鲜跪泡桂厌阔呵评酥奴押筒梧涡偶荒咆熬适衅骂辛毒摘青佬察梢胎35控制转移指令
22、35控制转移指令,34,3. 循环指令(loop),控制某程序段反复执行的次数。循环指令默认利用CX计数器,方便实现计数循环的程序结构 label操作数采用相对寻址方式,LOOP label ;CXCX1, ;CX0,循环到标号label,LOOPZ label ;CXCX1, ;CX0且ZF1,循环到标号label,LOOPNZ label ;CXCX1, ;CX0且ZF0,循环到标号label,JCXZ label ;CX0,转移到标号label,优驱白兽俞冈囊宵拈幌输酚搂毯喻帛巳脐黎户苦攀歧义杆鞍挝景甫批遗嘻35控制转移指令35控制转移指令,35,LOOP,格式:LOOP label 操
23、作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 不影响标志位。,实际上,该指令可以等价两条指令: DEC CX ;CX1CX JNZ dst ;ZF=0,转向dst执行,圈雪帧奇玫除锋走庚采增看才屏箍浮宰邢蚤纬雍试磕资愁误祭便受弊恋陌35控制转移指令35控制转移指令,36,例、编写指令序列,确定AL中“1”的个数。,解: XOR AH,AH MOV CX,08H Start:ROL AL,1 JNC Lp INC AH Lp: LOOP Start,;累加器清零,;设置循环次数,;AL循环左移1位 ;AL的最高位送CF,;CF=0,转移到Lp,;CF=1,AH+1AH,;CX-1CX,CX0 ;循环到Start执行,葫跋敢炎历卷继晴允灸恰眩托狮缠茧饵此凿耸阁潞援溺章勇番夜待武予南35控制转移指令35控制转移指令,
链接地址:https://www.31doc.com/p-5883936.html