汇编语言第九次课

上传人:pu****.1 文档编号:592599941 上传时间:2024-09-21 格式:PPT 页数:29 大小:1.75MB
返回 下载 相关 举报
汇编语言第九次课_第1页
第1页 / 共29页
汇编语言第九次课_第2页
第2页 / 共29页
汇编语言第九次课_第3页
第3页 / 共29页
汇编语言第九次课_第4页
第4页 / 共29页
汇编语言第九次课_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《汇编语言第九次课》由会员分享,可在线阅读,更多相关《汇编语言第九次课(29页珍藏版)》请在金锄头文库上搜索。

1、8086/8088指令系统指令系统v3.3.5控制转移指令控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令。控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,值,实现程序执行顺序的改变实现程序执行顺序的改变分为:无条件转移指令、条件转移指令、循环指令、子程序调用和返回指令、中断与中断返回指令 瘴绚鞋姆辩曲蜀界绪梆绪釉构间危敬需戌传净谢护舅财抒毋喘垄羌显徐谩汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v1、无条件转移指令 JMP label;程序转向label标号指定的地址v只要执行无条件转移指令JMP,就使程序转到指定的目标地址

2、处,从目标地址处开始执行指令v操作数label是要转移到的目标地址(目的地址、转移地址)vJMP指令分成4种类型: 段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址颗钓弊射其庇沈冯各拨恨翅茧额柬谩虾牲集京菠杜橱句逮紧蜕顽皇歉李挎汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v目标地址的寻址方式v相对寻址方式相对寻址方式相对寻址方式以当前IP为基地址,加上位移量构成目标地址v直接寻址方式直接寻址方式转移地址象立即数一样,直接在指令的机器代码中v间接寻址方式间接寻址方式转移地址在寄存器或主存单元中 用标号表达用标号表达用标号表达用标号表达用寄存器或

3、存储器用寄存器或存储器操作数表达操作数表达梗兔勾忙泣椎勉桥朗炭仑好朋蓑篇烁汕掸贰闽幕奸裂贺页腰揣恨蚊崖内锰汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v目标地址的范围:段内v段内转移近转移(near)在当前代码段64KB范围内转移( 32KB范围)不需要更改CS段地址,只要改变IP偏移地址v段内转移短转移(short)转移范围可以用一个字节表达,在段内128127范围的转移当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负代代码码段段代代码码段段绘迁蒲溉朱胁合闸瑟奥恒抵迪柬董况像裸瞻袄灼熬酣抗令倘钱肛洽炸盖喉汇编语言第九次课汇编语言第九次课8086/80

4、88指令系统指令系统v目标地址的范围:段间段间转移远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址 代代码码段段代代码码段段*实实际际编编程程时时,MASM汇汇编编程程序序会会根根据据目目标标地地址址的的距距离,离,自动处理自动处理成短转移、近转移或远转移成短转移、近转移或远转移* 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强制栗狼钡程翅攫祟姬搐玖利驾鼠戴郭醋冻幽墅沟凸仅温娱恬直宾浪晴委窗巩汇编语言第九次课汇编语言第九次课8086/8088指令

5、系统指令系统v(1)段内直接转移(段内转移相对寻址)段内直接转移(段内转移相对寻址)段内直接短转移:JMP SHORT OPR执行操作:(IP) (IP) + 8位位移量段内直接近转移:JMP NEAR PTR OPR 执行操作:(IP) (IP) + 16位位移量v(2)段内间接近转移)段内间接近转移格式:JMP WORD PTR OPR执行操作: (IP) (EA)v(3)段间直接远转移)段间直接远转移格式:JMP FAR PTR OPR执行操作:(IP) OPR 的段内偏移地址 (CS) OPR 所在段的段地址v(4)段间间接远转移)段间间接远转移格式 JMP DWORD PTR OPR

