第三章80X86指令系统3.ppt

上传人:sccc 文档编号:5140854 上传时间:2023-06-07 格式:PPT 页数:74 大小:376KB
返回 下载 相关 举报
第三章80X86指令系统3.ppt_第1页
第1页 / 共74页
第三章80X86指令系统3.ppt_第2页
第2页 / 共74页
第三章80X86指令系统3.ppt_第3页
第3页 / 共74页
第三章80X86指令系统3.ppt_第4页
第4页 / 共74页
第三章80X86指令系统3.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《第三章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,记盏谓瘫镇

26、敝斩舌蔚椭眺淘啸痛阎砚厕苹耐袖佩萨粘孰甚泥峰饶膛楞切侥第三章80X86指令系统3第三章80X86指令系统3,36,段间间接调用:格式:CALL DWORD PTR DST执行操作:SP SP-2(SP+1),(SP)CS SP SP-2(SP+1),(SP)IP IP(EA)CS(EA)+2 转子程序入口 EA由DST的寻址方式确定的有效地址。,崩幕事都愧饼缄熔盔蛆帛美膊谦博丹扛迂四祷痛罕僳谗侮驾掌剪驯雇桅咕第三章80X86指令系统3第三章80X86指令系统3,37,(2)、RET(Reture from procedure)返回 RET返回指令放在过程(子程序)的末尾使过程(子程序)在功能完

27、成后返回调用程序继续执行*为能准确返回,返回指令类型与调用指令类型相对应。RET返回指令有4种:段内返回段间返回 段内带立即数返回段间带立即数返回返回时:将返回地址出栈 IP(段内或段间)CS(段间),誉铅樱闸屑葛泳缮催郊蜗待铡涡缔倪柞笺雹辩丫衍吠紫澎精贴拍于大菏耶第三章80X86指令系统3第三章80X86指令系统3,38,段内返回:格式:RET 机器码:C3H或者C2H 执行操作:IP(SP+1),(SP)SP SP+2段间返回:格式:RET 机器码:CBH或CAH 执行操作:IP(SP+1),(SP)SP SP+2 CS(SP+1),(SP)SP SP+2,嫌淫傍咯韶绿释咸胺掷黄榨亏腥盈屡

28、菱艳去嫩拦颅茅糖羞窑靡夷穷农袋肺第三章80X86指令系统3第三章80X86指令系统3,39,段内带立即数返回格式:RET imm16执行操作:IP(SP+1),(SP)SP SP+2 SP SP+D16 SP SP+D16用于废除一些在执行CALL指令之前的入栈的参数,揣胞森饮屠栅枕凭盖确皇增烟碴娜纳昌扒茶厢絮及琼玛悍鱼葵膏丢窗厂戮第三章80X86指令系统3第三章80X86指令系统3,40,例如:RET imm16 堆栈使用情况 CODE SEG MENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:MOV AX,DATA MOV DS,AX PUSH

29、 BX PUSH CX CALL DELCHARCS:XXXX MOV AH,4CH INT 21H MAIN ENDP,DELCHAR PROC RET 4 DELCHAR ENDP CODE ENDS END STARTRET imm16 堆栈使用情况,行柱携故慎僚垫迹昂藕澎勃侠果哨儒窿僵研转兹蔡彭湃烯俄懦息买锻曰孝第三章80X86指令系统3第三章80X86指令系统3,41,段间带立即数返回:格式:RET EXP执行操作:IP(SP+1),(SP)SP SP+2 CS(SP+1),(SP)SP SP+2 SP SP+D16 CALL指令和RET指令都不影响条件码。,尖窄蓝沸蝗哗拓汽项吩码贩

