第2章 8086的指系统(三)yk_控制转移指.ppt

上传人:s****8 文档编号:69247044 上传时间:2023-01-01 格式:PPT 页数:60 大小:509.50KB
返回 下载 相关 举报
第2章 8086的指系统(三)yk_控制转移指.ppt_第1页
第1页 / 共60页
第2章 8086的指系统(三)yk_控制转移指.ppt_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《第2章 8086的指系统(三)yk_控制转移指.ppt》由会员分享,可在线阅读,更多相关《第2章 8086的指系统(三)yk_控制转移指.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 朱 泽 民 计算机科学与技术学院 13995939009第第 2 章章 8086的指令系统的指令系统(三)(三)2.4 控制转移类指令控制转移类指令n控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令重点掌握:JMP/Jcc/LOOP CALL/RETINT n/IRET 常用系统功能调用一般了解:LOOPZ/LOOPNZ INTO 控控制制转转移移类类指指令令通通过过改改变变IP(和和CS)值值,实现程序执行顺序的改变实现程序执行顺序的改变22.4.1 无条件转移指令无条件转移指令n只要执行无条件转移指令只要执行无条件转移指令JMP,就使程序转到,就使程序转到指定

2、的目标地址处,从目标地址处开始执行指指定的目标地址处,从目标地址处开始执行指令令n操作数操作数label是要转移到的是要转移到的目标地址(目的地址、目标地址(目的地址、转移地址转移地址)JMP labelJMP label;程序转向;程序转向labellabel标号指定的地址标号指定的地址3目标地址的范围:段内目标地址的范围:段内n段内转移近转移(near)q在当前代码段64KB范围内转移(-3276832767)q不需要更改CS段地址,只要改变IP偏移地址n段内转移短转移(short)q转移范围可以用一个字节表达,在段内128127范围的转移代代码码段段代代码码段段4目标地址的范围:段间目标

3、地址的范围:段间n段间转移远转移(far)q从当前代码段跳转到另一个代码段,可以在1MB范围q更改CS段地址和IP偏移地址q目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址代代码码段段代代码码段段 实实际际编编程程时时,MASM汇汇编编程程序序会会根根据据目目标标地地址址的的距距离,自动处理成短转移、近转移或远转移离,自动处理成短转移、近转移或远转移 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强制5nJMP指令分成指令分成4种类型:种类型:段内转移、相对寻址段内转移、相对寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段

4、间转移、直接寻址 段间转移、间接寻址段间转移、间接寻址6段内转移、相对寻址段内转移、相对寻址JMP labelJMP label;IPIP+IPIP+位移量位移量n位移量是紧接着位移量是紧接着JMP指令后的那条指令的偏移地指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移址,到目标指令的偏移地址的地址位移n当向地址增大方向转移时,位移量为正;向地址当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负减小方向转移时,位移量为负again:again:decdec cxcx;标号;标号againagain的指令的指令jmpjmp again again;转移到;转移到aga

5、inagain处继续执行处继续执行jmpjmp output output;转向;转向outputoutputoutput:output:movmov result,alresult,al;标号;标号outputoutput的指令的指令7段内转移、间接寻址段内转移、间接寻址JMP r16/m16JMP r16/m16 ;IPr16/m16IPr16/m16n将一个将一个1616位寄存器或主存字单元内容送入位寄存器或主存字单元内容送入IPIP寄存器,作为新的指令指针,但不修改寄存器,作为新的指令指针,但不修改CSCS寄存器的内容寄存器的内容jmpjmp ax ax;IPAXIPAXjmpjmp

6、word word ptrptr 2000h 2000h;IP2000hIP2000h8段间转移、直接寻址段间转移、直接寻址JMP far JMP far ptrptr label label;IPlabelIPlabel的偏移地址的偏移地址;CSlabelCSlabel的段地址的段地址n将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行jmpjmp far far ptrptr othersegotherseg;远转移到代码段2的otherseg9段间转移、间接寻址段间转移、间接寻址JMP far JMP far ptrptr memme

7、m;IPmemIPmem,CSmem+2CSmem+2n用一个双字存储单元表示要跳转的目标地址。n这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器movmov word word ptrptr bx,0 bx,0movmov word word ptrptr bx+2,1500h bx+2,1500hJMP far JMP far ptrptr bxbx ;转移到1500h:010nJmp转移指令的原理,可参见:q王爽第九章112.4.2 条件转移指令条件转移指令n指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序

8、将顺序执行下一条指令n操作数label是采用相对寻址方式的短转移标号q表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移q距当前IP地址128127个单元的范围之内JccJcc label label ;条件满足,发生转移:;条件满足,发生转移:IPIPIPIP8 8位位移量位位移量 ;条件不满足,顺序执行;条件不满足,顺序执行12Jcc指令的分类指令的分类nJcc指令不影响标志,但要利用标志。n根据利用的标志位不同,16条指令分成3种情况:1.判断单个标志位状态 2.比较无符号数高低 3.比较有符号数大小 13判断单个标志位状态判断单个标志位状态n这组指令单独判断这组指令单

9、独判断5个状态标志之一个状态标志之一JZJZ/JEJE和和J JNZ/JNE:利用零标志:利用零标志ZF,判断结果是否为零,判断结果是否为零(或相等)(或相等)JS和和JNS:利用符号标志:利用符号标志SF,判断结果是正是负,判断结果是正是负JO和和JNO:利用溢出标志:利用溢出标志OF,判断结果是否产生溢出,判断结果是否产生溢出JP/JPE和和JNP/JPO:利用奇偶标志:利用奇偶标志PF,判断结果中,判断结果中“1”的个数是偶是奇的个数是偶是奇JC/JB/JNAE和和J JNC/JNB/JAE:利用进位标志:利用进位标志CF,判,判断结果是否进位或借位断结果是否进位或借位例题例题2.38例

10、题例题2.39例题例题2.40例题例题2.41例题例题2.4217比较无符号数高低比较无符号数高低n无符号数的大小用高(Above)低(Below)表示n利用CF确定高低、利用ZF标志确定相等(Equal)n两数的高低分成4种关系:低于(不高于等于):JB(JNAE)不低于(高于等于):JNB(JAE)低于等于(不高于):JBE(JNA)不低于等于(高于):JNBE(JA)24例2.43a:比较无符号数cmpcmp ax,bxax,bx;比较;比较axax和和bxbxjnbjnb next next;若;若axbxaxbx,转移,转移xchgxchg ax,bxax,bx;若;若axaxbxb

11、x,交换,交换next:next:.结果:结果:AX保存较大的保存较大的无符号数无符号数25比较有符号数大小比较有符号数大小n有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)n两数的大小分成4种关系:小于(不大于等于):JL(JNGE)不小于(大于等于):JNL(JGE)小于等于(不大于):JLE(JNG)不小于等于(大于):JNLE(JG)26例2.43b:比较有符号数cmpcmp ax,bxax,bx;比较;比较axax和和bxbxjnljnl next next;若;若axbxaxbx,转移,转移xchgxchg ax,bxax,b