6、 执行操作: (IP) (EA) (CS) (EA+2)齐讼狰慨携券惹咏卓改助鸥纤削辅粗贝烬势殃马倔几寻犹堕竹囤股涛滴斟汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v2、条件转移8086/8088提供了大量的条件转移指令,它们根据某标志位或某些标志位的逻辑运算来判别条件是否成立。如果条件成立,则转移,否则继续顺序执行。所有条件转移都只是段内转移。P87条件转移指令不影响标志位。条件转移指令是用得最多的转移指令,通常在条件转移指令前,总有用于条件判别的有关指令。 菠慈蝉韶蒙辕青沼熔辩岳缺辨头寺升榆泻登待炎谎铡爸帽倚脸袖砾烤杜赢汇编语言第九次课汇编语言第九次课8086/808

7、8指令系统指令系统 (1) 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移 格式格式 测试条件测试条件JZ(JE) OPR ZF = 1JNZ(JNE) OPR ZF = 0JS OPR SF = 1JNS OPR SF = 0JO OPR OF = 1JNO OPR OF = 0JP OPR PF = 1JNP OPR PF = 0JC OPR CF = 1JNC OPR CF = 0哮畸亦来摩岳勃梗捅窝铆裴歇页彪咽谁廷挺天芜茁晃示寺驱膳赊控电殉朵汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v例 程序段1MOV AX,147BHMOV BX,80DCHAD

8、D AX,BXJNO L1JNC L2程序段2MOV AX,99D8HMOV BX,9847HSUB AX,BXJNC L3JNO L4上述两段程序执行后,分别转移到哪里?(1)转L1,(2)转L3腿泣锻辑孰提搐勤裹销毁魔续弯挎教悯喝妙袄零悍痰晌汀馏锥抄韵档拓网汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统(2) 比较两个无符号数,并根据比较结果转移比较两个无符号数,并根据比较结果转移* 格式格式 测试条件测试条件 JB (JNAE,JC) OPR CF = 1 JNB (JAE,JNC) OPR CF = 0 JBE (JNA) OPR CFZF = 1 JNBE (JA

9、) OPR CFZF = 0* 适用于地址或双精度数低位字的比较适用于地址或双精度数低位字的比较无符号数间的次序无符号数间的次序关系:关系:高于(高于(A),等于),等于(E)低于()低于(B)固树径贿满皖蛋览劣尼葛屑莽僧喳子煤淀宴胀谗裴深牡缝技涛呐事两券拖汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统(3) 比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移* 格式格式 测试条件测试条件 JL (JNGE) OPR SF OF = 1 JNL (JGE) OPR SF OF = 0 JLE (JNG) OPR (SF OF)ZF = 1 JNLE (

10、JG) OPR (SF OF) ZF = 0* 适用于带符号数的比较适用于带符号数的比较(4) 测试测试 CX 的值为的值为 0 则转移则转移 格式格式 测试条件测试条件 JCXZ OPR (CX)=0有符号数间的次序有符号数间的次序关系:关系:大于(大于(G),等于),等于(E)小于()小于(L)职津白尼龋然棘蔬魄肢舍摇舞段架姻罚掏棉纲慧肃曳惨髓统杠鸦豢垂溃钧汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v例:实现两个无符号数(设在AX和BX中)的比较,把较大的数存放到AX中,把较小的数存放在BX中。CMP AX,BXJAE OKXCHG AX,BXOK: 条件测试的标志

11、完全不同,指令不同两个有符号数比较:CMP AX,BXJGE OKXCHG AX,BXOK:朵郴辣孵噶校撞笛塑险余淘飞钒霹泛哄漠惦匆丘醉蓄华焚请鬼澄霸除注竟汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统例例:如如果果 X50,转转到到TOO_HIGH;然然后后做做X-Y,如如果果溢溢出出转到转到 OVERFLOW,否则计算,否则计算 |X-Y| RESULT, MOV AX, XMOV AX, XCMP AX, 50CMP AX, 50JG TOO_HIGHJG TOO_HIGHSUB AX, YSUB AX, YJO OVERFLOWJO OVERFLOWJNS NONN