30、缚升窖镐搔碉仪爸赞默遭或怀栓垂蒲拟鸳浅堕第三章80X86指令系统3第三章80X86指令系统3,42,另一个代码段 PRO-A PROC PRO-B PROC CALL near ptr PRO-B CALL near ptr PRO-C(IP)=2500H(IP)=4000H CALL near ptr PRO-C RET(IP)=3700H PRO-C PROC RET RET,例:学习使用 段内、段间直接调用指令的使用及堆栈情况主程序 MAIN在一个代码段中子程序 PRO-A PRO-B PRO-C在另一个代码段程序调用关系:,(SP)=0100H MAINCALL far ptr PRO

31、-A(CS)=0500H(IP)=1000H,刚锣伶趁馅伸骇窖遍水熏饶蜜急铭揍苗勇官勒淳幌设顾科绊蘑摘吱奉厉羽第三章80X86指令系统3第三章80X86指令系统3,43,堆栈情况:,肾佳饵凰粳毖熏玩掘烯毡竿徐腊蕾挡辽忆铃磺醋僚浊侯绞琳店蕴甜堂偏辫第三章80X86指令系统3第三章80X86指令系统3,44,当前IP的值为控制转移指令下一条指令的偏移地址。位移量=符号地址的偏移量-当前IP的值。符号地址(目标地址)=当前IP的值+位移量,(3)、小结:指令格式:JMP 操作数,嘴睬海惠桥至填门抛腰蹲厕钠百摈癣裴拉攫萍奠租兄腕究玄亥绕锨则扳绒第三章80X86指令系统3第三章80X86指令系统3,45

32、,转移方式:由CS是否变化、以及操作数类型决定情况如下表,弃肖烂扳霸蚜瓤养虱广仇托病晋这凰房夫毋漫滑揍负咸泣阁脉沏附秩抱尉第三章80X86指令系统3第三章80X86指令系统3,46,各控制转移指令允许使用的转移方式,耗痘迭儿烁傈遥混蛤葵闷坠挝释亭侄具吗囱钾泻赋呢驯隘腐穗疡矿胚尖奋第三章80X86指令系统3第三章80X86指令系统3,47,例:JMP again()JMP BX()JMP WORD PTR BX()JMP DWORD PTR BX()JZ AX()LOOP BX()JNZ next(?)(若 next的位移量超出-128127)指令JMP、CALL、Jcc、LOOPxx本身对标志

33、无影响。,徊却剖提齐洞缝习上沦许胖奄露综猾持跃周茸乱若绍首绰绊官型丧菌滞条第三章80X86指令系统3第三章80X86指令系统3,48,3、循环控制指令格式:LOOPxx符号地址 执行 操作:CX CX-1 此操作不影响标志 检查转移条件xx,满足转向目标地址去执行;不满足执行LOOPxx后一条指令转移方式 只允许段内直接短方式,跳转范围-128127,摩弟犹发芋导篙粘蒸窜商彝问树恨赛秀孔模溯丁彰卵骸幢皑晶亥忿邮虾味第三章80X86指令系统3第三章80X86指令系统3,49,与条件转移指令不同的是:循环指令隐含(CX)减操作。例:用循环指令将BL寄存器的内容按二进制形式显示出来学习:LOOP指令

34、MOV CX,8 next:ROL BL,1 MOV DL,BL AND DL,0000 0001B ADD DL,0011 0000B MOV AH,2 INT 21H DEC CX JNZ next,LOOP next,罕滦郝索吠萝判狈哆楔裳如晾狂蹈音广郴辫丸茅芋溶泥容含锣晴其缠诛晰第三章80X86指令系统3第三章80X86指令系统3,50,循环指令说明:LOOP退出循环条件是 CX=0 LOOPZ和LOOPNZ提供了提前结束循环的可能,不一定要等到 CX=0才退出循环。在串中查找字符,查到了,就可退出,可用LOOPNZ,不相等时继续查找。比较两串时,当有字符不等,就可退出,说明两字符串不

