《第五章分支.ppt》由会员分享,可在线阅读,更多相关《第五章分支.ppt(19页珍藏版)》请在三一办公上搜索。
1、第五章 程序设计基础,1,四、分支程序设计,(一)、控制转移指令1、无条件转移指令 基本格式:JMP TARGET、段内直接短转移 指令格式:JMP SHORT TARGET;TARGET为转移的目的地址(相对寻址)。执行操作:IP+8位有符号数IP 源与目的地址之间要保持在-128+127范围内。、段内直接近转移 指令格式:JMP NEAR PTR TARGET;TARGET为转移的目的地址(相对寻址)。执行操作:IP+16位符号数IP 源与目的地址之间要保持在-32768+32727范围内。,塔簿脆升内邑需踞青恰碉窒滨梳嘻唁纶历尤潮勿博跑楞诬盔灾尿敝坏谤刚第五章-分支第五章-分支,第五章
2、程序设计基础,2,、段内间接转移 指令格式:JMP WORD PTR OPR;OPR为通用寄存器/存储器字单元,目标地址为其内的数据(间接寻址)。执行操作:EAIP 例:JMP BX、JMP WORD PTR BX、段间转移 指令格式:JMP DWORD PTR OPR;OPR为存储器双字单元(间接寻址)。执行操作:(EA)IP,(EA+2)CS例:JMP DWORD PTR BX、JMP DWORD PTR 10HBXDI,檄党救媳乔辜误制蛮原契畜丛湛刁额裳寂枚韭训叫酱朝囚唯报罪焦踌锰便第五章-分支第五章-分支,第五章 程序设计基础,3,2、条件转移指令 基本格式:JXX OPR 条件转移只
3、能在段内转移,且转移范围为:-128127。、单标志位条件转移指令(10条,简单条件转移)JZ(或JE)OPR;结果为0(或相等)(ZF=1)时转移;JNZ(或JNE)OPR;结果不为0(或不相等)(ZF=0)时转移;JS/JNS OPR;结果为负/正(SF=1/0)时转移;JO/JNO OPR;结果溢出/无溢出(OF=1/0)时转移;JP(JPE)/JNP(JPO)OPR;奇偶位为偶/奇(PF=1/0)时转移;JC/JNC OPR;有/无借位(CF=1/0)时转移;,谷矢谱苑钦宦萍碰灵透川显派捕墩颐奋瑚篷洽孜猛羡激贪句碗前全坍尼常第五章-分支第五章-分支,第五章 程序设计基础,4,、无符号数
4、条件转移指令(4条)JB/JNAE OPR;两个无符号数a、b比较时,若ab时转移,(ZF=0 AND CF=1);JBE/JNA OPR;两个无符号数a、b比较时,若ab时转移;(ZF=1 OR CF=1)JA/JNBE OPR;两个无符号数a、b比较时,若ab时转移;(ZF=0 AND CF=0)JAE/JNB OPR;两个无符号数a、b比较时,若ab时转移(ZF=1 OR CF=0);,锁拂臂举峰黑蔷析矗凝腐膳博簧凳眉捞像缕砖乡摹狞墙届毙帆延魂寅靳络第五章-分支第五章-分支,第五章 程序设计基础,5,、有符号数条件转移指令(4条)JG/JNLE OPR;两个带符号数a、b比较时,若ab时
5、转移;(SF=OF)AND ZF=0)JGE/JNL OPR;两个带符号数a、b比较时,若ab时转移;(SF=OF)OR ZF=1)JL/JNGE OPR;两个带符号数a、b比较时,若ab时转移;(SFOF)AND ZF=0)JLE/JNG OPR;两个带符号数a、b比较时,若ab时转移;(SFOF)OR ZF=1),过翻碰落鼻匪绍舀凝沉例淳筛七钮务婚我鲜紊骄妈阅愚躁晾耀礁殷幕诫俘第五章-分支第五章-分支,第五章 程序设计基础,6,(二)、比较/测试分支程序设计比较指令:指令格式:CMP DEST,SRC;执行操作:(DEST)-(SRC)对标志的影响:OF、SF、ZF、AF、PF、CF 根据
6、标志位判断源操作数和目的操作数的大小测试指令:指令格式:TEST DEST,SRC;执行操作:(SRC)(DEST)对标志位影响:SF、ZF、PF;源操作数可为:通用寄存器、存储器或立即数。目的操作数不能为立即数,源和目的操作数不能同时在存储器中。,煽凋伊姬篙蔼牧扛诀捂壬妆裂属障吃次促工现妹吹炊鸵酶丈笔康禁亮饲典第五章-分支第五章-分支,第五章 程序设计基础,7,分支结构程序流程:,IF(C)ELSE,程序段1,判定条件?,程序N,程序1,CASE(C1):CASE(C2):CASE(C3):,扑祝鸽熬挡憾缄泊犀泪七泥傣汉仁应蛊兽广尖冠火矾栽佣普笆鄂战站喷题第五章-分支第五章-分支,第五章 程
7、序设计基础,8,例5-5:求三个无符号数中的最大值,只要把三个数据两两比较,用JA/JNB/JNA/JC等指令就可判断两数的大小,从而选出其中最大值。,把惶括乙戳熙饼微藤养撑萄竣色辜棒氏肥淘唁逞那恬笑挂以淘腾虚撑伶豁第五章-分支第五章-分支,第五章 程序设计基础,9,DATA SEGMENTARG DW 7138H,84A6H,29EHMAX DW?DATA ENDSSSEG SEGMENT STACK STK DB 20 DUP(0)SSEG ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEGSTART:MOV AX,DATA MOV DS,AX
8、MOV SS,AX MOV SP,SIZE STK LEA SI,ARG MOV AX,SI MOV BX,SI+2 CMP AX,BX,襟褂芯槐潍邑咏嫌钢忆浪帆沃生率豪光筹群壶光县谁拖衷敷艺眶态味肆死第五章-分支第五章-分支,第五章 程序设计基础,10,JAE FMAX1 MOV AX,BXFMAX1:CMP AX,SI+4 JAE FMAX2 MOV AX,SI+4FMAX2:MOV MAX,AX MOV AH,4CH INT 21HCODE ENDS END START,岩境果曾贱娩俗淋循左号逻疾滴模刽笆桶弦骸裙器尺脯谁吭鹃乘测婴咽良第五章-分支第五章-分支,第五章 程序设计基础,11,
9、例5-6 设数据段中NUM1,NUM2两字节单元有无符号整数,编程完成:1、若两个均是偶数,则两个数分别加1后送DA1、DA2字节单元中;2、若两个均是奇数,则两个数分别送DA1、DA2字节单元中;3、若一个是奇数,一个是偶数,则把奇数送DA1,偶数送DA2字节单元中;,汲遵慈吱锈龙距铭奏磕泳膘硅贴牺段淤琵丁镣何途撞藕悬柬纠玄恫事刷碱第五章-分支第五章-分支,第五章 程序设计基础,12,披茶笛晓祸雌奇肖顾措拭粗嫌妖涧胃恩希甸到肪奶溉廊聚蹈有栋严仲遂实第五章-分支第五章-分支,第五章 程序设计基础,13,DATA SEGMENTNUM1 DB 45HNUM2 DB 0AEHDA1 DB?DA2
10、DB?DATA ENDSSTACK1 SEGMENT PARASTACKSTA DW20HDUP(0)STACK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1BEGIN:MOV AX,DATA MOV DS,AX,凋皋株犹碱嚷艳矫慈蠕找具污份弦饶始铰疯仑踢乍造汲蒂煤跟毁恼永歉孰第五章-分支第五章-分支,第五章 程序设计基础,14,MOV AL,NUM1 MOV AH,NUM2TEST AL,01H JNE END0 TEST AH,01H;偶数JNEL1 INCAL;双偶数INCAHJMPEND0L1:XCHGAL,AHEND0:MO
11、VDA1,ALMOVDA2,AHMOVAH,4CHINT21HCOSEGENDSENDBEGIN,付嗽件妨帧坠腔嘻积貌甭枫板衍噎巴篆亦撮盈廉汲帧胺续壁瓮务炳咆队妙第五章-分支第五章-分支,第五章 程序设计基础,15,例5-7 设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。,藤潭押揖尹件言禽注厦赦哦炯穿啥侗押竿拯簧花伺漏妊锤差师省蚕佑堕瘦第五章-分支第五章-分支,第五章 程序设计基础,16,程序如下:DATASEGMENTTABDW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATAENDSSTACKSEGMENT DB 200 DUP(0)ST
12、ACKENDSCODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,檄墩将恕吐痴杯魏守啄堵拈鹊浪崇盒坤抢鸳服钮辰蜘佐唾易虾率扰斋谈札第五章-分支第五章-分支,第五章 程序设计基础,17,START:MOVAX,DATAMOVDS,AXMOVAL,NDECALADDAL,AL;AL=(N-1)*2MOVBL,ALMOVBH,0JMPTABBX,匙谍派节傀熏捍杏固滔俞铜飘逃胆唤但改正拷汗冯晾非破腋徘辞尧琅添驴第五章-分支第五章-分支,第五章 程序设计基础,18,P1:JMPEXITP2:JMPEXITP2:JMPEXITP3:,淘篆浊歉踩冠镍潭志皱袱五绊镍啤鞘像丑兢拉雄帆肺憎疾僚益脆喂当赃甩第五章-分支第五章-分支,第五章 程序设计基础,19,JMPEXITP8:EXIT:MOVAH,4CH INT21HCODE ENDS ENDSTART上述程序中的无条件转移指令的转移地址采用的是变址寻址。同理,转移地址也可以用寄存器间接寻址或基址加变址寻址,读者可自行考虑。,央演翌喻灶宰疫乓再赡拼钎推穿苑府宅慌使餐夹茫杏歇藤壕苯蜜逢铀剃斑第五章-分支第五章-分支,