控制转移类指令教学教材

上传人:yuzo****123 文档编号:139257436 上传时间:2020-07-20 格式:PPT 页数:43 大小:359.50KB
返回 下载 相关 举报
控制转移类指令教学教材_第1页
第1页 / 共43页
控制转移类指令教学教材_第2页
第2页 / 共43页
控制转移类指令教学教材_第3页
第3页 / 共43页
控制转移类指令教学教材_第4页
第4页 / 共43页
控制转移类指令教学教材_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《控制转移类指令教学教材》由会员分享,可在线阅读,更多相关《控制转移类指令教学教材(43页珍藏版)》请在金锄头文库上搜索。

1、3.2.4 控制转移类指令,控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令 重点掌握:JMP/Jcc/LOOP,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,1. 无条件转移指令,只要执行JMP,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令 操作数label是要转移到的目标地址(目的地址、转移地址) JMP指令分成4种类型: 段内转移、直接寻址; 段内转移、间接寻址 段间转移、直接寻址; 段间转移、间接寻址,JMP label;程序转向label标号指定的地址,jmp again;转向again处继续执行 again:dec c

2、x;标号again的指令 jmp output;转向output output:mov result,al;标号output的指令 JMP 0120H;直接转向CS:0120H单元,无条件转移指令,2. 条件转移指令,格式: Jcc label label: ;条件满足,跳转标号label指定的目标地址去执行指令 ;条件不满足,顺序执行下一条指令 ;操作数label是采用短转移,称为相对寻址方式,Jcc指令的分类,Jcc指令不影响标志,但要利用标志位。根据利用的标志位不同,16条指令分成3种情况: (1)判断单个标志位状态 (2)比较无符号数高低 (3)比较有符号数大小,(1)判断单个标志位状

3、态,这组指令单独判断5个状态标志之一 JZ和JNZ:判断结果是否为零(或相等) JS和JNS:判断结果是正是负 JO和JNO:判断结果是否产生溢出 JP和JNP:判断结果中“1”的个数是偶是奇 JC和JNC:判断结果是否进位或借位,例:JZ/JNZ指令,test al,80h;测试AL的最高位 jz next1;D70(ZF1),转移 mov ah,0ffh;D71,顺序执行 jmp done;无条件转向 next1:mov ah,0 done:.,test al,80h ;测试最高位 jnz next2 ;D71(ZF0),转移 mov ah,0 ;D70,顺序执行 jmp done ;无条

4、件转向 next2:mov ah,0ffh done:.,例:JC/JNC,CMP AX, BX JC NEXT MOV AX , BX NEXT:MOV MIN ,AX,例:JS/JNS指令,;计算|XY|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result单元 mov ax , X sub ax , Y jns next neg ax ;neg是求补指令:0ax next:mov result , ax,例:JO/JNO指令,;计算XY; ;X和Y为存放于X单元和Y单元的字操作数 ;若溢出,则转移到overflow处理 mov ax , X sub ax , Y