35、等。可用LOOPZ,当相等时继续比较。执行完 LOOPNZ或LOOPZ后,根据ZF标志的值判断结果对查找字符,ZF=1,说明找到;否则没有找到。对串比较,ZF=1,说明两串相等;否则不等。,戎匡梨非榨日涉奠唁剐宙磷戳涂遂陷践氦亨后埋非玻错枪锤群煮奠抬榜态第三章80X86指令系统3第三章80X86指令系统3,51,例:检查当前数据段所在的64K字节内存是否能够正确地进行读写操作。可先向每个字节写入数据01010101B,然后读出来进行比较。如正确则转至目标标号OK的程序段,否则进入出错处理程序段ERROR。,MOV CX,0000H MOV BX,0000H MOV AL,01010101HAG

36、AIN:MOV BYTE PTRBX,AL INC BX CMP BYTE PTRBX-1,AL LOOPZ AGAIN JCXZ OKERROR:.;出错处理.OK:.;读写正确,蝴光芦漂亮鲍脾莫棍问淘堡峙邮殖屹郸东稳教铁泄格棘价血春楞沾通斧犯第三章80X86指令系统3第三章80X86指令系统3,52,例:在string字符串中查找空格字符,串长度为N。,用条件转移:JZ MOV CX,N MOV AX,SEG string MOV DS,AX LEA BX,string MOV AL,20H next:CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到

37、处理 Find:找到处理,檬窒遗检苹顽烷歇茶盗鹃抿伤分撕关握详语忽护蓬胚织扣疤逐鱼知移哥唇第三章80X86指令系统3第三章80X86指令系统3,53,用条件转移:JZ MOV CX,N MOV AX,SEG string MOV DS,AX LEA BX,string MOV AL,20H next:CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到处理 JMP exit find:找到处理exit:结束出口,用循环指令:LOOP NZ next MOV CX,NMOV AX,SEG stringMOV DS,AXLEA BX,string MOV AL,

38、20H DEC BXnext:INC BX CMP AL,BX LOOPNZ nextJZ find未找到处理 JMP exit find:找到处理exit:结束出口,碑妆驻阜枚簿惯近茫阀弘慎失须最逃斩吓岁堵篱宙献禄误员扦备魔镊溉痕第三章80X86指令系统3第三章80X86指令系统3,54,思考:去掉指令JMP exit,程序执行结果会怎样?执行完LOOPNZ后,可否根据CX=0来判断查找结果?有人认为CX=0,即说明没找到,对吗?,男竣愈烩翌饰恤胆怯鲍忠瞩酚亿悍叠牧富柑漓堑艰空淋帐洁慨漱盼牙翅鳞第三章80X86指令系统3第三章80X86指令系统3,55,MOV CX,28H MOV SI,0

39、FFHNEXT1:INC SI CMP BYTE PTR SI,0 LOOPZ NEXT1;当Z=1、(CX)0循环;当Z=0,或(CX)=0结束循环。JNZ OKK;当找到非零元素转OKK。CALL DISPLAY1;当找不到非零元素转DISPLAY1OKK:CALL DISPLAY2,用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。有时需要字符串中查找一个字符,找到后可提前结束循环,用LOOPZ、LOOPNZ来处理。例:40个元素构成的数组,找出第一个非零元素。,DISPLAY1 RETDISPLAY2 RET,诉滞蜀噎刀喷复嫩捶祟蕴饶硕湾骚挑镶层鳃吱瞥女撒侠殖柜摆痰沧鲜串摩第三章

40、80X86指令系统3第三章80X86指令系统3,56,4、中断指令 中断(Interrupt):有时当系统运行或程序运行期间遇到某些特殊情况,需要计算机自动执行一组专门的例行程序来进行处理。中断例行程序(或中断子程序)(Interrupt routine):所执行的这组程序就称为中断子程序。种类:中断分为内部(软)中断和外部(硬)中断两种。内部中断如除法运算中除数为0、中断指令引起的中断 外部中断处理I/O设备与CPU之间的通信。,妮盅奠隘回逛蕴侮疗紊羊影醉剩费稚宋牲展腐阀侨峻回小奏咖罐戊呕丁族第三章80X86指令系统3第三章80X86指令系统3,57,CPU响应一次中断自动完成三件事情:PS

