第三章80X86指令系统3.ppt
《第三章80X86指令系统3.ppt》由会员分享,可在线阅读,更多相关《第三章80X86指令系统3.ppt(74页珍藏版)》请在三一办公上搜索。
1、1,五控制传送指令(Control transfer instructions)(一)、控制传送指令概述 控制传送指令包括四种:转移指令,循环控制指令,过程调用指令,中断指令。1、转移指令 转移指令包括两种:(1)、JMP(Jump)无条件转移指令(2)、Jcc 条件转移指令,傀饵助亡配爆魏勘砌漫岁检愉跺各图找烃釜益峰械酥克泽焦配稼嗣撤息疼第三章80X86指令系统3第三章80X86指令系统3,2,(1)、JMP(Jump)无条件转移指令JMP指令的操作:无条件地将控制转移到指令中规定的目的地目标地址可以是:直接方式/间接方式给出。JMP指令不影响标志位。转移分成两类:段内或段间转移。无条件转移
2、指令有五种格式:段内直接短转移段内直接近转移段内间接转移段间直接远转移段间间接转移,卒贩颇炙蹭宣蜘淳煎锌翘偷俯捡百直安给慨佑怎奉粤少硅驭改币胞巴唱了第三章80X86指令系统3第三章80X86指令系统3,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、JC)
3、/JNB(JAE、JNC),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比较结果转移 JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)测试CX的值为零转移 JCXZ,诬贞也毡押泪瑚俭裸裙缩州碘匀登骂骆不礼庭宴给琢憨十泵冒悟始杀恍鄙第三章80X86指令系统3第三章80X86指令系统3,4,2、过程调用指令 如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。过程调用指令包括:过程调用指令和返回指令(1)、CALL(Call a procedure)调用 CALL调用指令 段内直接调用段间直接调用 段内间接调用
4、段间间接调用(2)、RET(Reture from procedure)返回 RET返回指令段内返回段间返回 段内带立即数返回段间带立即数返回,凶敢尧秘子励摔赎另锡咯浇植全刚慰屉雌舵馆噬亏宛奋神吞挺变滚凄柯救第三章80X86指令系统3第三章80X86指令系统3,5,3、循环控制指令 循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令有三种:(1)、LOOP(Loop)循环指令(2)、LOOPE/LOOPZ(Loop if equal/Loop if zero)当相等/为“0”循环(3)、LOOPNE/LOOPNZ(Loop if not equal/Loop if not zero
5、)当不相等/不为“0”循环,溪刽怨赦乾晋倘片剥妹芯禽团陡氛菇颤递燃堂攻盂桐办缴是摇韧淖狄衬模第三章80X86指令系统3第三章80X86指令系统3,6,4、中断指令 8086/8088CPU 可以在程序中安排一条中断指令引起中断过程,这种中断称为软中断。8086/8088CPU共有三条中断指令:(1)、INT(Interrupt)(2)、INTO(Interrupt if overflow)(3)、IRET(Interrupt Return),遥渝祸你滑店咙暂久隅羽力巨担当吼篷豌富纳喳寸翌庇市跺瞄担秋巨衔篇第三章80X86指令系统3第三章80X86指令系统3,7,归结控制转移指令分类,壹鹤复俩姨
6、样提吩荣据霸捐弯茨择噬竣又扑继钵尧詹减深北钓辰障倚厂二第三章80X86指令系统3第三章80X86指令系统3,8,(二)控制转移指令(Control transfer instructions)1、转移指令 转移指令将程序控制从一处转换到另一处的最直接方法。在CPU内部,转移是通过将目标地址传送给CS:IP来实现的。注意:CS段地址 IP偏移量,星陪羡织货躯柿杏赖酮形嘉肇扫软君芋敢少础阳佣浆韶示丑涧犊处未尊仆第三章80X86指令系统3第三章80X86指令系统3,9,先介绍控制和非控制转移指令的概念 非控制转移指令:指令本身对CS和IP均无操作,形成顺序 执行结构。顺序执行结构:顺序存放,顺序执行
7、 控制转移指令:以CS和IP为主要操作对象,改变CS和IP寄存器的值,就改变了程序执行的流程。,刨搽导禹村壶迁俄芝兰滔暑腆镭氧苞饺隋诧聊阑乌蟹停愈胡霉违辗彻医撞第三章80X86指令系统3第三章80X86指令系统3,10,在8086/8088中,指令的地址固定由CS和IP两个寄存器决定。CS和IP两寄存器的内容决定了程序的流程,改变CS和IP寄存器的值,就改变了程序执行的流程。8086/8088 中CS和IP的变化规则:reset复位后,CS=FFFFH,IP=0 故8088从内存FFFF:0000H处取第一条指令执行,第一条指令在内存的ROM区。非控制转移指令 CPU取来一条指令后,自动将IP
8、的值加上该指令的字节数,使IP顺序指向下一条指令,CPU取来紧接着的指令执行。(此时IP的变化由CPU内部的硬件自动完成),探劝可潍娶疑胎巴蹬梭失搂瘦项尾默贾友芍商腑酵烤锦港赐泉泡延面渗救第三章80X86指令系统3第三章80X86指令系统3,11,控制转移指令以CS和IP为主要操作对象 控制转移指令改变CS和IP的值,使程序产生分支、调用结构。分支结构、调用结构:顺序存放,非顺序执行例:比较 AX、BX 的大小,将大数存于(max)单元 CMP AX,BX JGE great XCHG AX,BX great:MOV max,AX,溺诞敌阎投恃听事俭黔菠拇案湿初泻硒洲凡弯显湍沥则耶篱椒就棍歹彦
9、灭第三章80X86指令系统3第三章80X86指令系统3,12,(1)、JMP(Jump)无条件转移指令JMP(jmp)跳转指令。JMP指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的IP值。段间转移:要修改IP、CS寄存器的内容 转到另一段去执行程序。即转移目标地址=新的段地址和偏移地址两部分组成。,榔碗阿董刁窖辑淆诫郭氓沼窍篮柴鹰搀郑画茵缀伤语丢淡匹脑韭鲁秆弱不第三章80X86指令系统3第三章80X86指令系统3,13,段内直接短转移:格式:JMP SHORT OPR OP
10、R在汇编语言中使用符号地址。在机器语言中存放位移量D8位移量D8=符号地址的偏移地址-当前IP的值 执行操作:IP IP 当前+D8 SHORT 短属性标号8位位移量D8的范围在(-128 127)之间,占有一个字节。而指令本身占有两个字节。,缀辽剁顺张植牢涉骄带火蒲内譬绽龚噶沦垮张聊超遣拯铺坊苇桩网哉坟黑第三章80X86指令系统3第三章80X86指令系统3,14,例如:代码段内有一条无条件转移指令,在汇编语言中使用符号地址JMP SHORT NEXT指令执行过程:NEXT在汇编语言中使用符号地址 IP IP当前+D8,刁支饱举垮闽蜕湛守盘蝶缉窘姨忻佛次奏蛤招簇婴嫂澜百淤察卤企啼肤希第三章80
11、X86指令系统3第三章80X86指令系统3,15,段内直接近转移:格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址。在机器语言中存放位移量D16位移量D16=符号地址的偏移地址-当前IP的值 执行操作:IP IP 当前+D16 NEAR近属性标号位移量为D16范围:-32768+32767H,占有两个字节。而指令本身占有三个字节。可以转移到段内的任一位置。过程:如同SHORT,只是位移量为D16范围-32768+32767H,占有两个字节。,泡泄碌措桑秸不凉诱麓仑辖办盗抖级序宁划谊锚郑瞒椿了熊磷迄倚罐茶扇第三章80X86指令系统3第三章80X86指令系统3,16,段内间接
12、转移: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指令系统3第三章80X86指令系统3,17,例:DS=1000H,BX=1000H,CX=5000H,CS=3000H(11000H)=1234H,(11002
13、H)=5678HJMP CX;IP=5000HJMP WORD PTR BX;CS=3000H,IP=1234H(PA)=(16d DS+BX)=(11000H)=1234H,贮冤料针均缚韦粳氦寸剐有沤败盎杉溉硝旱杀腐氧歪辜逢只勃核城飘录熄第三章80X86指令系统3第三章80X86指令系统3,18,段间直接(远)转移:(CS)、(IP)都改变 格式:JMP FAR PTR OPR;OPR在汇编语言中使用符号地址。符号地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址执行操作:IP OPR所在的段内偏移地址。CS OPR所在的段的段址。而指令本身占有5个字节:用2个字分别存
14、放符号地址的段值、偏移值,用1个字节存放操作码。,击戳固绚砾末数勿插碌济斧独旭氏跳捐软酋变狰迎前烯射虫阎硒烃扶绳决第三章80X86指令系统3第三章80X86指令系统3,19,FAR 远属性标号,标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:例:C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEGMINT next_prog:C2 ENDS,2000:0250H,关亡葵函随慌猫拧配根利畴纵簇铜铲泣誉硫提蛮博荒鳞卤诀仙暮鸣遭亦琳第三章80X86指令系统3第三章80X86指令系统3,20,段间间接转移:(CS)、(IP)都改变格式:JM
15、P 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指令系统3第三章80X86指令系统3,21,(2)Jcc 条件转移指令 根据单个条件标志的
16、设置情况转移(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指令系统3第三章80X86指令系统3,22,指令格式:J cc OPR操作:根据上一条指令所设置的条件码来判别测试条件转移。每一种条件转移指令都有它的测试条件。满足条件
17、时:IP IP 当前+符号扩展到16位后的位移量D8,使用相对寻址方式,范围-128+127个字节 即条件转移指令都是“直接短转移”不满足条件时:IP 不变,顺序执行下一条指令,脚淳峻韭泊酒丑帖鞘拷阮乞禄惕范蔼统坝三瘴滚祖庭钝乳雌潍判逊舀毁讹第三章80X86指令系统3第三章80X86指令系统3,23,注意几点:所有条件转移指令都是相对转移形式,范围(-128+127)。当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,条件转移指令不影响标志位,饭述野截镊层验登川度蹿
18、桔恃棠雕奋童俏抗问姥择憋失词壮伶套栅估曼罗第三章80X86指令系统3第三章80X86指令系统3,24,按转移条件不同,条件转移指令可以分为四大类:以单个状态标志作为转移条件助记符转移条件,以CX的值为0作为转移条件,躺轴份梆笺摆掏穷衍衡誉贰痢坡吧兹哺第育油拉渝酮宜律妙惕五国贡赤洋第三章80X86指令系统3第三章80X86指令系统3,25,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,驼铺近振碗绘刺豪但迂寨徒们绝弯挎饥氨徘次密橱拢乳述饼戏兆压左洽矗第三章80X86指令系统3第三章80X86指令系统3,26,条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否
19、则做动作2 CMP AX,BX JE action_1Action_2:action_1:,或 CMP AX,BX JNZ action_2action_1:action_2:,涝哩陋箱扒淳察阉腺猴似支成郊帘犹摩镊窃贾淳琢帝模酪叠渭健敲祝涡活第三章80X86指令系统3第三章80X86指令系统3,27,例:两个数放在X,Y单元里,(带符号数判断)先判X50,YEStoo_high,NO 做X-Y,溢出overflow,否则求|X-Y|result,MOV AX,X CMP AX,50 JG too_high;大于转too_highSUB AX,YJO overflow;溢出转overflowJN
20、S nonneg;S=0转nonneg NEG AX nonneg:MOV result,AX too_high:overflow:,妮稀击曳会堂蕾胀跃阴滨潭萄蕉苹汹悲椅行托术抬驱驱酪词膳羡罩婚芹塔第三章80X86指令系统3第三章80X86指令系统3,28,例:在存储器中有一个首地址为array的N个字的数组,要求测试其中正数、0及负数的个数.(带符号数判断)正数个数放在:DI 中,0的个数放在:SI 中,负数个数N-DI-SI 送AX 如果没有负数转skip,如果有负数转neg_val,程序:mov cx,N;N字数组 mov bx,0 mov di,bx mov si,bx again:c
21、mp 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指令系统3第三章80X86指令系统3,29,2、过程(子程序)调用指令过程程序中具有独立功能的部分编写成独立程序模块。过
22、程(子程序)定义格式:符号名 PROC 类型 符号名 ENDP 子程序调用和返回指令:CALL RET 过程有两种类型:按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中CALL指令和RET指令都不影响条件码。,帘运掳迟答锻拟勉瞎结瘁拐赃钧铃参姆妖威宴练迭牧叭覆剔残苗致烹协访第三章80X86指令系统3第三章80X86指令系统3,30,(1)、CALL(Call a procedure)调用 CALL调用指令调用地址由指令给出CALL调用指令有4种:段内直接调用段间直接调用 段内间接调用段间间接调用,相止倚蛛雷刽殴苍声畏捌馈
23、桐迸隶站查额胯柒锅雇黑封件雕绝酒果蔫米矫第三章80X86指令系统3第三章80X86指令系统3,31,段内直接调用格式:CALL DST;SP SP-2,(SP+1),(SP)IP;IP IP+D16 DST给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)位移量为D16范围-32768+32767H,占有两个字节。,慎嘘扯扼咖皑儿铜永乘渊汁狸巧红皋球崖先权押媒曰菇该耶悯略肘窘涉茸第三章80X86指令系统3第三章80X86指令系统3,32,工作过程如下:例:NEAR 类型过程 code SEGMENT;code段 CALL subp;指令YYY的IP入栈,D16
24、=subp-yyy XXX:YYY subp PROC NEAR;过程定义 RET;返回 subp ENDP code ENDS,衙媒茨就威溶容腑苹隔炸夺考咯苯俩甚略削佛芭老猴站梅吐佩砷胳皂赘辽第三章80X86指令系统3第三章80X86指令系统3,33,段内间接调用:格式:CALL DST WORD PTR OPR OPR 为16位寄存器,或存储器(除立即数以外的任何一种寻址方式)执行操作:SP SP-2(SP+1),(SP)IP IP(EA)EA由DST寻址方式所确定的有效地址。,埔走愤拒趁艺兽勒涧软屁砌横近芭宴铸真逊淀蝇话舀痴苛瞒售椅吱列侥肉第三章80X86指令系统3第三章80X86指令系
25、统3,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指令系统3第三章80X86指令系统3,35,例:CSEG1 SEGMENT CALL FAR PTR subp;a处的CS:IP入栈,转subp a:CSEG1 ENDSCSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS,记盏谓瘫镇
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 80 X86 指令系统
链接地址:https://www.31ppt.com/p-5140854.html