版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.2.4 3.2.4 控制转移类指令控制转移类指令l控制转移类指令用于实现分支、循环、过控制转移类指令用于实现分支、循环、过程等程序构造,是仅次于传送指令的最常程等程序构造,是仅次于传送指令的最常用指令用指令l重点掌握:重点掌握:JMP/Jcc/LOOPJMP/Jcc/LOOPl 控制转移类指令经过改动控制转移类指令经过改动IP和和CS值,值,实现程序执行顺序的改动实现程序执行顺序的改动1. 无条件转移指令无条件转移指令l只需执行只需执行JMP,就使程序转到指定的目的地址处,就使程序转到指定的目的地址处,从目的地址处开场执行那里的指令从目的地址处开场执行那里的指令l操作数操作数label是要
2、转移到的目的地址目的地址、转是要转移到的目的地址目的地址、转移地址移地址lJMP指令分成指令分成4种类型:种类型:l 段内转移、直接寻址;段内转移、直接寻址; 段内转移、间接段内转移、间接寻址寻址l 段间转移、直接寻址;段间转移、直接寻址; 段间转移、间接段间转移、间接寻址寻址JMP label;程序转向;程序转向label标号指定的地址标号指定的地址jmp againjmp again;转向;转向againagain处继续执行处继续执行again:again:dec cxdec cx;标号;标号againagain的指令的指令jmp outputjmp output;转向;转向outputo
3、utputoutput:output: mov result,almov result,al ;标号;标号outputoutput的指令的指令JMP 0120HJMP 0120H;直接转向;直接转向CS:0120HCS:0120H单元单元无条件转移指令无条件转移指令2. 条件转移指令条件转移指令格式:格式: Jcc labelJcc label label: label: ;条件满足,跳转标号;条件满足,跳转标号labellabel指定的目指定的目的地址去执行指令的地址去执行指令 ;条件不满足,顺序执行下一条指令;条件不满足,顺序执行下一条指令 ;操作数;操作数labellabel是采用短转移
4、,称为是采用短转移,称为相对寻址方式相对寻址方式相对寻址方式相对寻址方式lJcc指令的操作数指令的操作数label是一个标号是一个标号l一个一个8位位移量,表示位位移量,表示Jcc指令后的那条指令指令后的那条指令的偏移地址,到目的指令的偏移地址的地址位的偏移地址,到目的指令的偏移地址的地址位移移l8位位移量是相对于当前位位移量是相对于当前IP的,且距当前的,且距当前IP地址地址128127个单元的范围之内,属于个单元的范围之内,属于段内短间隔转移段内短间隔转移lJcc指令为指令为2个字节,条件不满足时的顺序执个字节,条件不满足时的顺序执行就是当前指令偏移指针行就是当前指令偏移指针IP加加2Jc
5、c指令的分类指令的分类lJcc指令不影响标志,但要利用标志指令不影响标志,但要利用标志位。根据利用的标志位不同,位。根据利用的标志位不同,16条指条指令分成令分成3种情况:种情况:l1判别单个标志位形状判别单个标志位形状l2比较无符号数高低比较无符号数高低l3比较有符号数大小比较有符号数大小1判别单个标志位形状判别单个标志位形状l这组指令单独判别这组指令单独判别5个形状标志之一个形状标志之一lJZ和和JNZ:判别结果能否为零或相等:判别结果能否为零或相等lJS和和JNS:判别结果是正是负:判别结果是正是负lJO和和JNO:判别结果能否产生溢出:判别结果能否产生溢出lJP和和JNP:判别结果中:
6、判别结果中“1的个数是偶是奇的个数是偶是奇lJC和和JNC:判别结果能否进位或借位:判别结果能否进位或借位例:JZ/JNZ指令test al,80h;测试;测试AL的最高位的最高位jz next1;D70ZF1,转移,转移mov ah,0ffh ;D71,顺序执行,顺序执行jmp done;无条件转向;无条件转向next1:mov ah,0done:.test al,80h ;测试最高位;测试最高位jnz next2 ;D71ZF0,转移,转移mov ah,0 ;D70,顺序执行,顺序执行jmp done ;无条件转向;无条件转向next2:mov ah,0ffhdone:.例:例:JC/JN
7、C CMP AX, BX JC NEXT MOV AX , BXNEXT:MOV MIN ,AX例:JS/JNS指令;计算;计算|XY|绝对值绝对值;X和和Y为存放于为存放于X单元和单元和Y单元的单元的16位操作数位操作数;结果存入;结果存入result单元单元mov ax , Xsub ax , Yjns nextneg ax ;neg是求补指令:是求补指令:0axnext:mov result , ax例:例:JO/JNO指令指令;计算;计算XY;X和和Y为存放于为存放于X单元和单元和Y单元的字操作数单元的字操作数;假设溢出,那么转移到;假设溢出,那么转移到overflow处置处置 mov
8、 ax , X sub ax , Y jo overflow .;无溢出,结果正确;无溢出,结果正确overflow: .;有溢出,出错处置;有溢出,出错处置例:JP/JNP指令;设字符的;设字符的ASCII码在码在AL存放器中存放器中;将字符加上奇校验位;将字符加上奇校验位and al,7fh;最高位先置;最高位先置“0,并判别,并判别“1的个数的个数jnp next;个数已为奇数,那么转向;个数已为奇数,那么转向nextor al,80h;否那么,最高位置;否那么,最高位置“1next:.2比较无符号数高低比较无符号数高低l无符号数的大小用无符号数的大小用 高高Above、低、低Below
9、表示,利用表示,利用CF确定高低确定高低l利用利用ZF标志确定相等标志确定相等Equal l两数的高低分成:两数的高低分成:l低于不高于等于:低于不高于等于:JBJNAE/JCl不低于高于等于:不低于高于等于:JNBJAE/JNCl低于等于不高于:低于等于不高于:JBEJNAl不低于等于高于:不低于等于高于:JNBEJA l相等等于零:相等等于零:JE/JZl不相等不等于零:不相等不等于零:JNE/JNZ3比较有符号数大小比较有符号数大小l有符号数的大小用有符号数的大小用l大大Greater小小Less表示表示l利用利用ZF标志确定相等标志确定相等Equall两数的大小分成两数的大小分成4种关
10、系:种关系:l 小于不大于等于:小于不大于等于:JLJNGEl 不小于大于等于:不小于大于等于:JNLJGEl 小于等于不大于:小于等于不大于:JLEJNGl 不小于等于大于:不小于等于大于:JNLEJG Jcc M,NM N无符号数无符号数(A,B) 有符号数有符号数(G,L)=)JBJNAEJLJNGE) JBE(JNA)JLE(JNG) (= (50,转到,转到TOO_HIGH,否那么,否那么 计算计算X-Y: 溢出转到溢出转到OVERFLOW, 否那么否那么 |X-Y|RESULT MOV AX, XCMP AX, 50JG TOO_HIGHSUB AX, YJO OVERFLOWJN
11、S NONNEGNEG AX NONNEG: MOV RESULT, AX TOO_HIGH: OVERFLOW: 【例】复制数据块【例】复制数据块AREA1AREA2目目的的数数据据块块数数据据段段 .AREA1+1AREA2+1 . .AREA1+99AREA2+99 .SI=2000HINCSISI=2001H(AREA1)=34HINCAREA1INC2000H(AREA1)=35H1000H:2000H34HAREA1AREA2 .AREA1+1AREA2+1 . .AREA1+99AREA2+99 .SIDISI=2000HSI AREA10INCSISI=2001HSI AREA
12、11【例】等价程序【例】等价程序LEA SI , AREA1LEA DI , AREA2MOV CX , 100AGAIN:MOV AL , SI MOV DI , ALINC SIINC DIDEC CXJNE AGAIN赋初值循环体【例】另一种做法【例】另一种做法MOV SI , 0MOV DI , 0MOV CX , 100AGAIN:MOV AL , AREA1SIMOV AREA2DI , ALINCSIINCDIDEC CXJNZ AGAIN赋初值循环3. 循环指令循环指令loopl循环指令默许利用循环指令默许利用CX计数器,方便实现计数计数器,方便实现计数循环的程序构造循环的程序
13、构造llabel操作数采用相对寻址方式操作数采用相对寻址方式LOOP labelLOOP label;CXCXCXCX1 1, ;CX0CX0,循环到标号,循环到标号labellabelLOOPZ labelLOOPZ label;CXCXCXCX1 1, ;CX0CX0且且ZFZF1 1,循环到标号,循环到标号labellabelLOOPZ labelLOOPZ label;CXCXCXCX1 1, ;CX0CX0且且ZFZF0 0,循环到标号,循环到标号labellabelJCXZ labelJCXZ label;CXCX0 0,转移到标号,转移到标号labellabel3. 循环指令循环
14、指令 LOOP格式:格式:LOOP labelLOOP label操作:操作:(CX)-1CX(CX)-1CX; 假设假设(CX)0,(CX)0,那么转至那么转至labellabel处执行;处执行; 否那么退出循环否那么退出循环, ,执行执行LOOPLOOP后面的指令。后面的指令。 LOOP指令与下面的指令段等价:指令与下面的指令段等价: DEC CX JNZ label例:记录字符串中空格的个数;String是附加段中的一个字符串是附加段中的一个字符串mov cx,count;设置循环次数;设置循环次数lea si , stringxor bx,bx;bx0,记录空格数,记录空格数mov a
15、l,20h;空格的;空格的ASCII码为码为20Hagain:cmp al,es:sijnz next;ZF0非空格,转移非空格,转移inc bx;ZF=1是空格,个数加是空格,个数加1next:inc siloop again ;字符个数减;字符个数减1,不为,不为0继续循环继续循环dec cxjnz againl运用举例:将数据段运用举例:将数据段1000H1000H开场的开场的100100个存储个存储单元全部填充为单元全部填充为ASCIIASCII码码2AH(2AH(* *) )。l MOV DIMOV DI,1000H1000Hl MOV CXMOV CX,64H64H ;循环计数器;
16、循环计数器lMOV AL, 2AHMOV AL, 2AHlAGAINAGAIN: MOV DIMOV DI,ALALl INC DIINC DIl DEC CXDEC CXl JNZ AGAINJNZ AGAINlHLTHLT上程序段存放在代码段中上程序段存放在代码段中,設設(CS)=109EH,那么各条指令存放地址如下:那么各条指令存放地址如下: CS : IP 指令指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH109E : 0108 MOV DI,AL109E : 010A INC DI109E
17、: 010B DEC CX109E : 010C JNZ 0108109E : 010E HLT109E : 0110 写入写入2AH(2AH(* *) )后,数据段中相应存储单元的内容改后,数据段中相应存储单元的内容改动如下:动如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A2A 2A 2A 2A 2ADS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A
18、 2A 2A 2A 2A 2A 2A 2A 2A2A 2A 2A 2A 2ADS:1020 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 2A2A 2A 2A 2A 2ADS:1030 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 2A2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A D
19、S:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A2A 2A 2A 2A 2ADS:1050 2A 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 2A2A 2A 2A 2A 2ADS:1060 2A 2A 2A 2ADS:1060 2A 2A 2A 2A4. 子程序指令子程序指令l子程序是完成特定功能的一段程序子程序是完成特定功能的一段程序l当主程序调用程序需求执行这个功当主程序调用程序需求执行这个功能时,采用能时,采
20、用CALL调用指令转移到该子程调用指令转移到该子程序的起始处执行序的起始处执行l当运转完子程序功能后,采用当运转完子程序功能后,采用RET前往前往指令回到主程序继续执行指令回到主程序继续执行主程序与子程序主程序与子程序CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令处指令后的指令处前往地址前往地址子程序前往指令子程序前往指令 RET段间前往指令RET的操作为: IP(SP)+1,(SP) SP(SP)+2;栈顶内容弹出到IP CS(SP)+1,(SP) SP(SP)+2;栈顶内容弹出到CS段内前往指令段内前往指令RET的操作为:的操作为:IP(SP)+1,(SP)
21、 SP(SP)+2;栈顶内容弹出到栈顶内容弹出到IP例:子程序;主程序;主程序mov al,0fh;提供参数;提供参数ALcall htoasc ;调用子程序;调用子程序.;子程序:将;子程序:将AL低位的低位的16进制数转换成进制数转换成ASCII码码htoasc: and al,0fh;只取;只取al的低的低4位位or al,30h;al高高4位变成位变成3cmp al,39h ;是;是09,还是,还是0Ah0Fhjbe htoendadd al,7;是;是0Ah0Fh,加上,加上7htoend:ret;子程序前往;子程序前往3.2.5 系统功能调用系统功能调用l21H号中断是号中断是DO
22、S提供应用户的用于调用系提供应用户的用于调用系统功能的中断,它有近百个功能供用户选择统功能的中断,它有近百个功能供用户选择运用,主要包括设备管理、目录管理和文件运用,主要包括设备管理、目录管理和文件管理三个方面的功能管理三个方面的功能lROM-BIOS也以中断效力程序的方式,向程也以中断效力程序的方式,向程序员提供系统的根本输入输出程序序员提供系统的根本输入输出程序l汇编程序设计需求采用系统的各种功能程序汇编程序设计需求采用系统的各种功能程序l充分利用操作系统提供的资源是程序设计的充分利用操作系统提供的资源是程序设计的一个重要方面一个重要方面功能调用的步骤功能调用的步骤通常按照如下通常按照如下
23、4 4个步骤进展:个步骤进展: 在在AHAH存放器中设置系统功能调用号存放器中设置系统功能调用号 在指定存放器中设置入口参数在指定存放器中设置入口参数 执行指令执行指令INT 21HINT 21H或或ROM-BIOSROM-BIOS的中断向的中断向量号实现中断效力程序的功能调用量号实现中断效力程序的功能调用 根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况1. 字符输出的功能调用字符输出的功能调用lDOS功能调用功能调用 INT 21Hl功能号:功能号:AH02Hl入口参数:入口参数:DL字符的字符的ASCII码码l功能:在显示器当前光标位置显示给定的功能:在显示器当前光标位置
24、显示给定的字符,光标右移一个字符位置。如按字符,光标右移一个字符位置。如按Ctrl-Break或或Ctrl-C那么退出那么退出mov ah,02h mov ah,02h ;设置功能号:;设置功能号:ah02hah02hmov dl,mov dl,? ? ;提供入口参数:;提供入口参数:dl?dl?int 21h int 21h ;在当前显示器光标位置显示一个问;在当前显示器光标位置显示一个问号号 进展字符输出时,当输出响铃字符进展字符输出时,当输出响铃字符07H以及以及退格退格08H、回车、回车0DH和换行和换行0AH字符字符时,该功能调用可以自动识别并能进展相应处置时,该功能调用可以自动识别
25、并能进展相应处置2. 字符串输出的功能调用字符串输出的功能调用lDOS功能调用功能调用 INT 21Hl功能号:功能号:AH09Hl入口参数:入口参数:lDS:DX欲显示字符串在主存中的首地址欲显示字符串在主存中的首地址l字符串应以字符串应以$24H终了终了l功能:在显示器输出指定的字符串功能:在显示器输出指定的字符串l可以输出回车可以输出回车0DH和换行和换行0AH字符产生回字符产生回车和换行的作用车和换行的作用例:显示字符串string DB string DB Hello,Everybody !,0dh,0ah,$ Hello,Everybody !,0dh,0ah,$;在数据段定义要显
26、示的字符串;在数据段定义要显示的字符串.mov ah,09h mov ah,09h ;设置功能号:;设置功能号:ah09hah09hmov dx,offset stringmov dx,offset string ;提供入口参数:;提供入口参数:dxdx字符串的字符串的偏移地址偏移地址int 21h int 21h ;DOSDOS功能调用:显示功能调用:显示3. 字符输入的功能调用字符输入的功能调用lDOS功能调用功能调用 INT 21Hl功能号:功能号:AH01Hl出口参数:出口参数:AL字符的字符的ASCII码码l功能:获得按键的功能:获得按键的ASCII代码值代码值l调用此功能时,假设无
27、键按下,那么会调用此功能时,假设无键按下,那么会不断等待,直到按键后才读取该键值不断等待,直到按键后才读取该键值例:判别按键getkey:getkey: mov ah,01hmov ah,01h ;功能号:;功能号:ah01hah01hint 21hint 21h;功能调用;功能调用cmp al,cmp al,Y Y;处置出口参数;处置出口参数alalje yeskeyje yeskey;是;是“Y Ycmp al,cmp al,N Nje nokeyje nokey;是;是“N Njne getkeyjne getkey.yeskey:yeskey: .nokey:nokey: .3.2.6 3.2.6 处置器控制指令处置器控制指令1.1.标志操作指令标志操作指令 用来设置标志位的形状。用来设置标志位的形状。 1 1CFCF设置指令设置指令 CLC 0CF CLC 0CF STC 1CF STC 1CF CMC CF CMC CF变反
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国智慧港口自动化设备选型标准与投资效益报告
- 2025-2030中国智慧港口自动化升级与设备供应商投资机会
- 2025-2030中国智慧城市建设现状投资规模及未来发展趋势分析报告
- 2025-2030中国智慧农业物联网设备市场渗透率及商业模式评估报告
- 2025-2030中国智慧农业技术推广与产业化发展分析报告
- 2026江西萍建工程建设有限公司招聘11人备考题库【完整版】附答案详解
- 2026江苏苏州市常熟市卫生健康系统招聘备案制人员7人备考题库带答案详解(能力提升)
- 2026长春光机所春季招聘334人备考题库附答案详解(b卷)
- 2026甘肃省人力资源市场招聘就业见习人员6人备考题库【满分必刷】附答案详解
- 2026山东青岛海上综合试验场有限公司招聘38人备考题库附完整答案详解【典优】
- 2025年互联网信息审核员考试题库及答案
- 2025年江西工业贸易职业技术学院单招职业技能测试题库带答案
- 邮政快递安全培训课件
- 2025年江苏省高职单招《职测》高频必练考试题库400题(含答案)
- 7 多元文化 多样魅力 第三课时 说课稿-2023-2024学年道德与法治六年级下册统编版
- 阀门检测服务合同
- 新视野大学英语(第四版)读写教程3(思政智慧版) 教案 B3U4 Unit 4 When work is a pleasure
- 毫米波雷达行业深度研究报告:4D毫米波雷达
- 拆除工程施工方案
- 《楚门的世界》电影赏析
- 人工智能芯片设计 课件 周巍 第1-3章-绪论、数字集成电路设计 -数字集成电路系统设计
评论
0/150
提交评论