41、W 入栈 保护现场,CS,IP 保存入栈 保留断点,转中断例行程序去执行。中断返回时:恢复 IP、CS 及 PSW中断向量:中断例行程序入口地址。在微机中,存储器的最低地址00000H003FFH为中断向量区,存放256种类型中断例行程序入口地址,每个中断向量占4个单元。中断指定类型号N 4取得指定类型的中断向量地址。,身笔央殉纲鸿惶晓痞副墓臂糊府眺氨稠显竹危鹅年刑窘霸泰响姑锨否轻禄第三章80X86指令系统3第三章80X86指令系统3,58,例:中断类型9,9 4=36 00024H00027H单元中放中断向量。IBM-PC机中为每个类型规定了一种功能:,*除非特别注明,类型号是以16进制形式

42、表示的。,迁释史便疾般透须弱当各考迫险述廖蕉锋象设蘑腺杏纫扰贯偶侧四愿峦逼第三章80X86指令系统3第三章80X86指令系统3,59,内存0000H:0000H0000H:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。每4个单元对应1个中断源。关系如下表:,窝垦钵版耗什店茫细只绥栅堆鼻峙互酌壹丢乱课腊婶砌郁碌溺烃评驹必萧第三章80X86指令系统3第三章80X86指令系统3,60,(1).介绍几条指令:INT n,IRET 格式:INT n;n常数或表达式,n=0255或INT 执行操作:SP SP-2,(SP+1),(SP)PSW SP SP-2,(SP+1),(SP)CS SP

43、 SP-2,(SP+1),(SP)IP IP(n4)CS(n4+2)清除IF、TF,避免进入中断以后不被外面其它中断所打断 及进入中断以后按单步执行。,弛告粘意先硬疥篮汁魔炸亩蜀填亡渺桃玻隧邹辩廓乙孰诈酋测症滁波盲拄第三章80X86指令系统3第三章80X86指令系统3,61,类型03的中断称为内部中断。类型0:指令系统没有INT0这条指令 除数为0中断 除数为0:它既不是外部中断 也不是软件中断,是由 CPU自身产生的,所以无对应中断指令。有符号数进行除法所得的商超出规定范围有符号数进行除法运算,所得的商超出规定范围,CPU自动产生类型为0的中断,转入响应的中断处理程序。,冤渺棠钳额北嗜井辐虞

44、假廷铅这王羹嫌烽柴痴氖头书距萨釉稻瓶咎馆留拦第三章80X86指令系统3第三章80X86指令系统3,62,类型1单步中断 TF=1进入单步中断。单步中断不是由外部硬件或程序中的中断产生,而是CPU测试TF=1时产生的。单步中断每执行一条指令,进行一次单步中断处理,显示出一系列内 部寄存器的值,并告 示一些 附带的信息。一般用于调试程序中逐条执行用户程序。对于有重复前缀串操作指令单步操作下,每重复一次将产生一个单步中断,而不是整个串操作结束后进入单步操作。,趣揩关忱依刁严眷斯稠班彝醉镭缮蹿跋邵扛粒言遂丰民慈毡匈壶扶蹬缎倘第三章80X86指令系统3第三章80X86指令系统3,63,类型2NMI中断,

45、非屏蔽中断NMI中断是由NMI引腿引入,不受IF屏蔽,只要NMI腿出现中断请求中断处理子程序入口地址在:0000H:0008H0000H000BH中。CPU予以响应,进入对应的中断处理。一般用于处理系统的重大故障。,敢衣义浪学炙爪患恐麓螟腥光镣触依押寝鞋茁跋芥呻宅瑞百毖占淌窗基疥第三章80X86指令系统3第三章80X86指令系统3,64,类型3断点中断8088提供的一种调试手段。设置断点过程(在DEBUG下):用户程序指定断点:用断点的中断指令INT3来代替原有指令,把用户原有指令进栈保存,这样运行到断点处执行INT3,转入中断处理程序,显示一系列寄存器值,并给出一些重要信息,用户可判断正误。