12、x;若;若axaxbxbx,交换,交换next:next:.结果:结果:AX保存较大的保存较大的有符号数有符号数272.4.3 循环指令循环指令(loop)n循环指令默认利用循环指令默认利用CX计数器计数器nlabel操作数采用操作数采用相对相对短转移短转移寻址方式寻址方式LOOP labelLOOP label;CXCXCXCX1 1,;CX0CX0,循环到标号,循环到标号labellabelLOOPZ labelLOOPZ label;CXCXCXCX1 1,;CX0CX0且且ZFZF1 1,循环到标号,循环到标号labellabelLOOPNZ labelLOOPNZ label;CXC

13、XCXCX1 1,;CX0CX0且且ZFZF0 0,循环到标号,循环到标号labellabelJCXZ labelJCXZ label;CXCX0 0,转移到标号,转移到标号labellabel28例2.44:记录空格个数movmov cx,countcx,count;设置循环次数;设置循环次数,即字符数即字符数movmov si,offsetsi,offset string stringxorxor bx,bxbx,bx;bxbx0 0,记录空格数,记录空格数jcxzjcxz done done ;如果长度为;如果长度为0 0,退出,退出movmov al,20h al,20hagain:a

14、gain:cmpcmp al,es:sial,es:si jnzjnz next next;ZFZF0 0非空格,转移非空格,转移inc inc bxbx;ZF=1ZF=1是空格,个数加是空格,个数加1 1next:next:inc inc sisiloop againloop again;字符个数减;字符个数减1 1,不为,不为0 0继续循环继续循环dec cxjnz againcmp cx,0jz done292.4.4 子程序指令子程序指令n子程序是完成特定功能的一段程序n当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行n当运行完子程序功能后,采用R