5、 jo overflow .;无溢出,结果正确 overflow: .;有溢出,出错处理,例:JP/JNP指令,;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 and al,7fh ;最高位先置“0”,并判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h;否则,最高位置“1” next:.,(2)比较无符号数高低,无符号数的大小用 高(Above)、低(Below)表示,利用CF确定高低 利用ZF标志确定相等(Equal ) 两数的高低分成: 低于(不高于等于):JB(JNAE/JC) 不低于(高于等于):JNB(JAE/JNC) 低于等于(不高

6、于):JBE(JNA) 不低于等于(高于):JNBE(JA ) 相等(等于零):JE/JZ 不相等(不等于零):JNE/JNZ,(3)比较有符号数大小,有符号数的大小用 大(Greater)小(Less)表示 利用ZF标志确定相等(Equal) 两数的大小分成4种关系: 小于(不大于等于):JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ),Jcc M,N,M N无符号数(A,B) 有符号数(G,L) =)JB(JNAE)JL(JNGE) ) JBE(JNA)JLE(JNG) (= ()JNB(JAE) JNG(

7、JLE) = JE/JZ JNE/JNZ,例:比较无符号数,cmp ax , bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax , bx ;若axbx,交换 next:.,结果:AX保存较大的无符号数,CMP AL,BL ;AL和BL比较 JNG BBB ;若ALBL,则转 XCHG AL,BL ;若ALBL,则交换 BBB: CMP AL,CL ;AL和CL比较 JNG CCC ;若ALCL,则转 XCHG AL,CL ;若ALCL,则交换 CCC: HLT,例:比较有符号数,举例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。,例:若X50,转到TO

8、O_HIGH,否则 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|RESULT,MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: OVERFLOW: ,【例】复制数据块,AREA1,AREA2,目的数据块,数据段,.,.,AREA1+1,AREA2+1,.,.,AREA1+99,AREA2+99,.,SI=2000H INCSI SI=2001H,(AREA1)=34H INCAREA1 INC2000H (AREA1)=

9、35H,AREA1,AREA2,.,.,AREA1+1,AREA2+1,.,.,AREA1+99,AREA2+99,.,SI,DI,SI=2000H SI AREA10 INCSI SI=2001H SI AREA11,【例】等价程序,LEA SI , AREA1 LEA DI , AREA2 MOV CX , 100 AGAIN:MOV AL , SI MOV DI , AL INCSI INCDI DEC CX JNE AGAIN,赋初值,循环体,【例】另一种做法,MOVSI , 0 MOVDI , 0 MOVCX , 100 AGAIN:MOVAL , AREA1SI MOVAREA2D

10、I , AL INCSI INCDI DECCX JNZAGAIN,赋初值,循环,3. 循环指令(loop),循环指令默认利用CX计数器,方便实现计数循环的程序结构 label操作数采用相对寻址方式,LOOP label;CXCX1, ;CX0,循环到标号label,LOOPZ label;CXCX1, ;CX0且ZF1,循环到标号label,LOOPZ label;CXCX1, ;CX0且ZF0,循环到标号label,JCXZ label;CX0,转移到标号label,3. 循环指令 LOOP,格式:LOOP label 操作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则

11、退出循环,执行LOOP后面的指令。,LOOP指令与下面的指令段等价: DEC CX JNZ label,例:记录字符串中空格的个数,;String是附加段中的一个字符串 mov cx,count;设置循环次数 lea si , string xor bx,bx;bx0,记录空格数 mov al,20h;空格的ASCII码为20H again:cmp al,es:si jnz next;ZF0非空格,转移 inc bx;ZF=1是空格,个数加1 next:inc si loop again ;字符个数减1,不为0继续循环,应用举例:将数据段1000H开始的100个存储单元全部填充为ASCII码2

12、AH(*)。 MOV DI,1000H MOV CX,64H;循环计数器 MOV AL, 2AH AGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT,上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下: CS : IP 指令 109E : 0100 MOV DI,1000H 109E : 0103 MOV CX,64H 109E : 0106 MOV AL,2AH 109E : 0108 MOV DI,AL 109E : 010A INC DI 109E : 010B DEC CX 109E : 010C JNZ 0108 109E :

13、010E HLT 109E : 0110,写入2AH(*)后,数据段中相应存储单元的内容改变如下: DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1040 2A 2A 2A 2A 2A 2A

14、2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A,4. 子程序指令,子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行,主程序与子程序,CALL label,主程序,RET,子程序,回到CALL指令后的指令处返回地址,子程序返回指令 RET,段间返回指令RET的操作为: IP(SP)+1,(SP) SP(SP

15、)+2 ;栈顶内容弹出到IP CS(SP)+1,(SP) SP(SP)+2 ;栈顶内容弹出到CS,段内返回指令RET的操作为: IP(SP)+1,(SP) SP(SP)+2 ;栈顶内容弹出到IP,例:子程序,;主程序 mov al,0fh;提供参数AL call htoasc;调用子程序 . ;子程序:将AL低位的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,加上7 htoend:ret;子程序返回,3.2.5 系统

16、功能调用,21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能 ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序 汇编程序设计需要采用系统的各种功能程序 充分利用操作系统提供的资源是程序设计的一个重要方面,功能调用的步骤,通常按照如下4个步骤进行: 在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT 21H(或ROM-BIOS的中断向量号)实现中断服务程序的功能调用 根据出口参数分析功能调用执行情况,1. 字符输出的功能调用,DOS功能调用 INT 21H 功能号:AH02H 入口参数:DL字符的ASCII码 功能:在显示器当前光标位置显示给定的

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

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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