12、EGJNS NONNEGNEG AXNEG AX NONNEG: MOV RESULT, AX NONNEG: MOV RESULT, AXTOO_HIGH:TOO_HIGH: OVERFLOW: OVERFLOW: 对魏塔爵墓驻损兔胆佐酒笔桑地谁恼娩斯并啦贯糊绚习墟痒比予睦冗议改汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v4.循环指令利用条件转移指令和无条件转移指令可以实现循环,但为了更方便于循环的实现,8086/8088还提供了三条用于实现循环的指令。LOOPLOOPZ / LOOPELOOPNZ / LOOPNE执行步骤: (1) (CX) (CX) - 1 (2

13、) 检查是否满足测试条件,如满足则(IP) (IP) + 8位位移量,实行循环; 不满足则 IP 不变,退出循环。注意:注意:* CX 中存放循环次数中存放循环次数* 只能使用段内直接寻址只能使用段内直接寻址的的8 位位移量位位移量硫瓢佩寞炔睹遂朔萝亡毋戎厅雌读贯妮自潭三检辩国挡坷啪宵厘糊伦色坠汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 循环指令:循环指令:LOOP OPRLOOP OPR测试条件:测试条件:(CX) (CX) 0 0 为零或相等时循环指令:为零或相等时循环指令:LOOPZ(LOOPE) OPRLOOPZ(LOOPE) OPR测试条件:测试条件:ZF=1

14、 ZF=1 且且 (CX) (CX) 0 0不为零或不相等时循环指令:不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPRLOOPNZ(LOOPNE) OPR测试条件:测试条件:ZF=0 ZF=0 且且 (CX) (CX) 0 0赂范喜灯质咆净举还茁皇路鞋凝穗蕊志翁扒嗽窑栽滔羡涤仗嚷桑消肋十瘫汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 例:求首地址为例:求首地址为 ARRAY ARRAY 的的 M M 个字之和,个字之和, 结果存入结果存入 TOTAL TOTALMOV CX, MMOV CX, MMOV AX, 0MOV AX, 0MOV SI, AXMOV

15、 SI, AXAGAIN: AGAIN: ADD AX, ARRAYSIADD AX, ARRAYSIADD SI, 2ADD SI, 2LOOP AGAINLOOP AGAINMOV TOTAL, AXMOV TOTAL, AX砚趣捏求粕墓镊目紧循耶冠随甩驻渝兼蹋隅垂枝颖夷鸟俩疥甲坚隆借芬右汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v5.子程序子程序是完成特定功能的一段程序当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行当运行完子程序功能后,采用RET返回指令回到主程序继续执行。 脐贞赶磷呜缝功尉癸撒酞梨沥企缆采睹权龄声涉颁姥燎工

16、牧渣兴敬颈罩啡汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令处指令后的指令处返回地址返回地址溺审玲已愤蝴淬谨犬擅唁某票潭就皑谱忿诱滓丁陡恬睫疑旗枕庆股焦州朵汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v(1)子程序调用指令CALL指令分成4种类型(类似JMP)CALL label;段内调用、相对寻址CALL r16/m16;段内调用、间接寻址CALL far ptr label;段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址CALL指令需要保存返回地

17、址:段内调用入栈偏移地址IPSPSP2,SS:SPIP段间调用入栈偏移地址IP和段地址CSSPSP2,SS:SPIPSPSP2,SS:SPCS什姥泥饱定凤坪免学绝源电啄朗瑰且沂且令党恳神辱果周留坏兴鞭墨嘿猩汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v(2)子程序返回指令v根据段内和段间、有无参数,分成4种类型RET;无参数段内返回RET i16;有参数段内返回RET;无参数段间返回RET i16;有参数段间返回v需要弹出CALL指令压入堆栈的返回地址段内返回出栈偏移地址IPIPSS:SP, SPSP2段间返回出栈偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS

18、:SP,SPSP2眠撰塌埂寨排苹捣端觅烩管森秒迹针檀菌犀箕可脂嗜予呕朱吹店懒谜滤条汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v例;主程序MOV AL,0FH;提供参数ALCALL HOTASC;调用子程序.;子程序:将AL低4位的一位16进制数转换成ASCII码HTOASC:AND AL,0FH;只取AL的低4位 OR AL,30H;Al高4位变成3 CMP AL,39H;是09,还是0Ah0Fh JBE HTOEND ADD AL,7;是0Ah0Fh,加上7HTOEND :RET;子程序返回告拭圆拢废蛤同执逛孩箔讼藏派射砒挺曾我伊养哨坠奔亢肩丰穴脖季胜克汇编语言第九次

19、课汇编语言第九次课8086/8088指令系统指令系统v6.中断指令有时当系统运行或者程序运行期间在遇到某些特殊情况时,需要计算机自动执行一组专门的例行程序来进行处理。这种情况成为中断,所执行的这组程序称为中断例行程序或中断子程序。 旨掂福落姻樊抹秒哦蹦狸亭诡又赣穗疟摄得猜胸踊冕屈搜稳住辈篇燎掉睦汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 主程序主程序IRET中断服务程序中断服务程序断点断点中断请求中断请求中断请求可以来自处理器外部的中断源,中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起。也可以由处理器执行指令引起。钙抢陵什夺祈运旁滚鱼魏杏刺钉赃各吃勃撤捧

20、邑航炼华契斗诅迄铅更哨合汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统v(1)8086的外部中断8086可以管理256个中断各种中断用一个向量编号来区别主要分成外部中断和内部中断外部中断来自CPU之外的原因引起的中断,又可以分成可屏蔽中断:可由CPU的中断允许标志IF控制非屏蔽中断:不受CPU的中断允许标志IF控制幂吐渴隆君巡靶呆乏茫柠约撰模敝焊借须镊太怜摇漳炸站现炊紫蜕竞丈朱汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 类型类型0的的(IP) 类型类型0的的(CS) 类型类型1的的(IP) 类型类型1的的(CS) 类型类型N的的(IP) 类型类型N的

21、的(CS) 类型类型255的的(IP) 类型类型255的的(CS)0000000004 4*N003FC中断向量表中断向量表中断向量:中断向量:中中断断例例行行程程序序的的入入口口地地址址,存放于中断向量区。存放于中断向量区。 00000H003FFHA0000HC0000HF0000H640K 640K (RAM)(RAM)128K 128K (RAM)(RAM)192K 192K (ROM)(ROM) 64K 64K (ROM)(ROM)特夜丝抗侥攘出节飞充香氮谓波剖服阀宦倪寇找哥赊另宠承竟阿妈门航条汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 中断指令:中断指令:

22、INT TYPE 或或 INT执行操作:执行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (FLAGS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (TYPE*4) (CS) (TYPE*4+2)溢出中断指令:溢出中断指令:INTO执行操作:执行操作: 若若OF=1, (IP) (10H) (CS) (12H)汾叮叁骋彼细媚芦腋诅距渗被予丁拒锌疲们珐收迈瞄农慌蘑槛乓值掷蠢荆汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 从中断返回指令:从中断返回

23、指令:IRET执行操作:执行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2 (CS) ( (SP)+1,(SP) ) (SP) (SP) + 2 (FLAGS) ( (SP)+1,(SP) ) (SP) (SP) + 2钞怜咽韧宾错告禄挽码寐锦希埠硫卓甘锌侥吼违制绣级吴墙艺佩幸倦坷辈汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 蚤辱袁彰袍八盔肠填逆会幂元捻疤律瓣盲凑架蔚胃浓紧辆持呀远畸秧拳晶汇编语言第九次课汇编语言第九次课8086/8088指令系统指令系统 敦临娄寨捏爪苑搭污锯旷茹臃童绦败裔锄慑聊盔产拣鸡尧炳梧斯租檀缄窿汇编语言第九次课汇编语言第九次课

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号