15、ET返回指令回到主程序继续执行演示演示演示演示30子程序调用指令子程序调用指令nCALL指令分成4种类型(类似JMP)CALL label;段内调用、相对寻址CALL r16/m16 ;段内调用、间接寻址CALL far ptr label;段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址nCALL指令需要保存返回地址:q段内调用段内调用入栈偏移地址IPSPSP2,SS:SPIPq段间调用段间调用入栈偏移地址IP和段地址CSSPSP2,SS:SPIPSPSP2,SS:SPCS32子程序返回指令子程序返回指令n根据段内和段间、有无参数,分成4种类型RET;无参数段内返回RE

16、T i16;有参数段内返回RET;无参数段间返回RET i16;有参数段间返回n需要弹出CALL指令压入堆栈的返回地址q段内返回段内返回出栈偏移地址IPIPSS:SP,SPSP2q段间返回段间返回出栈偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP2i16参数的作用参数的作用33例2.45:子程序;主程序主程序movmov al,0fh al,0fh;提供参数;提供参数ALALcall call htoaschtoasc;调用子程序;调用子程序.;子程序:;子程序:将将ALAL低低4 4位的一位位的一位1616进制数进制数转换转换成成ASCIIASCII码码htoas

17、chtoasc:and al,0fhand al,0fh;只取;只取alal的低的低4 4位位or al,30hor al,30h;alal高高4 4位变成位变成3 3cmpcmp al,39h al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjbejbe htoendhtoendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htoendhtoend:retret;子程序返回;子程序返回352.4.5 中断指令中断指令n中断(Interrupt)是又一种改变程序执行顺序的方法n中断具有多种中断类型n中断的指令有3条:INT i8 IRET

18、 INTOn本节主要掌握类似子程序调用指令的中断调用指令INT i8,进而学习使用DOS功能调用368086的外部中断的外部中断n8086可以管理256个中断n各种中断用一个向量编号来区别n主要分成外部中断和内部中断n外部中断来自CPU之外的原因引起的中断,又可以分成q可屏蔽中断:可由CPU的中断允许标志IF控制q非屏蔽中断:不受CPU的中断允许标志IF控制388086的内部中断的内部中断n内部中断CPU内部执行程序引起的中断,又可以分成:q除法错中断:执行除法指令,结果溢出产生的 0 号中断q指令中断:执行中断调用指令INT i8产生的 i8 号中断q断点中断:用于断点调试(INT 3)的

19、3 号中断q溢出中断:执行溢出中断指令,OF1产生的 4 号中断q单步中断:TF1在每条指令执行后产生的 1 号中断39中断指令中断指令INTINT i8INT i8;中断调用指令:产生i8号中断IRETIRET;中断返回指令:实现中断返回INTOINTO;溢出中断指令:;若溢出标志OF=1,产生4号中断;否则顺序执行402.4.6 系统功能调用系统功能调用n21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能nROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序n汇编语言程序设计需要采用

20、系统的各种功能程序n充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握41用户程序用户程序DOS系统系统功能调用功能调用BIOS中断调用中断调用硬件硬件/外部设备外部设备裸机裸机汇编语言程序42功能调用的步骤功能调用的步骤通常按照如下4个步骤进行:n 在AHAH寄存器中设置系统功能调用号n 在指定寄存器中设置入口参数n 执行指令INT 21HINT 21H(或ROM-BIOS的中断向量号)实现中断服务程序的功能调用n 根据出口参数分析功能调用执行情况43输入输出类功能调用输入输出类功能调用n向显示器输出字符 字符的输出 字符串的输出n从键盘输入数据 字符的输入 字符串的输入 按键的判

21、断44字符输出的功能调用字符输出的功能调用nDOS功能调用INT 21Hq功能号:AH02Hq入口参数:DL字符的ASCII码q功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出45例2.46:显示问号;在当前显示器光标位置显示一个问号;在当前显示器光标位置显示一个问号movmov ah,02h ah,02h;设置功能号:;设置功能号:ah02hah02hmovmov dl,?dl,?;提供入口参数:;提供入口参数:dl?dl?intint 21h 21h;DOSDOS功能调用:显示功能调用:显示 进进行行字字符符输输出出时时,当当输输