46、断点中断还负责恢复进入中断前的被INT3替换掉的那条指令。,杠蠕幂赂譬俘迁纤途液备伎郊张邦肠吨摹贩甥剧冰贱誊蔬例厂望技砍台圭第三章80X86指令系统3第三章80X86指令系统3,65,(2)类型4溢出中断,INTO指令格式:INTO;该指令检测OF标志,OF=1执行 INTO,否则执行INTO下一条执行。执行操作:SP SP-2,(SP+1),(SP)PSW SP SP-2,(SP+1),(SP)CS SP SP-2,(SP+1),(SP)IP IP(10H)CS(12H)IF=TF=0,碍眩脐貉缩蛹该澳墙土廓专姓梭沂杭幕毡掂瞅旷徊匪旺弧惹锦锦舵贰磁史第三章80X86指令系统3第三章80X86

47、指令系统3,66,执行:OF为1时,执行 INTO;OF为0时,执行INTO下一条执行。例 INTO 类型4中断子程,少哮溜滚跪中须阅绣瑞疡遮眨芭猫巍功谱薯氖吴吠诊趁杨纺享狸拾着旭怜第三章80X86指令系统3第三章80X86指令系统3,67,(3)IRET从中断返回指令(Interrupt return)IRET退出中断过程,返回中断时断点。不管是硬中断还是软中断所有,中断过程(服务程序)的最后一条指令一定是 IRET。格式:IRET 执行操作:IP(SP+1),(SP),SP SP+2 CS(SP+1),(SP),SP SP+2 PSW(SP+1),(SP),SP SP+2,代虹箍烃腐抄侍双

48、辙妻优干书韵勋肾唬君坡敌闯盾秃闯皿茂婚轰惋程来丢第三章80X86指令系统3第三章80X86指令系统3,68,8086/8088的指令系统,六、处理器控制指令包括两种(一)标志处理指令(二)其他处理机控制指令,牟逸斥抛钮裴缸膛输谤晌刃无规恨出报丛捞措锦雀关陌点锈付陇锹邮码俭第三章80X86指令系统3第三章80X86指令系统3,69,六、处理器控制指令(一)标志处理指令1、CLC(Clear carry flag)清CF标志2、STC(Set carry flag)置CF标志3、CMC(Complement carry flag)对CF求反4、CLD(Clear direction flag)清D

49、F标志5、STD(Set direction flag)置DF标志6、CLI(Clear interrupt flag)清IF标志7、STI(Set interrupt enable flag)置IF标志(二)其他处理机控制指令1、NOP(No operation)空操作2、HLT(Halt)CPU暂停状态3、WAIT(Wait while pin not asserted)CPU等待状态4、ESC(Escape)交权5、LOCK(Lock bus)总线锁定,周森茂殖鹊清衣罕胆日移添颧枝沁荚擎毁彰她挖除涉返炽慌疯罢燥徘扶鳃第三章80X86指令系统3第三章80X86指令系统3,70,1 标志处理

50、指令 设置和清除标志的指令,只影响指令指定的标志。,婴惮侧龟扣懈煎敷隅罪绝绢体霜押项撰池铅肚卵子贞钩兽攀真躯司懒篆宅第三章80X86指令系统3第三章80X86指令系统3,71,2其他处理机控制指令 暂停指令HLT 格式:HLT 执行:使CPU处于暂停状态 用于等待外部中断,中断处理结束后,继续执行HLT后的下一条指令例 STI;允许外部中断 HLT;等待中断 MOV AX,0,瑶撼韶活亲礼针御梦脸吐痈努院薯览求往膜痞锯崖藉斌撂已随课楚室恕逢第三章80X86指令系统3第三章80X86指令系统3,72,只有以下几种情况才能脱离暂停状态:RESET线上有复位信号 在NMI线上有请求 在中断允许情形下

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号