欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

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

    • 资源ID:5928365       资源大小:376KB        全文页数:74页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1,五控制传送指令(Control transfer instructions) (一)、控制传送指令概述 控制传送指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。 1、转移指令 转移指令包括两种: (1)、JMP (Jump) 无条件转移指令 (2)、Jcc 条件转移指令,傀饵助亡配爆魏勘砌漫岁检愉跺各图找烃釜益峰械酥克泽焦配稼嗣撤息疼第三章80X86指令系统3第三章80X86指令系统3,2,(1)、JMP(Jump)无条件转移指令 JMP指令的操作:无条件地将控制转移到指令中规定的目的地 目标地址可以是:直接方式/间接方式给出。 JMP指令不影响标志位。 转移分成两类:段内或段间转移。 无条件转移指令有五种格式: 段内直接短转移 段内直接近转移 段内间接转移 段间直接远转移 段间间接转移,卒贩颇炙蹭宣蜘淳煎锌翘偷俯捡百直安给慨佑怎奉粤少硅驭改币胞巴唱了第三章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)/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调用指令 段内直接调用段间直接调用 段内间接调用段间间接调用 (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) 当不相等/不为“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,归结控制转移指令分类,壹鹤复俩姨样提吩荣据霸捐弯茨择噬竣又扑继钵尧詹减深北钓辰障倚厂二第三章80X86指令系统3第三章80X86指令系统3,8,(二) 控制转移指令(Control transfer instructions) 1、转移指令 转移指令将程序控制从一处转换到另一处的最直接方法。 在CPU内部,转移是通过将目标地址传送给CS:IP来实现的。 注意:CS段地址 IP偏移量,星陪羡织货躯柿杏赖酮形嘉肇扫软君芋敢少础阳佣浆韶示丑涧犊处未尊仆第三章80X86指令系统3第三章80X86指令系统3,9,先介绍控制和非控制转移指令的概念 非控制转移指令:指令本身对CS和IP均无操作,形成顺序 执行结构。 顺序执行结构: 顺序存放,顺序执行 控制转移指令: 以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的值加上该指令的字节数, 使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,溺诞敌阎投恃听事俭黔菠拇案湿初泻硒洲凡弯显湍沥则耶篱椒就棍歹彦灭第三章80X86指令系统3第三章80X86指令系统3,12,(1)、JMP(Jump)无条件转移指令 JMP(jmp)跳转指令。 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。 段内转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的IP值。 段间转移:要修改IP、 CS寄存器的内容 转到另一段去执行程序。 即转移目标地址= 新的段地址和偏移地址两部分组成。,榔碗阿董刁窖辑淆诫郭氓沼窍篮柴鹰搀郑画茵缀伤语丢淡匹脑韭鲁秆弱不第三章80X86指令系统3第三章80X86指令系统3,13,段内直接短转移: 格式:JMP SHORT OPR OPR在汇编语言中使用符号地址。 在机器语言中存放位移量D8 位移量D8 = 符号地址的偏移地址 - 当前IP的值 执行操作: IP IP 当前+D8 SHORT 短属性标号 8位位移量D8的范围在(-128 127)之间,占有一个字节。 而指令本身占有两个字节。,缀辽剁顺张植牢涉骄带火蒲内譬绽龚噶沦垮张聊超遣拯铺坊苇桩网哉坟黑第三章80X86指令系统3第三章80X86指令系统3,14,例如:代码段内有一条无条件转移指令,在汇编语言中使用符号地址JMP SHORT NEXT指令执行过程: NEXT在汇编语言中使用符号地址 IP IP当前 + D8,刁支饱举垮闽蜕湛守盘蝶缉窘姨忻佛次奏蛤招簇婴嫂澜百淤察卤企啼肤希第三章80X86指令系统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, 段内间接转移: CS 不变,只改变 IP 格式:JMP WORD PTR OPR OPR 为16位寄存器、 或存储器(除立即数以外的任何一种寻址方式) 执行操作: IP (EA) 或 IP reg16 指令格式举例: JMP AXJMP SI JMP 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, ( 11002H)=5678H JMP CX;IP =5000H JMP 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个字分别存放符号地址的段值、偏移值, 用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)都改变 格式:JMP DWORD PTR OPR OPR 使用存储器 (除立即数和寄存器以外的任何一种寻址方式) 执行操作: IP (EA) CS(EA+2) 例:已知 BX =1000H, SI =2000H , DS =2000H (23000H)=2211H, (23002H)=4433H JMP 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 条件转移指令 根据单个条件标志的设置情况转移(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 操作:根据上一条指令所设置的条件码来判别测试条件转移。 每一种条件转移指令都有它的测试条件。 满足条件时 : IP IP 当前+ 符号扩展到16位后的位移量D8, 使用相对寻址方式,范围-128+127个字节 即条件转移指令都是“直接短转移” 不满足条件时: IP 不变,顺序执行下一条指令,脚淳峻韭泊酒丑帖鞘拷阮乞禄惕范蔼统坝三瘴滚祖庭钝乳雌潍判逊舀毁讹第三章80X86指令系统3第三章80X86指令系统3,23,注意几点: 所有条件转移指令都是相对转移形式, 范围(-128+127)。 当需往一个较远地方进行条件转移时, 选用条件转移转到附近一个单元, 然后,再用无条件转移转到较远的目的地。 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移, 条件转移指令不影响标志位,饭述野截镊层验登川度蹿桔恃棠雕奋童俏抗问姥择憋失词壮伶套栅估曼罗第三章80X86指令系统3第三章80X86指令系统3,24,按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件助记符转移条件, 以CX的值为0作为转移条件,躺轴份梆笺摆掏穷衍衡誉贰痢坡吧兹哺第育油拉渝酮宜律妙惕五国贡赤洋第三章80X86指令系统3第三章80X86指令系统3,25,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,驼铺近振碗绘刺豪但迂寨徒们绝弯挎饥氨徘次密橱拢乳述饼戏兆压左洽矗第三章80X86指令系统3第三章80X86指令系统3,26,条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否则做动作2 CMP AX,BX JE action_1 Action_2: action_1: ,或 CMP AX,BX JNZ action_2 action_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_high SUB AX,Y JO overflow ;溢出转overflow JNS 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: 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, 2 dec cx jnz again mov ax, N sub ax, di sub ax, si jz skip ;没有负数 jmp near ptr neg_val ;有负数 skip: neg_val: ,营焦吞汕锹弓份涉樟校睹宗径聘耕豫稿肺煽果逾一哆良杂逊修醒瘁友耘粉第三章80X86指令系统3第三章80X86指令系统3,29,2、 过程( 子程序 )调用指令 过程程序中具有独立功能的部分编写成独立程序模块。 过程(子程序)定义格式: 符号名 PROC 类型 符号名 ENDP 子程序调用和返回指令: CALL RET 过程有两种类型: 按过程与调用语句间的位置,过程有两种类型。 NEAR类型:调用指令与过程在同一个段中 FAR类型:调用指令与过程不在同一个段中 CALL指令和RET指令都不影响条件码。,帘运掳迟答锻拟勉瞎结瘁拐赃钧铃参姆妖威宴练迭牧叭覆剔残苗致烹协访第三章80X86指令系统3第三章80X86指令系统3,30,(1)、 CALL( Call a procedure)调用 CALL调用指令调用地址由指令给出 CALL调用指令有4种: 段内直接调用段间直接调用 段内间接调用段间间接调用,相止倚蛛雷刽殴苍声畏捌馈桐迸隶站查额胯柒锅雇黑封件雕绝酒果蔫米矫第三章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 =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指令系统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 ENDS CSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS,记盏谓瘫镇敝斩舌蔚椭眺淘啸痛阎砚厕苹耐袖佩萨粘孰甚泥峰饶膛楞切侥第三章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返回指令 放在过程 (子程序)的末尾 使过程(子程序)在功能完成后返回调用程序继续执行 *为能准确返回,返回指令类型与调用指令类型相对应。 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,嫌淫傍咯韶绿释咸胺掷黄榨亏腥盈屡菱艳去嫩拦颅茅糖羞窑靡夷穷农袋肺第三章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 BX PUSH CX CALL DELCHAR CS:XXXX MOV AH,4CH INT 21H MAIN ENDP,DELCHAR PROC RET 4 DELCHAR ENDP CODE ENDS END START RET 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指令都不影响条件码。,尖窄蓝沸蝗哗拓汽项吩码贩缚升窖镐搔碉仪爸赞默遭或怀栓垂蒲拟鸳浅堕第三章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 MAIN CALL far ptr PRO-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,转移方式:由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本身对标志无影响。,徊却剖提齐洞缝习上沦许胖奄露综猾持跃周茸乱若绍首绰绊官型丧菌滞条第三章80X86指令系统3第三章80X86指令系统3,48,3、循环控制指令 格式: LOOPxx符号地址 执行 操作 : CX CX - 1 此操作不影响标志 检查转移条件xx,满足转向目标地址去执行; 不满足执行LOOPxx后一条指令 转移方式 只允许段内直接短方式,跳转范围-128127,摩弟犹发芋导篙粘蒸窜商彝问树恨赛秀孔模溯丁彰卵骸幢皑晶亥忿邮虾味第三章80X86指令系统3第三章80X86指令系统3,49,与条件转移指令不同的是:循环指令隐含 ( CX ) 减操作。 例:用循环指令将BL寄存器的内容按二进制形式显示出来 学习: LOOP指令 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,不相等时继续查找。 比较两串时,当有字符不等,就可退出,说明两字符串不等。 可用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, 01010101H AGAIN: MOV BYTE PTRBX, AL INC BX CMP BYTE PTRBX-1,AL LOOPZ AGAIN JCXZ OK ERROR: . ;出错处理 . 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 未找到处理 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, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H DEC BX next: INC BX CMP AL, BX LOOPNZ next JZ 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,0FFH NEXT1:INC SI CMP BYTE PTR SI,0 LOOPZ NEXT1 ;当Z=1、(CX)0循环; 当Z=0,或(CX)=0结束循环。 JNZ OKK ;当找到非零元素转OKK。 CALL DISPLAY1;当找不到非零元素转DISPLAY1 OKK: CALL DISPLAY2 ,用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。 有时需要字符串中查找一个字符,找到后可提前结束循环, 用LOOPZ、LOOPNZ来处理。 例:40个元素构成的数组,找出第一个非零元素。,DISPLAY1 RET DISPLAY2 RET,诉滞蜀噎刀喷复嫩捶祟蕴饶硕湾骚挑镶层鳃吱瞥女撒侠殖柜摆痰沧鲜串摩第三章80X86指令系统3第三章80X86指令系统3,56,4、中断指令 中断(Interrupt): 有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。 中断例行程序(或中断子程序)(Interrupt routine):所执行的这组程序就称为中断子程序。 种类: 中断分为内部(软)中断和外部(硬)中断两种。 内部中断如除法运算中除数为0、中断指令引起的中断 外部中断处理I/O设备与CPU之间的通信。,妮盅奠隘回逛蕴侮疗紊羊影醉剩费稚宋牲展腐阀侨峻回小奏咖罐戊呕丁族第三章80X86指令系统3第三章80X86指令系统3,57,CPU响应一次中断自动完成三件事情: PSW 入栈 保护现场, CS , IP 保存入栈 保留断点, 转中断例行程序去执行。 中断返回时: 恢复 IP 、 CS 及 PSW 中断向量:中断例行程序入口地址。 在微机中,存储器的最低地址00000H003FFH为中断向量区,存放256种类型中断例行程序入口地址, 每个中断向量占4个单元。 中断指定类型号N 4取得指定类型的中断向量地址。,身笔央殉纲鸿惶晓痞副墓臂糊府眺氨稠显竹危鹅年刑窘霸泰响姑锨否轻禄第三章80X86指令系统3第三章80X86指令系统3,58,例:中断类型9,9 4=36 00024H00027H单元中放中断向量。 IBM-PC机中为每个类型规定了一种功能:,*除非特别注明,类型号是以16进制形式表示的。,迁释史便疾般透须弱当各考迫险述廖蕉锋象设蘑腺杏纫扰贯偶侧四愿峦逼第三章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 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的中断,转入响应的中断处理程序。,冤渺棠钳额北嗜井辐虞假廷铅这王羹嫌烽柴痴氖头书距萨釉稻瓶咎馆留拦第三章80X86指令系统3第三章80X86指令系统3,62, 类型1单步中断 TF=1进入单步中断。 单步中断不是由外部硬件或程序中的中断产生, 而是CPU测试TF=1时产生的。 单步中断每执行一条指令,进行一次单步中断处理, 显示出一系列内 部寄存器的值,并告 示一些 附带的信息。 一般用于调试程序中逐条执行用户程序。 对于有重复前缀串操作指令单步操作下,每重复一次将产生一个单步中断,而不是整个串操作结束后进入单步操作。,趣揩关忱依刁严眷斯稠班彝醉镭缮蹿跋邵扛粒言遂丰民慈毡匈壶扶蹬缎倘第三章80X86指令系统3第三章80X86指令系统3,63, 类型2NMI中断,非屏蔽中断 NMI中断是由NMI引腿引入,不受IF屏蔽, 只要NMI腿出现中断请求 中断处理子程序入口地址在: 0000H:0008H0000H000BH中。 CPU予以响应, 进入对应的中断处理。 一般用于处理系统的重大故障。,敢衣义浪学炙爪患恐麓螟腥光镣触依押寝鞋茁跋芥呻宅瑞百毖占淌窗基疥第三章80X86指令系统3第三章80X86指令系统3,64, 类型3断点中断8088提供的一种调试手段。 设置断点过程(在DEBUG下): 用户程序指定断点: 用断点的中断指令INT3来代替原有指令, 把用户原有指令进栈保存, 这样运行到断点处执行INT3,转入中断处理程序 , 显示一系列寄存器值,并给出一些重要信息,用户可判断正误。 断点中断还负责恢复进入中断前的被INT3替换掉的那条指令。

    注意事项

    本文(第三章80X86指令系统3.ppt)为本站会员(京东小超市)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开