22、出出响响铃铃字字符符(07H)以以及及退退格格(08H)、回回车车(0DH)和和换换行行(0AH)字字符符时时,该该功功能能调调用用可可以以自自动动识识别别并并能进行相应处理能进行相应处理46字符输出的功能调用字符输出的功能调用n显示器功能调用INT 10Hq功能号:AH0EHq入口参数:AL字符的ASCII码 BL字符的颜色值(图形方式)BH页号(字符方式)通常使BX0q功能:将字符按原属性在光标处显示,光标自动移到下一个字符位置47字符串输出的功能调用字符串输出的功能调用nDOS功能调用INT 21Hq功能号:AH09Hq入口参数:DS:DX欲显示字符串在主存中的首地址 字符串应以$(24

23、H)结束q功能:在显示器输出指定的字符串n可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用48例2.47:显示字符串string db string db Hello,EverybodyHello,Everybody!,0dh,0ah,$!,0dh,0ah,$;在数据段定义要显示的字符串;在数据段定义要显示的字符串.movmov ah,09h ah,09h;设置功能号:;设置功能号:ah09hah09hmovmov dx,offsetdx,offset string string;提供入口参数:;提供入口参数:dxdx字符串的偏移地址字符串的偏移地址intint 21h 21h;

24、DOSDOS功能调用:显示功能调用:显示49字符输入的功能调用字符输入的功能调用nDOS功能调用INT 21Hq功能号:AH01Hq出口参数:AL字符的ASCII码q功能:获得按键的ASCII代码值n调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值50例2.48:判断按键getkeygetkey:movmov ah,01h ah,01h;功能号:;功能号:ah01hah01hintint 21h 21h;功能调用;功能调用cmpcmp al,Yal,Y;处理出口参数;处理出口参数alaljeje yeskeyyeskey;是;是“Y”Y”cmpcmp al,Nal,Njeje n

25、okeynokey;是;是“N”N”jnejne getkeygetkey.yeskeyyeskey:.nokeynokey:.51字符输入的功能调用字符输入的功能调用n键盘功能调用INT 16Hq功能号:AH0q出口参数:AX键值代码对于标准ASCII码按键:ALASCII码,AH扫描码;对于扩展按键:AL00H,AH键扩展码;对于alt小键盘数字按键:ALASCII码,AH00Hn此功能类同DOS功能01H,会一直等待按键52例2.49:字符输入输出movmov ah,0 ah,0;键盘功能调用(;键盘功能调用(intint 16h 16h)intint 16h 16h;alal按键的按键

26、的ASCIIASCII码码movmov bx,0 bx,0;显示功能调用(;显示功能调用(intint 10h 10h)movmov ah,0eh ah,0ehintint 10h 10h;显示;显示53字符串输入的功能调用字符串输入的功能调用nDOS功能调用INT 21Hq功能号:AH0AHq入口参数:DS:DX缓冲区首地址n执行该功能调用时,用户按键,最后用回车确认n本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按CtrlBreak或CtrlC则中止关键要定义好缓冲区关键要定义好缓冲区54例2.50:输入字符串bufferbufferdb 81db 81;定义缓冲区;定义缓冲区

27、;第;第1 1个字节填入可能输入的最大字符数个字节填入可能输入的最大字符数db 0db 0;存放实际输入的字符数;存放实际输入的字符数db 81 dup(0)db 81 dup(0);存放输入的字符串;存放输入的字符串.movmov dx,segdx,seg buffer buffer;伪指令;伪指令segseg取得取得bufferbuffer的段地址的段地址movmov ds,dxds,dx;设置数据段;设置数据段DSDSmovmov dx,offsetdx,offset buffer buffermovmov ah,0ah ah,0ahintint 21h 21h56按键判断的功能调用按键

28、判断的功能调用nDOS功能调用INT 21Hq功能号:AH0BHq出口参数:AL0,当前没有按键;ALFFH,当前已经按键。q功能:仅判断当前是否有按下的键,设置AL后退出57例2.51:按任意键继续.;提示;提示“按任意键继续按任意键继续”getkeygetkey:movmov ah,0bh ah,0bhintint 21h 21hor or al,alal,al;alal0 0?jzjz getkeygetkey;alal0 0,没有按键,继续等待,没有按键,继续等待;等同于如下功能调用;等同于如下功能调用mov ah,01hint 21h58按键判断的功能调用按键判断的功能调用n键盘功能调用INT 16Hq功能号:AH1q出口参数:若标志ZF1,无键按下;若ZF0,有键按下,且AX键值代码q功能:此子功能仅判断是否按键,设置零位标志ZF后退出n这两个功能调用都不循环等待按键,即使有键按下,键盘缓冲区仍然保留键值并且没有被清空,必要时必须用字符输入功能取走键值清空缓冲区59教学提示教学提示n在学习和应用汇编语言进行程序设计时,有一些经常遇到的问题,例如算术运算、代码转换等,需要掌握60

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