![控制转移指令课件_第1页](http://file4.renrendoc.com/view/4694bf6bf69d8d47391d1f9ba74bf47d/4694bf6bf69d8d47391d1f9ba74bf47d1.gif)
![控制转移指令课件_第2页](http://file4.renrendoc.com/view/4694bf6bf69d8d47391d1f9ba74bf47d/4694bf6bf69d8d47391d1f9ba74bf47d2.gif)
![控制转移指令课件_第3页](http://file4.renrendoc.com/view/4694bf6bf69d8d47391d1f9ba74bf47d/4694bf6bf69d8d47391d1f9ba74bf47d3.gif)
![控制转移指令课件_第4页](http://file4.renrendoc.com/view/4694bf6bf69d8d47391d1f9ba74bf47d/4694bf6bf69d8d47391d1f9ba74bf47d4.gif)
![控制转移指令课件_第5页](http://file4.renrendoc.com/view/4694bf6bf69d8d47391d1f9ba74bf47d/4694bf6bf69d8d47391d1f9ba74bf47d5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、五、控制转移类指令控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令,有 条,包括:无条件转移指令条件转移指令循环指令子程序调用、返回指令中断调用指令 控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变1、无条件转移指令只要执行无条件转移指令JMP,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令操作数label是要转移到的目标地址(目的地址、转移地址)JMP指令分成4种类型: 段内转移、直接寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址JMP label;程序转向label标号指定的地址JMP第 2 章目标地址的寻址方式直
2、接寻址方式转移地址象立即数一样,直接在指令的机器代码中,就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中,就是通过寄存器或存储器的间接寻址方式第 2 章用标号表达JMP目标地址的范围:段内段内转移近转移(near)在当前代码段64KB范围内转移( 32KB范围)不需要更改CS段地址,只要改变IP偏移地址段内转移短转移(short)转移范围可以用一个字节表达,在段内128127范围的转移代码段代码段第 2 章JMP目标地址的范围:段间段间转移远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它
3、就是逻辑地址第 2 章代码段代码段 实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制JMPJMP段内转移、直接寻址JMP label;IPIP+位移量位移量是紧接着JMP指令后的那条指令的偏移地址到目标指令偏移地址的地址位移当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负jmp again;转移到again处继续执行again:dec cx;标号again的指令jmp output;转向outputoutput:mov result,al;标号output的指令第 2 章段内转
4、移、间接寻址JMP r16/m16 ;IPr16/m16将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容jmp ax;IPAXjmp word ptr 2000h;IP2000h第 2 章JMP段间转移、直接寻址JMP far ptr label;IPlabel的偏移地址;CSlabel的段地址将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行jmp far ptr otherseg;远转移到代码段2的otherseg第 2 章JMP标号段间转移、间接寻址JMP far ptr mem;IPmem
5、,CSmem+2用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器mov word ptr bx,0mov word ptr bx+2,1500hJMP far ptr bx ;转移到1500h:0第 2 章JMP2、条件转移指令指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令操作数label是采用短转移,称为相对寻址方式JccJcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行第 2 章条件转移的寻址方式Jcc指令的操作数
6、label是一个标号一个8位位移量,表示Jcc指令后的那条指令的偏移地址到目标指令偏移地址的地址位移8位位移量是相对于当前IP的,且距当前IP地址128127个单元的范围之内,属于段内短距离转移Jcc目标地址就采用这种相对寻址方式Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2JccJcc指令的分类Jcc指令不影响标志,但要利用标志。根据利用的标志位不同,17条指令分成4种情况: 判断单个标志位状态 比较无符号数高低 比较有符号数大小 判断计数器CX为0Jcc特点:都是对flag寄存器的位进行判断条件转移指令中的条件ccJcc 实际虽然指令只有16条,但却有30个助记符
7、 采用多个助记符,只是为了方便记忆和使用 判断单个标志位状态这组指令单独判断5个状态标志之一JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等)JS和JNS:利用符号标志SF,判断结果是正是负JO和JNO:利用溢出标志OF,判断结果是否产生溢出JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位Jcc例题1例题2例题3例题4例题5例5.1:JZ/JNZ指令mov bl,x cmp bl,y ;重复比较两个字符jnz unmat ;ZF0(不等),转移mov al,1
8、 ;顺序执行(相等)jmp outputunmat:mov al,0ffhoutput: mov bl,x cmp bl,y ;重复比较两个字符jz mat;ZF1(相等),转移mov al,0ffh;顺序执行(不等)jmp outputmat:mov al,1output:比较X、Y是否相等,相等则AL=1,否则为-1例5.2:JS/JNS指令;计算|XY|(绝对值);X和Y为存放于X单元和Y单元的16位操作数;结果存入resultmov ax,Xsub ax,Yjns nonnegneg ax;neg是求补指令nonneg:mov result,ax例5.3:JO/JNO指令;计算XY;X
9、和Y为存放于X单元和Y单元的16位操作数;若溢出,则转移到overflow处理mov ax,Xsub ax,Yjo overflow.;无溢出,结果正确overflow:.;有溢出处理例5.4:JP/JNP指令;设字符的ASCII码在AL寄存器中;将字符加上奇校验位;在字符ASCII码中为“1”的个数已为奇数时;则令其最高位为“0”;否则令最高位为“1”and al,7fh;最高位置“0”,同时判断“1”的个数jnp next;个数已为奇数,则转向nextor al,80h;否则,最高位置“1”next:.例5.5a:JC/JNC指令;记录BX中1的个数xor al,al;AL0,CF0aga
10、in: cmp bx,0je nextshl bx,1jnc againinc aljmp againnext:.;AL保存1的个数例5.5b:记录BX中“1”的个数xor al,al;AL0,CF0again:cmp bx,0jz nextshl bx,1;也可使用 shr bx,1adc al,0jmp againnext:.;AL保存1的个数判断单个标志位状态小结 OF SF PF ZF CF指令: JO/JNO JS/JNS JP/JNP JZ/JNZ JC/JNC条件: OF=1/0 SF= 1/0 PF =1/0 ZF= 1/0 CF= 1/0 比较无符号数高低无符号数的大小用高(
11、Above)低(Below)表示利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系: 低于(不高于等于):JB(JNAE) 不低于(高于等于):JNB(JAE) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA )Jcc一般与哪些指令配合使用?例5.6a:比较无符号数cmp ax,bx;比较ax和bxjnb next;若axbx,转移xchg ax,bx;若axbx,交换next:.比较有符号数大小有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)两数的大小分成4种关系: 小于(不大于等于):
12、JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG )Jcc例5.6b:比较有符号数cmp ax,bx;比较ax和bxjnl next;若axbx,转移xchg ax,bx;若axbx,交换next:.3、循环指令(loop) 指 令 测试条件1) LOOP OPR (CX) 02) LOOPZ/LOOPE OPR (CX) 0 and ZF=13) LOOPNZ/LOOPNE OPR(CX) 0 and ZF=0DEC CX LOOP/LOOPZ(LOOPE) J_ OPR LOOPNZ(LOOPNE)执行步骤:
13、(1) (CX) (CX)-1 (2)如满足测试条件,则跳转到指定地址 循环体(i) 循环次数YN(i)=0?(i) (i)-1例5.7:记录空格个数mov cx,count;设置循环次数mov si,offset stringxor bx,bx;bx清0,用于记录空格数mov al,20hagain:cmp al, sijnz next;ZF=0,非空格,转移inc bx;ZF=1,是空格,个数加1next:inc siloop again;字符个数减1,不为0继续循环dec cxjnz again计数器CX为0转移(循环指令)这是一条较特殊的指令CX寄存器通常在程序中用做计数器JCXZ指令
14、用来判断计数是否为0JCXZ label ;CX0,发生转移:IPIP8位位移量 ;CX0,顺序执行判断计数器为0mov cx,100again:movsb;传送一个字节dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0(ZF=0),则转移;否则,结束第 2 章mov cx,100again:jcxz next;判断传送次数cx是否为0movsbdec cxjmp againnext:.cmp cx,0jz next4、子程序指令子程序是完成特定功能的一段程序当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行当运行完子程序功能后,
15、采用RET返回指令回到主程序继续执行演示主程序与子程序CALL label主程序RET子程序子程序调用指令CALL指令分成4种类型(类似JMP)CALL label;段内调用、直接寻址CALL r16/m16;段内调用、间接寻址CALL far ptr label;段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址CALL指令需要保存返回地址:段内调用入栈偏移地址IPSPSP2,SS:SPIP段间调用入栈偏移地址IP和段地址CSSPSP2,SS:SPIPSPSP2,SS:SPCS第 2 章CALL子程序返回指令根据段内和段间、有无参数,分成4种类型RET;无参数段内返回RE
16、T i16;有参数段内返回RET;无参数段间返回RET i16;有参数段间返回需要弹出CALL指令压入堆栈的返回地址段内返回出栈偏移地址IPIPSS:SP, SPSP2段间返回出栈偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP2RET第 2 章返回指令RET的参数RET i16;有参数返回RET指令可以带有一个立即数i16,该数必须为偶数。堆栈指针SP将增加,即:SPSP+i16这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数例5.8:子程序;主程序mov al,0fh;提供参数ALcall htoasc;调用子程序.;子程序:将AL低4位的一位16
17、进制数转换成ASCII码htoasc:and al,0fh;只取al的低4位or al,30h;al高4位变成3cmp al,39h;是09,还是0Ah0Fhjbe htoendadd al,7;是0Ah0Fh,加上7htoend:ret;子程序返回转换原理5、中断指令中断(Interrupt )是又一种改变程序执行顺序的方法中断具有多种中断类型中断的指令有3条:INT i8 IRET INTO本节主要掌握类似子程序调用指令的中断调用指令INT i8,进而学习使用DOS功能调用中断的过程主程序IRET中断服务程序中断请求中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:例如执行I
18、NT i8指令。8086的外部中断8086可以管理256个中断各种中断用一个向量编号来区别主要分成外部中断和内部中断外部中断来自CPU之外的原因引起的中断,又可以分成可屏蔽中断:可由CPU的中断允许标志IF控制非屏蔽中断:不受CPU的中断允许标志IF控制8086的内部中断内部中断CPU内部执行程序引起的中断,又可以分成:除法错中断:执行除法指令,结果溢出产生的 0 号中断指令中断:执行中断调用指令INT i8产生的 i8 号中断断点中断:用于断点调试(INT 3)的 3 号中断溢出中断:执行溢出中断指令,OF1产生的 4 号中断单步中断:TF1在每条指令执行后产生的 1 号中断中断向量共256
19、种类型,每种占有4个字节单元中断例行子程序的入口地址 图 中断向量表00000H00004H00008H0000CH003FCH003FFH类型0中断处理程序入口地址类型1中断处理程序入口地址类型2中断处理程序入口地址类型0FF中断处理程序入口地址类型0的(IP) 和 (CS)类型0FF的(IP) 和 (CS)格式: INT TYPE 或 INT 操作:TYPE:类型号,16进制表示隐含TYPE=3INTO 指令IRET 从中断中返回指令若溢出则中断 OF=1中断子程序必须以IRET结束Push (FLAGS):将反映现场状态的FLAGS保存入栈IF 0TF 0Push (CS)Push (I
20、P) :IF=TF=0,其余不变 (IP)(TYPE*4) (CS) ( TYPE*4 +2)INT 指令系统功能调用和BIOSIBM PC 微机为汇编用户提供了两个程序接口一个是DOS系统功能调用另一个是ROM中的BIOS121H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序 常用的DOS系统功能调用INT 21H总入口系统功能号AH设置调用参数INT 21HP55表2-41.1 字符输出的功能调用DOS功能调用INT 21H功能号:A
21、H02H入口参数:DL字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出该功能会破坏AX的内容例:显示问号;在当前显示器光标位置显示一个问号mov ah,02h;设置功能号:ah02hmov dl,?;提供入口参数:dl?int 21h;DOS功能调用:显示 进行字符输出时,当输出响铃字符(07H)以及退格(08H)、回车(0DH)和换行(0AH)字符时,该功能调用可以自动识别并能进行相应处理1.2 字符串输出的功能调用DOS功能调用INT 21H功能号:AH09H入口参数:DS:DX欲显示字符串在主存中的首地址字符串
22、应以$(24H)结束功能:在显示器输出指定的字符串可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用会破坏DX的内容例:显示字符串string db Hello,Everybody !,0dh,0ah,$;在数据段定义要显示的字符串.mov ah,09h;设置功能号:ah09hmov dx,offset string;提供入口参数:dx字符串的偏移地址int 21h;DOS功能调用:显示1.3 字符输入的功能调用DOS功能调用INT 21H功能号:AH01H出口参数:AL字符的ASCII码功能:获得按键的ASCII代码值调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值
23、例:判断按键是Y/Ngetkey:mov ah,01h;功能号:ah01hint 21h;功能调用cmp al,Y;处理出口参数alje yeskey;是“Y”cmp al,Nje nokey;是“N”jne getkey.yeskey:.nokey:.1.4 字符串输入的功能调用DOS功能调用INT 21H功能号:AH0AH入口参数:DS:DX缓冲区首地址执行该功能调用时,用户按键,最后用回车确认本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按CtrlBreak或CtrlC则中止缓冲区的定义第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1255,程序员输入)第2字节将
24、存放实际输入的字符个数(不包括回车符,系统确定)第3字节开始将存放输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃扩展ASCII码(如功能键等)占两个字节,第1个为0缓冲区:最大字符数(用户给出)串开始实际键入的字符数Return (回车)例: maxlen db 32, ?, 32 dup(?) lea dx,maxlen mov ah,0ah int 21h 如果键入: By brooks too broad for leaping 则:B0dybring1FH20H1.5 按键判断的功能调用DOS功能调用INT 21H功能号:AH0BH出口参数:AL0,当前没有按键;AL
25、FFH,当前已经按键。功能:仅判断当前是否有按下的键,设置AL后退出例:按任意键继续.;提示“按任意键继续”getkey:mov ah,0bhint 21hor al,al;al0?jz getkey;al0,没有按键,继续等待;等同于如下功能调用mov ah,01hint 21hINT 21H键盘/显示操作AH 功能 调用参数 返回参数 从键盘输入一个字符 无 AL=字符 并回显在屏幕上A 输入字符到缓冲区 DS:DX=缓冲区首址 缓冲区 显示一个字符 DL=字符 光标随字符移动 (检验ctrl-break) 9 显示字符串 DS:DX=串首地址 串必须以$结束 光标随字符移动从键盘输入一串
26、数字,并在屏幕显示,如果输入的不是数字,则显示“erro”,并等待继续输入,回车结束输入。控制转移类指令小结重点掌握:JMP/Jcc/LOOP CALL/RETINT n/IRET 常用系统功能调用一般了解: LOOPZ/LOOPNZ INTO六、处理机控制类指令这些指令在特定的情况下,必须使用对标志位进行设置的指令CLC STC CMCCLD STDCLI STI对CPU状态进行控制的指令NOP CS: SS: DS: ES:LOCK HLT ESC WAIT区别于条件转移指令,联系flag传送指令进位标志操作指令用于任意设置进位标志CLC;复位进位标志:CF0STC;置位进位标志:CF1C
27、MC;求反进位标志:CFCF方向标志操作指令串操作指令中,需要使用CLD;复位方向标志:DF0STD;置位方向标志:DF1中断标志操作指令在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止CLI;复位中断标志:IF0STI;置位中断标志:IF1空操作指令NOP不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期NOP常用于程序调试在需要预留指令空间时用NOP填充代码空间多余时也可以用NOP填充还可以用NOP实现软件延时事实上,NOP和XCHG AX,AX的指令代码一样,都是 90HNOP段超越前缀指令在允许段超越的存储器操作数之前,使用段超越前缀指令,将采用指定的段寄存器寻址操作数
28、CS:;使用代码段的数据 SS:;使用堆栈段的数据 DS:;使用数据段的数据 ES:;使用附加段的数据封锁前缀指令LOCK;封锁总线这是一个指令前缀,可放在任何指令前这个前缀使得在这个指令执行时间内,8086 处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指令执行完后,总线封锁解除暂停指令HLT;进入暂停状态暂停指令使CPU进入暂停状态,这时CPU不进行任何操作。当CPU发生复位或来自外部的中断时,CPU脱离暂停状态HLT指令可用于程序中等待中断。当程序中必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行HLT的下一条指令交权指令ESC 6位立即数,reg/mem;把浮点指令交给浮点处理器执行浮点协处理器8087指令是与8086的整数指令组合在一起的,当8086发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行实际编写程序时,一般采用易于理解的浮点指令助记符格式ESC 6,SI;实数除
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务合同范例粉水
- 2025年公共艺术设计市场调研报告
- 公路护栏工程合同范例
- 学校保安聘任合同范本
- 出售鱼苗批发合同范本
- 公司卖旧车合同范例
- 2025年度燃气设施建设与运营管理合同范本
- 2025年度建筑施工单位临时用工劳务派遣与职业健康合同
- 餐饮服务合同范本
- 船舶设备零部件行业深度研究报告
- 低空飞行旅游观光项目可行性实施报告
- 2024年版:煤矿用压力罐设计与安装合同
- 2024年贵州云岩区总工会招聘工会社会工作者笔试真题
- 《算法定价垄断属性问题研究的国内外文献综述》4200字
- 2024年04月浙江义乌农商银行春季招考笔试历年参考题库附带答案详解
- 涉密计算机保密培训
- 挂靠免责协议书范本
- 2024年浙江省五校联盟高考地理联考试卷(3月份)
- 在线心理健康咨询行业现状分析及未来三至五年行业发展报告
- 电动三轮车购销合同
- 淋巴瘤的免疫靶向治疗
评论
0/150
提交评论