第三章80X86指令系统13.ppt
《第三章80X86指令系统13.ppt》由会员分享,可在线阅读,更多相关《第三章80X86指令系统13.ppt(74页珍藏版)》请在三一办公上搜索。
1、1,五控制传送指令(Control transfer instructions)(一)、控制传送指令概述 控制传送指令包括四种:转移指令,循环控制指令,过程调用指令,中断指令。1、转移指令 转移指令包括两种:(1)、JMP(Jump)无条件转移指令(2)、Jcc 条件转移指令,家压桑久革娄巫酶跑透悄州段坏媒拒事皿澜检澄吵琐姿吻绘女靳撇朝童姻第三章80X86指令系统13第三章80X86指令系统13,2,(1)、JMP(Jump)无条件转移指令JMP指令的操作:无条件地将控制转移到指令中规定的目的地目标地址可以是:直接方式/间接方式给出。JMP指令不影响标志位。转移分成两类:段内或段间转移。无条件
2、转移指令有五种格式:段内直接短转移段内直接近转移段内间接转移段间直接远转移段间间接转移,骂廊蹿逊槛丢奸趾撵篓败囱坝嫉赴缠劝万闹慨痞临椎呻鬼束穗灶挑乐慧隘第三章80X86指令系统13第三章80X86指令系统13,3,(2)、Jcc 条件转移指令汇编程序设计中常利用条件转移指令来实现分支。“cc”表示条件。操作数必须是短标号。转移范围为:128127具体条件转移指令分四种情况讨论:根据单个条件标志的设置情况转移 JZ(JE)/JNZ(JNE),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),JB(JNAE、JC)/JNB(JAE、JNC),根据两个无符号数比较结果转移 JB(JNAE
3、、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比较结果转移 JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)测试CX的值为零转移 JCXZ,业铆暴硒量涅感抨佑啄沫鬼瑚囤俄寅焙丸托苇插拿畸却聚淑熔慑粥耀寨污第三章80X86指令系统13第三章80X86指令系统13,4,2、过程调用指令 如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。过程调用指令包括:过程调用指令和返回指令(1)、CALL(Call a procedure)调用 CALL调用指令 段内直接调用段间直接调用
4、段内间接调用段间间接调用(2)、RET(Reture from procedure)返回 RET返回指令段内返回段间返回 段内带立即数返回段间带立即数返回,抡峪伍迸像疥婶偶机褂氮缴散夕赊孵煮渝册临呛族候畅底玄远妹雇肩坐维第三章80X86指令系统13第三章80X86指令系统13,5,3、循环控制指令 循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令有三种:(1)、LOOP(Loop)循环指令(2)、LOOPE/LOOPZ(Loop if equal/Loop if zero)当相等/为“0”循环(3)、LOOPNE/LOOPNZ(Loop if not equal/Loop if
5、not zero)当不相等/不为“0”循环,仕戌阻冠霓烛嫡剁遭驭殉租酪秘苦荣酿搭怖戳匠酶黑灌荚鸦测惶漏咎驾癸第三章80X86指令系统13第三章80X86指令系统13,6,4、中断指令 8086/8088CPU 可以在程序中安排一条中断指令引起中断过程,这种中断称为软中断。8086/8088CPU共有三条中断指令:(1)、INT(Interrupt)(2)、INTO(Interrupt if overflow)(3)、IRET(Interrupt Return),绷净吕特侵梯替码活猴牙彭戚钧宗便州各蝴庚逊讼宗弯烧锻酒走杏添宙鳃第三章80X86指令系统13第三章80X86指令系统13,7,归结控制
6、转移指令分类,泞狮挠爬燃鬃搔仰虞饺谜街恃翠蛊蔼涉蛀总俯帮咬滥茬遂岳啦曼拴俐李车第三章80X86指令系统13第三章80X86指令系统13,8,(二)控制转移指令(Control transfer instructions)1、转移指令 转移指令将程序控制从一处转换到另一处的最直接方法。在CPU内部,转移是通过将目标地址传送给CS:IP来实现的。注意:CS段地址 IP偏移量,惑嘱丑辗粮枯撕痘旅笆绵怂湖霍勾食洼弦喇暑裔盈项呵债纽修挖费瑟钎椎第三章80X86指令系统13第三章80X86指令系统13,9,先介绍控制和非控制转移指令的概念 非控制转移指令:指令本身对CS和IP均无操作,形成顺序 执行结构。
7、顺序执行结构:顺序存放,顺序执行 控制转移指令:以CS和IP为主要操作对象,改变CS和IP寄存器的值,就改变了程序执行的流程。,浅豫密揖坛齐显适腆知寿卡员紧恼诡诉曝缘占旱沮躇演页裤臭讫酗到积携第三章80X86指令系统13第三章80X86指令系统13,10,在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。CS和IP两寄存器的内容决定了程序的流程,改变CS和IP寄存器的值,就改变了程序执行的流程。8086/8088 中CS和IP的变化规则:reset复位后,CS=FFFFH,IP=0 故8088从内存FFFF:0000H处取第一条指令执行,第一条指令在内存的ROM区。非控制转移指
8、令 CPU取来一条指令后,自动将IP的值加上该指令的字节数,使IP顺序指向下一条指令,CPU取来紧接着的指令执行。(此时IP的变化由CPU内部的硬件自动完成),宙传爪判者阉弘做姐本兑挽醋熄槽盎莱陕唁孰鼠紊豹廷巡重窒浊谆捌核量第三章80X86指令系统13第三章80X86指令系统13,11,控制转移指令以CS和IP为主要操作对象 控制转移指令改变CS和IP的值,使程序产生分支、调用结构。分支结构、调用结构:顺序存放,非顺序执行例:比较 AX、BX 的大小,将大数存于(max)单元 CMP AX,BX JGE great XCHG AX,BX great:MOV max,AX,试宝弟篡狈始尉巍谊贵是
9、谨傅驹毯拇辽蜗侧掖沉配厌梳毗畔刚矢脯养恢躁第三章80X86指令系统13第三章80X86指令系统13,12,(1)、JMP(Jump)无条件转移指令JMP(jmp)跳转指令。JMP指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的IP值。段间转移:要修改IP、CS寄存器的内容 转到另一段去执行程序。即转移目标地址=新的段地址和偏移地址两部分组成。,淌牙殴植预芯役秤七板停尊我圾样招灵啄芽痘甭潜温抠奔口票贬聋洽注禁第三章80X86指令系统13第三章80X86指令系统13,13,段内直
10、接短转移:格式:JMP SHORT OPR OPR在汇编语言中使用符号地址。在机器语言中存放位移量D8位移量D8=符号地址的偏移地址-当前IP的值 执行操作:IP IP 当前+D8 SHORT 短属性标号8位位移量D8的范围在(-128 127)之间,占有一个字节。而指令本身占有两个字节。,醇要柔潭腻四另登滇釉凭蘸叹阵铜唬摆乘煤桌钱筹绵管邪医挫狸举烤皖媚第三章80X86指令系统13第三章80X86指令系统13,14,例如:代码段内有一条无条件转移指令,在汇编语言中使用符号地址JMP SHORT NEXT指令执行过程:NEXT在汇编语言中使用符号地址 IP IP当前+D8,赁撅袜则淘杖釜悉部弊湖
11、缘讣呆舆乳输里记赢骸亲引聘辛谷硝瞪彤人牵驻第三章80X86指令系统13第三章80X86指令系统13,15,段内直接近转移:格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址。在机器语言中存放位移量D16位移量D16=符号地址的偏移地址-当前IP的值 执行操作:IP IP 当前+D16 NEAR近属性标号位移量为D16范围:-32768+32767H,占有两个字节。而指令本身占有三个字节。可以转移到段内的任一位置。过程:如同SHORT,只是位移量为D16范围-32768+32767H,占有两个字节。,毡涡所踢瘤焦揽径宛灿莱族屈潮鲜频霸舌功企茸最乞比吓体炙孺俘藻言隐第三章80X
12、86指令系统13第三章80X86指令系统13,16,段内间接转移:CS 不变,只改变 IP 格式:JMP WORD PTR OPROPR 为16位寄存器、或存储器(除立即数以外的任何一种寻址方式)执行操作:IP(EA)或 IP reg16指令格式举例:JMP AXJMP SIJMP TABLE BX;操作数已定义为16位存储器JMP ALPHA_WORD;操作数已定义为16位存储器JMP WORD PTR BPDI,将柜蒜斑徊责脯蜂锗科田褐睁梅额抱烃盘杀桐喀灵抨摩喜媳段恍燕蚤歌耐第三章80X86指令系统13第三章80X86指令系统13,17,例:DS=1000H,BX=1000H,CX=500
13、0H,CS=3000H(11000H)=1234H,(11002H)=5678HJMP CX;IP=5000HJMP WORD PTR BX;CS=3000H,IP=1234H(PA)=(16d DS+BX)=(11000H)=1234H,娥档卿宠战稗老悲咳聋瘪远踏生狐榆披柔山猫常跪论沉设筷颊两睁恼钞柠第三章80X86指令系统13第三章80X86指令系统13,18,段间直接(远)转移:(CS)、(IP)都改变 格式:JMP FAR PTR OPR;OPR在汇编语言中使用符号地址。符号地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址执行操作:IP OPR所在的段内偏移地址
14、。CS OPR所在的段的段址。而指令本身占有5个字节:用2个字分别存放符号地址的段值、偏移值,用1个字节存放操作码。,滥词恿抹彰尧趣惟栈夹仟件沤捂绪做幕陋霓陆辜样巳缩肚软选揪搏载顷唬第三章80X86指令系统13第三章80X86指令系统13,19,FAR 远属性标号,标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:例:C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEGMINT next_prog:C2 ENDS,2000:0250H,旷每寝呛小航耗极锐瞧及笛援逼万烫绊齐悦枷蚜钻艇编徐揍敷潭淆浪缺批第三章80X86指令系统13第三章8
15、0X86指令系统13,20,段间间接转移:(CS)、(IP)都改变格式:JMP DWORD PTR OPR OPR 使用存储器(除立即数和寄存器以外的任何一种寻址方式)执行操作:IP(EA)CS(EA+2)例:已知 BX=1000H,SI=2000H,DS=2000H(23000H)=2211H,(23002H)=4433HJMP DWORD PTR BXSI则:BX+SI=3000H IP=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=2211H CS=(PA+2)=4433H,浑凰蜒贩譬弃督勿趁蛆誉寒晨谤振愚肖批县医孺东艰餐缸礁秦步女拘梅烩第三章80X86指令系统13第
16、三章80X86指令系统13,21,(2)Jcc 条件转移指令 根据单个条件标志的设置情况转移(10种)JZ(JE)/JNZ(JNE),JP(JPE)/JNP(JPO),JS/JNS,JO/JNO,JC/JNC 根据两个无符号数比较结果转移(4种)JB(JNAE)/JNB(JAE),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比较结果转移(4种)JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG),个淡雾毖募集邪锌河兔能捕椎赁噶心镣云萨膛棚图忽妹激国镊分仰队科话第三章80X86指令系统13第三章80X86指令系统13,22,指令格式:J cc OPR操作:根据上一
17、条指令所设置的条件码来判别测试条件转移。每一种条件转移指令都有它的测试条件。满足条件时:IP IP 当前+符号扩展到16位后的位移量D8,使用相对寻址方式,范围-128+127个字节 即条件转移指令都是“直接短转移”不满足条件时:IP 不变,顺序执行下一条指令,鸣塘喝汤蚜燕娱支桅讲答已豢其习赚胖芯腑歹仅窗逞帅炸峡搏草膊缠隐凄第三章80X86指令系统13第三章80X86指令系统13,23,注意几点:所有条件转移指令都是相对转移形式,范围(-128+127)。当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。条件转移指令中,相当一部分指令是在比较
18、完二个数大小后,根据结果而决定是否转移,条件转移指令不影响标志位,姐悼州亿质汛蹄灵上吴窟彩陌耿舶绷剿心柯醇赴沮吼月图幻格秽舍徐礼烹第三章80X86指令系统13第三章80X86指令系统13,24,按转移条件不同,条件转移指令可以分为四大类:以单个状态标志作为转移条件助记符转移条件,以CX的值为0作为转移条件,佬液缨考客么惶粪刽宏舆聪懂外沤勇勺哥宗箩轧足鲸勘沫蒲氰枣棵寸结通第三章80X86指令系统13第三章80X86指令系统13,25,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,黔卿荷速雷音四川沃啡湍悟颂聚陪径辊斗棉渊蔓尝英猖工卒美酱句彪拨层第三章80X86指令系统
19、13第三章80X86指令系统13,26,条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否则做动作2 CMP AX,BX JE action_1Action_2:action_1:,或 CMP AX,BX JNZ action_2action_1:action_2:,杠书阁谦瑟珠荤诌棵肯特亡汽议拳逼优虾炯下馏雌局咱文酷首棕渔腹邦眯第三章80X86指令系统13第三章80X86指令系统13,27,例:两个数放在X,Y单元里,(带符号数判断)先判X50,YEStoo_high,NO 做X-Y,溢出overflow,否则求|X-Y|result,MOV AX,X CMP AX,50 JG t
20、oo_high;大于转too_highSUB AX,YJO overflow;溢出转overflowJNS nonneg;S=0转nonneg NEG AX nonneg:MOV result,AX too_high:overflow:,仓吁肘吉洽别吕毗狈岸土叹堪扣逞桔口检刷失郴侈女墩范搁泄五阎碾监报第三章80X86指令系统13第三章80X86指令系统13,28,例:在存储器中有一个首地址为array的N个字的数组,要求测试其中正数、0及负数的个数.(带符号数判断)正数个数放在:DI 中,0的个数放在:SI 中,负数个数N-DI-SI 送AX 如果没有负数转skip,如果有负数转neg_val
21、,程序:mov cx,N;N字数组 mov bx,0 mov di,bx mov si,bx again:cmp word ptr arrarybx,0 jle less_or_ag inc di;正数个数jmp short neat less_or_ag:jl neat inc si;0的个数neat:add bx,2dec cx jnz again mov ax,Nsub ax,disub ax,sijz skip;没有负数jmp near ptr neg_val;有负数skip:neg_val:,嗜埋扮迹迄端骇瞎邦榴恢鞋奄脂捏推孩转思潘猿蛤淳麻戏舷罕溪壤叭媳尼第三章80X86指令系统13
22、第三章80X86指令系统13,29,2、过程(子程序)调用指令过程程序中具有独立功能的部分编写成独立程序模块。过程(子程序)定义格式:符号名 PROC 类型 符号名 ENDP 子程序调用和返回指令:CALL RET 过程有两种类型:按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中CALL指令和RET指令都不影响条件码。,疯贩尺倾积摘均坝幢胶掣胆贵牧滑舒搜柿炊爽失负灌瓦纪悔迅曲痊暗抖腊第三章80X86指令系统13第三章80X86指令系统13,30,(1)、CALL(Call a procedure)调用 CALL调用指令调
23、用地址由指令给出CALL调用指令有4种:段内直接调用段间直接调用 段内间接调用段间间接调用,疾榴哼留玫龋斌颜碉表肖由凿威竿稚丧咋后枯逼窜芍枣凰怖岗交弧照丈剩第三章80X86指令系统13第三章80X86指令系统13,31,段内直接调用格式:CALL DST;SP SP-2,(SP+1),(SP)IP;IP IP+D16 DST给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)位移量为D16范围-32768+32767H,占有两个字节。,喊君蚤己聊稳院狭晓涕扣工踢细震腾酮疚辐醒鹅灶痒荆肛硒王容绽还抓截第三章80X86指令系统13第三章80X86指令系统13,32,
24、工作过程如下:例:NEAR 类型过程 code SEGMENT;code段 CALL subp;指令YYY的IP入栈,D16=subp-yyy XXX:YYY subp PROC NEAR;过程定义 RET;返回 subp ENDP code ENDS,石隧咏厄凡荣糖逢荤甭酬语缅篷收弄陆垛拐调刘卧唬找迪址褒聂厚奖渭港第三章80X86指令系统13第三章80X86指令系统13,33,段内间接调用:格式:CALL DST WORD PTR OPR OPR 为16位寄存器,或存储器(除立即数以外的任何一种寻址方式)执行操作:SP SP-2(SP+1),(SP)IP IP(EA)EA由DST寻址方式所确
25、定的有效地址。,恃登合沛瑟圆傲潘息摊羌澄虾聊跟懂谁娱友恨侄洒部吟剪炬钎泵赁叁舶泥第三章80X86指令系统13第三章80X86指令系统13,34,段间直接调用:格式:CALL FAR PTR DST执行操作:SP SP-2(SP+1),(SP)CS SP SP-2(SP+1),(SP)IP IP DST偏移地址(指令中第2,3字节)CS DST段地址(指令中第4,5字节),臻孽麻苹桅该税劳佬部巧栖骋椒曰顷贴谆宣掠吉紫燕嘶弓窃闯承蛤续量就第三章80X86指令系统13第三章80X86指令系统13,35,例:CSEG1 SEGMENT CALL FAR PTR subp;a处的CS:IP入栈,转sub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 80 X86 指令系统 13

链接地址:https://www.31ppt.com/p-5278246.html