版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计汇编语言程序设计第第5章章 分支程序设计分支程序设计汇编语言程序设计汇编语言程序设计5.2 分支程序设计分支程序设计 case 1 case 2 case n? case 1 case 2 case n CASE 结构结构 IF-THEN-ELSE 结构结构程序的分支一般用条件转移指令来产生,控制条件是关键。程序的分支一般用条件转移指令来产生,控制条件是关键。汇编语言程序设计汇编语言程序设计控制转移指令:控制转移指令: 8086CPU的转移指令分为:的转移指令分为: 1、无条件转移指令、无条件转移指令 (jmp) 2、条件转移指令(、条件转移指令(jxx) 3、循环指令、循环指
2、令loop 4、子程序调用、子程序调用call与返回与返回ret 5、中断、中断int 汇编语言程序设计汇编语言程序设计1、无条件转移指令:、无条件转移指令: JMP段内直接短转移:段内直接短转移:JMP SHORT OPR 执行操作:执行操作:(IP) (IP) + 8位位移量位位移量段内直接近转移:段内直接近转移:JMP NEAR PTR OPR执行操作:执行操作:(IP) (IP) + 16位位移量位位移量段内间接转移:段内间接转移: JMP WORD PTR OPR执行操作:执行操作: (IP) (EA)段间直接远转移:段间直接远转移:JMP FAR PTR OPR执行操作:执行操作:
3、(IP) OPR 的段内偏移地址的段内偏移地址 (CS) OPR 所在段的段地址所在段的段地址段间间接转移:段间间接转移: JMP DWORD PTR OPR 执行操作:执行操作: (IP) (EA) (CS) (EA+2)转向的符转向的符号地址号地址存储器寻存储器寻址方式址方式除立即数以外除立即数以外的寻址方式的寻址方式转向的符转向的符号地址号地址short: 表示实现的是表示实现的是段内直接短转移段内直接短转移,即位移量为即位移量为8位数据,它对位数据,它对IP的修改范的修改范围为围为 -128127,也就是说,它向前转,也就是说,它向前转移时可以最多越过移时可以最多越过128个字节,向后
4、转个字节,向后转移可以最多越过移可以最多越过127个字节。个字节。汇编语言程序设计汇编语言程序设计比如:程序比如:程序assume cs:codesgcodesg segment start:mov ax,0 jmp short s add ax,1 s:inc ax mov ax, 4c00h int 21hcodesg endsend start左面的程序执行后,左面的程序执行后, ax中的值为中的值为 1 ,因为执行因为执行 jmp short s 后后 ,越过了,越过了add ax,1 ,IP 指向了标号指向了标号 s处的处的 inc ax。也。也就是说,程序只进行了一次就是说,程序只
5、进行了一次ax加加1操作。操作。跳过的位移量即为指令跳过的位移量即为指令add ax,1的长度的长度。问:该程序执行后问:该程序执行后(AX) =?我们可以看到,我们可以看到,Debug 将将 jmp short s 中的中的 s 表示为表示为inc ax 指令的指令的偏移地址偏移地址 8 ,并将,并将jmp short s 表示为表示为 jmp 0008 ,表示转移到,表示转移到cs:0008处。处。jmp 0008 所对应的机器码为所对应的机器码为EB 03,并没有出现,并没有出现0008。 CPU执行执行 jmp short 标号标号 指令时并不需要转移的目的地址,只需指令时并不需要转移
6、的目的地址,只需要知道转移的位移就行了。要知道转移的位移就行了。汇编语言程序设计汇编语言程序设计2、条件转移指令、条件转移指令 注意:只能使用段内直接寻址的注意:只能使用段内直接寻址的8 位位移量位位移量(1) 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移 格式格式 转移条件转移条件JZ(JE) OPR ZF = 1 结果为结果为0(相等)则转移(相等)则转移JNZ(JNE) OPR ZF = 0 不为不为0(不相等)转移(不相等)转移JS OPR SF = 1 为负转移为负转移JNS OPR SF = 0 为正转移为正转移JO OPR OF = 1 溢出转移溢出转移JNO O
7、PR OF = 0 不溢出转移不溢出转移JP OPR PF = 1 有偶数个有偶数个1则转移则转移JNP OPR PF = 0 有奇数个有奇数个1 则转移则转移JC OPR CF = 1 有进位转移有进位转移JNC OPR CF = 0 无进位转移无进位转移汇编语言程序设计汇编语言程序设计比较两个比较两个无符号数无符号数,并根据比较结果转移的指令,并根据比较结果转移的指令(与比较指令(与比较指令CMP 联用)联用) 格式格式 测试条件测试条件 JB (JNAE,JC) OPR CF = 1 ;有借位;有借位 JNB (JAE,JNC) OPR CF = 0 ;没有借位;没有借位 JNA (JB
8、E) OPR CFZF = 1 JA (JNBE) OPR CF ZF = 0* 适用于地址或双精度数低位字的比较适用于地址或双精度数低位字的比较汇编语言程序设计汇编语言程序设计无符号数比较无符号数比较cmp ax,bx汇编语言程序设计汇编语言程序设计cmp指令对有符号数的比较指令对有符号数的比较cmp ah, bh(1)如果)如果SF=1,而,而OF=0, (ah)(bh) OF=0,说明没有溢出,逻辑上真正结果的正负,说明没有溢出,逻辑上真正结果的正负=实实际结果的正负;际结果的正负;SF=1表示实际结果为负,所以逻表示实际结果为负,所以逻辑上真正的结果为负,所以辑上真正的结果为负,所以(
9、ah)(bh)。(2)如果)如果SF=0,而,而OF=1 ,(ah)(bh) OF=1 ,说明有溢出,逻辑上真正结果的正负,说明有溢出,逻辑上真正结果的正负实际实际结果的正负;结果的正负;SF=0表示由于溢出导致了实际结果表示由于溢出导致了实际结果非负,那么逻辑上真正的结果必然为负。这样,非负,那么逻辑上真正的结果必然为负。这样,SF=0,OF = 1 ,说明了,说明了(ah)(bh) OF=1 ,说明有溢出,逻辑上真正结果的正负,说明有溢出,逻辑上真正结果的正负实际结实际结果的正负;果的正负; SF=1 表示由于溢出导致了实际结果为负,表示由于溢出导致了实际结果为负,那么逻辑上真正的结果必然
10、为正。这样,那么逻辑上真正的结果必然为正。这样,SF=1,OF = 1 ,说明了,说明了(ah)(bh)。 汇编语言程序设计汇编语言程序设计(3) 比较两个比较两个带符号数带符号数,并根据比较结果转移的指令,并根据比较结果转移的指令 格式格式 测试条件测试条件 JL (JNGE) OPR SF OF = 1 JNL (JGE) OPR SF OF = 0 JNG (JLE ) OPR (SF OF)ZF = 1 JG (JNLE) OPR (SF OF) ZF = 0* 适用于带符号数的比较适用于带符号数的比较(4) 测试测试 CX 的值为的值为 0 则转移的指令则转移的指令 格式格式 测试条
11、件测试条件 JCXZ OPR (CX)=0汇编语言程序设计汇编语言程序设计 MOV AX, XMOV AX, XCMP AX, 50CMP AX, 50 TOO_HIGH TOO_HIGHSUB AX, YSUB AX, Y OVERFLOW OVERFLOW NONNEG NONNEGNEG AXNEG AX NONNEG: NONNEG: MOV RESULT, AX MOV RESULT, AXTOO_HIGH:TOO_HIGH: OVERFLOW: OVERFLOW: 例:例:比较字比较字X,Y,如果如果 X50,转到,转到TOO_HIGH;否则先做;否则先做X-Y,如,如果溢出转到果
12、溢出转到 OVERFLOW,否则,否则 |X-Y| RESULT。JGJGJOJOJNSJNS汇编语言程序设计汇编语言程序设计补充补充1:常用的:常用的DOS调用:键盘输入,显示输出调用:键盘输入,显示输出 ;从键盘输入一个字符并回显在屏幕上;从键盘输入一个字符并回显在屏幕上 MOV AH, 01 ; ;DOS功能号功能号1:键盘输入并回显键盘输入并回显 INT 21H ; ;DOS调用类型调用类型21H: (AL)=字符的字符的ASCII码码 ;输出一个字符到屏幕上;输出一个字符到屏幕上 MOV DL, A ; ;调用参数调用参数: (DL)=待输出字符的待输出字符的ASCII码码MOV A
13、H, 02 ; DOS功能号功能号2: 显示一个字符显示一个字符INT 21H ; DOS调用类型调用类型21H ; 输出字符串显示在屏幕上输出字符串显示在屏幕上DS:DX=串地址(串必须以串地址(串必须以$结束)结束)DOS功能号功能号9: 显示字符串显示字符串汇编语言程序设计汇编语言程序设计逻辑逻辑非非指令:指令:NOT OPR * OPR不能为立即数不能为立即数执行操作:执行操作: (OPR) (OPR) * 不影响标志位不影响标志位 逻辑逻辑与与指令:指令:AND DST, SRC执行操作:执行操作: (DST) (DST) (SRC)逻辑逻辑或或指令:指令:OR DST, SRC执行
14、操作:执行操作: (DST) (DST) (SRC)异或异或指令:指令: XOR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)测试测试指令:指令: TEST OPR1, OPR2执行操作:执行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置1、 逻辑运算指令逻辑运算指令补充补充2、 逻辑运算与移位指令逻辑运算与移位指令汇编语言程序设计汇编语言程序设计例:屏蔽例:屏蔽AL的第的第0、1两位两位 AND AL, 0FCH例:置例:置AL的第的第5位为位为1 OR AL, 20H 例:
15、使例:使AL的第的第0、1位变反位变反 XOR AL, 3例:测试某些位是例:测试某些位是0是是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *相与结果为相与结果为0,则,则第第0位为位为0;
16、ZF=1,跳转跳转和和0与为与为0;和;和1与与不变不变和和0或不变;和或不变;和1或为或为1和和0异或不变;和异或不变;和1异或变反异或变反汇编语言程序设计汇编语言程序设计逻辑左移逻辑左移 SHL OPR, CNT逻辑右移逻辑右移 SHR OPR, CNT算术左移算术左移 SAL OPR, CNT(同逻辑左移)(同逻辑左移)算术右移算术右移 SAR OPR, CNT CF 0 0 CFCF2、移位指令移位指令1或或CL不能用立即不能用立即数数移出位补移出位补0用高位填充用高位填充汇编语言程序设计汇编语言程序设计循环左移循环左移 ROL OPR, CNT循环右移循环右移 ROR OPR, CN
17、T带进位循环左移带进位循环左移 RCL OPR, CNT带进位循环右移带进位循环右移 RCR OPR, CNTCF CFCFCF移出的位不仅要进移出的位不仅要进入入CF,而且还要填,而且还要填补空出的位。补空出的位。用原用原CF的值填补的值填补空出的位,移出的空出的位,移出的位再进入位再进入CF。汇编语言程序设计汇编语言程序设计注意注意: * OPR可用除立即数以外的任何寻址方式可用除立即数以外的任何寻址方式 *移位次数移位次数CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL * 条件标志位:条件标志位: CF = 移入的数值移入的数值 1 CNT=1
18、时,最高有效位的值发生变化时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变时,最高有效位的值不变循环移位指令:循环移位指令: 不影响不影响 SF、ZF、PF、AF 移位指令:移位指令: 常用来作乘以常用来作乘以2或除以或除以2 的操作。的操作。SAL:有符号数乘以有符号数乘以2,SAR有符号数除以有符号数除以2;SHL无符号数乘以无符号数乘以2,SHR: 无符号数除以无符号数除以2。 OF =汇编语言程序设计汇编语言程序设计 BXBX1234例例1:把:把 BX BX 中的二进制数以十六进制的形式显示在屏幕上中的二进制数以十六进制的形式显示在屏幕上BX循环左移循环左移4位位高位
19、清零,保留低高位清零,保留低4位位转换为转换为ASCII码码是是AF?加加7显示字符显示字符汇编语言程序设计汇编语言程序设计 mov ch, 4 mov ch, 4 ;设置循环次数;设置循环次数rotate: mov cl, 4 rotate: mov cl, 4 ;设置移位位数;设置移位位数 rol bx, cl rol bx, cl ;循环左移;循环左移4 4位位 mov al, bl mov al, bl ;取低;取低8 8位位 and al, 0fh and al, 0fh ;保留低;保留低4 4位位 add al, 30h add al, 30h ; 09 ASCII 30H39H;
20、 09 ASCII 30H39H cmp al, 3ahcmp al, 3ah jl printit jl printit ;判断是否为字母,不是则跳;判断是否为字母,不是则跳转转 add al, 7h add al, 7h ; AF ASCII 41H46H; AF ASCII 41H46Hprintit: mov dl, alprintit: mov dl, al mov ah, 2 mov ah, 2 int 21h int 21h ;调用功能号;调用功能号2 2,显示一个字符,显示一个字符 dec chdec ch jnz rotate jnz rotate 汇编语言程序设计汇编语言程
21、序设计例例2 2 :有数组有数组 X(x1,x2,x10) X(x1,x2,x10) 和和 Y(y1,y2,y10) Y(y1,y2,y10), 编程计算编程计算 Z Z(z1,z2,z10)(z1,z2,z10)z1 = x1 + y1z1 = x1 + y1z2 = x2 + y2z2 = x2 + y2z3 = x3 - y3z3 = x3 - y3z4 = x4 - y4z4 = x4 - y4z5 = x5 - y5z5 = x5 - y5z6 = x6 + y6z6 = x6 + y6z7 = x7 - y7z7 = x7 - y7z8 = x8 - y8z8 = x8 - y8z
22、9 = x9 + y9z9 = x9 + y9z10= x10 + y10z10= x10 + y10 逻辑尺:逻辑尺:0 0 1 1 0 1 1 1 0 00 0 1 1 0 1 1 1 0 01 1 减法减法0 0 加法加法汇编语言程序设计汇编语言程序设计 X dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 X dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 Y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 Y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 Z dw z1,z2,z3,z4,z5,z6,z7
23、,z8,z9,z10 Z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_rule dw logic_rule dw 00dc00dch h ;0000,0000,1101,1100;0000,0000,1101,1100 mov bx, 0 mov bx, 0 ;初始化寄存器;初始化寄存器 mov dx, logic_rule mov dx, logic_rule ;取得逻辑尺;取得逻辑尺 mov cx, 10 ;设置循环次数;设置循环次数next: mov ax, Xbxnext: mov ax, Xbx shr dx, 1 shr dx, 1 ;逻辑尺右移;
24、逻辑尺右移1 1位,标志位进入位,标志位进入CFCF jc subtract jc subtract ;CF=1CF=1做减法做减法 add ax, Ybx add ax, Ybx ;CF=0CF=0做加法做加法 jmp short resultjmp short result ; ; 向前引用向前引用subtract: subtract: sub ax, Ybx sub ax, Ybx ;执行减法操作;执行减法操作result: mov Zbx, ax result: mov Zbx, ax ;存入结果;存入结果 add bx, 2 add bx, 2 ;改变地址;改变地址 dec cxde
25、c cx jnz next jnz next 汇编语言程序设计汇编语言程序设计例例3:根据:根据 AL 寄存器中哪一位为寄存器中哪一位为 1(从低位到高位),(从低位到高位), 把程序转移到把程序转移到 8 个不同的程序分支个不同的程序分支branch_table dw routine1branch_table dw routine1 dw routine2 dw routine2 dw routine3 dw routine3 dw routine4 dw routine4 dw routine5 dw routine5 dw routine6 dw routine6 dw routine7
26、 dw routine7 dw routine8 dw routine8汇编语言程序设计汇编语言程序设计 cmp al, 0 cmp al, 0 ;AL;AL为逻辑尺为逻辑尺 je continue je continue ;(AL)=0;(AL)=0不处理不处理 lea bx, branch_tablelea bx, branch_table ;取得跳跃表首地址;取得跳跃表首地址L: shr al, 1 L: shr al, 1 ; ;逻辑右移逻辑右移 jnc add1 jnc add1 ;CF=0 CF=0 跳转跳转 jmp jmp word ptr bxword ptr bx ; ;段内间接转移段内间接转移add1: add1: add bx, type branch_tableadd bx, type branch_table ;add bx,2add bx,2 jmp L jmp Lcontinue: continue: routine1: routine1: routine2: routine2: (寄存器间接寻址寄存器间接寻址)汇编语言程序设计汇编语言程序设计 mov bx, 0 mov bx, 0newchar: mov ah, 1 newchar: mov ah, 1 ;键盘输入;键盘输入 int 21hint 21h sub al, 30h su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《统计学原理》2022-2023学年第一学期期末试卷
- 黄山学院《Linux操作系统》2021-2022学年期末试卷
- 淮阴师范学院《展示设计》2022-2023学年第一学期期末试卷
- 淮阴师范学院《化工基础》2023-2024学年第一学期期末试卷
- 淮阴工学院《数字图像处理2》2023-2024学年期末试卷
- 淮阴工学院《软件测试与质量保证II》2023-2024学年期末试卷
- DB4403T451-2024食品经营许可远程视频核查指南
- 三年级作文300字各种类型作文大全(30篇)
- 摩托车的行驶稳定性与平衡性考核试卷
- 2021-2022学年六年级上学期期中数学试卷及答案解析
- 2024年大学新生开学第一课-如何开启你的大学生活课件
- 不寐-《中医内科学》教案
- 统编版2024年新教材七年级上册道德与法治8.1《认识生命》教案
- 13J933-2体育场地与设施(二)
- 弧形管道施工施工方法及工艺要求
- 智能制造装备与集成 课件 02 智能制造架构与装备
- 九年级历史上册 第三、四单元 单元测试卷(人教版 24年秋)
- 基于LoRa通信的智能家居系统设计及研究
- 心脏骤停与心源性猝死的急救与护理课件
- 2024年中考地理二轮复习专题-地理实践与跨学科主题学习(解析版)
- 个人向纪检委写悔过书集合3篇
评论
0/150
提交评论