汇编语言第5章 分支程序设计课件

上传人:我*** 文档编号:146138794 上传时间:2020-09-26 格式:PPT 页数:60 大小:948KB
返回 下载 相关 举报
汇编语言第5章 分支程序设计课件_第1页
第1页 / 共60页
汇编语言第5章 分支程序设计课件_第2页
第2页 / 共60页
汇编语言第5章 分支程序设计课件_第3页
第3页 / 共60页
汇编语言第5章 分支程序设计课件_第4页
第4页 / 共60页
汇编语言第5章 分支程序设计课件_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《汇编语言第5章 分支程序设计课件》由会员分享,可在线阅读,更多相关《汇编语言第5章 分支程序设计课件(60页珍藏版)》请在金锄头文库上搜索。

1、第 5章,教学重点,综合应用第3章硬指令和第4章伪指令,第5章从程序结构角度展开程序设计,重点掌握: 分支结构程序设计 循环结构程序设计,5.1 顺序程序设计,顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构,例2 代码转换,例3 计算,例题 代码转换,题目: 查表法,实现一位16进制数转换为ASCII码显示 .model small .stack 256 .data ASCII db 30h,31h,32h,33h,34h,35h db 36h,37h,38h,39h ;09的ASCII码 db 41h,42h,43h,44h,45h,46h;AF的ASCII码 h

2、ex db 0bh ;任意设定了一个待转换的一位16进制数,例题 代码转换,.code .startup mov bx,offset ASCII;BX指向ASCII码表 mov al,hex ;AL取得一位16进制数,正是ASCII码表中位移 and al,0fh xlat ;换码:ALDS:BXAL mov dl,al mov ah,2 int 21h ;显示一个ASCII码字符 .exit end,例:对两个8字节无符号数求和这两个数分别用变量D1和D2表示,将两数之和的最高进位放在AL中,两数之和的其它位按从高到低顺序依次放在SI、BX、CX、DX中。 9 9 0 0 f e a a 7

3、 8 5 6 3 4 1 2 + 7 2 3 4 5 6 7 8 9 0 a b b c c d 1 0 b 3 5 5 5 2 3 0 9 0 1 f 0 d f AL SI BX CX DX,d segment D1 DQ 9900feaa78563412H ;D1 db 12h,34h,56h,00h,99h D2 DQ 7234567890abbccdH ;D2 db cdh,bch,abh,34h,72h d ends c segment assume cs:c,ds:d bg: mov ax, d mov ds, ax lea di, D1 mov dx, word ptr di

4、mov cx, word ptr di+2 mov bx, word ptr di+4 mov si, word ptr di+6 lea di, D2 add dx, word ptr di adc cx, word ptr di+2 adc bx, word ptr di+4 adc si, word ptr di+6 mov al, 0 adc al, 0 mov ah, 4ch int 21h c ends end bg,80 x86的第二类寻址方式转移类指令的寻址方式,段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址,直接转移,CODE SEGMENT START:MOV AX

5、,DATA MOV DS,AX JMP AB AB: MOV AX, 0 MOV AX,4C00H INT 21H CODE ENDS,CODE1 SEGMENT START:MOV AX,DATA MOV DS,AX JMP FAR PTR AB MOV AX,4C00H INT 21H CODE1 ENDS CODE2 SEGMENT AB: MOV AX, 0 CODE2 ENDS,两个代码段,间接转移,CODE SEGMENT START:MOV AX,DATA MOV DS,AX JMP AB AB: MOV AX, 0 MOV AX,4C00H INT 21H CODE ENDS,

6、CODE SEGMENT START:MOV AX,DATA MOV DS,AX JMP WORD PTR BX MOV AX,4C00H INT 21H CODE ENDS,直观,不直观,段内直接转移,语句格式: JMP 符号地址(标号) 机器指令格式: 操作码之后,是一个8位或16位的位移量。 转移地址=指令中给定的位移量+ IP的当前值 IP 注意: IP的当前值是指该转移指令的下一条指令的地址。 段内直接转移分为短转移和长转移两种, 分别叫做short型和near型,示例:,JMP SHORT LP1 段内短转移 位移128 +127字节 JMP NEAR PTR LP2 段内近转移

7、位移32768 +32767字节 JMP LP3 隐含类型,一般视转移的距离由汇编程序自动确定为SHORT或NEAR。,计算转移地址举例:,0024H,JMP AD1,IP=0026H,AD1, JMP 06H xxxxx ,计算转移地址: 符号扩展 转移地址=0026H+0006H=002CH,计算转移地址: 符号扩展 转移地址=0026H+FFFAH(-6) =0020H, 思考题: 在0624单元内有一条二字节JMP SHORT OBJ指令,如其中位移量为6BH、C6H,OBJ=?,段内间接转移,目标地址是由一个16位通用寄存器、或内存单元来寻址。 转移地址在CPU的内部寄存器中 指定1

8、6位寄存器内容 IP 在内存寻址的数据单元中(2字节) 指定的内存字单元内容 IP,段内间接转移示例,JMP CX 转移地址在CX中。 JMP WORD PTR BX 转移地址在BX间接寻址的内存单元连续两个字节中。 这里可以是各种合法的内存寻址方式,举例,假设:DS=1000H,BX=1234H,SI=567H,DATA1=30A1H, 存储单元(1000:1234H)=9876H,(1000:483CH)=0AABBH 执行指令后IP的值? JMP BX ; IP=BX=1234H JMP WORD PTR BX ; IP=BX=9876H JMP DATA1BXSI ; IP=(1000

9、0+30A1+1234+567)=(1483CH)=0AABBH,段间直接转移,转移地址在JMP指令操作码之后,即由包含在指令中的值代替CS和IP的原值。 格式:JMP FAR PTR 标号 操作:标号的段内偏移地址 IP 标号所在段的段地址 CS,段间直接转移示例,JMP FAR PTR TABLE 这是一个段间型标号(4个字节的地址指针),段间间接转移,转移地址在内存寻址的数据单元中(4字节) 例:JMP DWORD PTR BPDI 这里可以是各种内存寻址方式,寻址双字单元。 双字单元中的内容 前一个字 IP 后一个字 CS,设 BX=2000H,DS=1000H JMP DWORD P

10、TR 1000H+BX,IP,CS,说明:,常用的无条件转移指令,一般是段内直接转移。 关于长、短转移: 若汇编程序能确定目标是在距JMP指令的127字节内时,就 会自动产生一个两字节的短JMP指令; 否则就产生一个能在32K范围内寻址目标的NEAR JMP JMP指令不影响标志位。 386以后机型: 转移地址的IP使用32位的EIP,操作与上面所述相同。,比较指令,格式: CMP OPR1, OPR2 功能: OPR1-OPR2结果不回送, 影响 标志寄存器。,条件转移指令,格式: Jxx 目标地址(语句标号) 操作: 当满足条件时: (IP)+8位位移量(指令中指定的)(IP) 实现转移

11、当不满足条件时: (IP)不变,不转移,继续执行,单个标志位作为条件的条件转移指令,JC 当CF=1(有进借位)时转移 JNC 当CF=0(无进借位)时转移 JZ/JE 当ZF=1(结果为0)时转移 JNZ/JNE 当ZF=0(结果非0)时转移 JS 当SF=1(负数)时转移 JNS 当SF=0(正数)时转移 JO 当OF=1(溢出)时转移 JNO 当OF=0(无溢出)时转移,用于无符号数的条件转移指令,JA / JNBE (大于/不小于等于) 当 CF=0 且 ZF=0时转移 用于两个无符号数a,b比较后,若ab则转移。 JAE / JNB (大于等于/不小于) 当 CF=0 或 ZF=1时

12、转移 用于两个无符号数a,b比较后,若ab则转移。 JB / JNAE (小于/不大于等于) 当CF=1且ZF=0时转移 用于两个无符号数a,b比较后,若ab则转移。 JBE/ JNA (小于等于/不大于) 当CF=1或ZF=1时转移 用于两个无符号数a,b比较后,若ab则转移。,用于有符号数的条件转移指令,JG / JNLE(大于/不小于等于) 当SF与OF同号(SFOF=0)且ZF=0时转移 用于两个带符号数a,b比较后,若ab则满足条件转移。 JGE / JNL(大于等于/不小于) 当SF与OF同号(SFOF=0)或ZF=1时转移 用于两个带符号数a,b比较后,若ab则满足条件转移。 J

13、L/ JNGE(小于/不大于等于) 当SF与OF异号(SFOF=1)且ZF=0时转移 用于两个带符号数a,b比较后,若ab则满足条件转移。 JLE/ JNG(小于等于/不大于) 当SF与OF异号(SFOF=1)或ZF=1时转移 用于两个带符号数a,b比较后,若ab则满足条件转移。,测试CX或ECX的值为0则转移,格式1:JCXZ 语句标号 功能:测试CX,CX=0则转移到语句标号处 转移地址=IP+8位位移 格式2:JECXZ 语句标号 功能:测试ECX,ECX=0则转移到语句标号处 转移地址=IP+8位位移,5.2 分支程序设计,分支程序根据条件是真或假决定执行与否 判断的条件是各种指令,如

14、CMP、TEST等执行后形成的状态标志 转移指令Jxx和JMP可以实现分支控制;,单分支,双分支,多分支,单分支程序设计,条件成立跳转,否则顺序执行分支语句体; 注意选择正确的条件转移指令和转移目标地址,第5章,例题 求绝对值,;计算AX的绝对值 cmp ax,0 jge nonneg ;分支条件:AX0 neg ax ;条件不满足,求补 nonneg:mov result,ax;条件满足 ;计算AX的绝对值 cmp ax,0 jl yesneg ;分支条件:AX0 jmp nonneg yesneg:neg ax ;条件不满足,求补 nonneg:mov result,ax;条件满足,Goo

15、d, Bad,jmp nonneg,例题 无符号数除以2,;将AX中存放的无符号数除以2,如果是奇数,则加1后除以2 test ax,01h ;测试AX最低位 jz even ;最低位为0:AX为偶数 add ax,1 ;最低位为1:AX为奇数,需要加1 even: rcr ax,1 ;AXAX2,双分支程序设计,条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。 注意: 第1个分支体后一定要有一个JMP指令跳到第2个分支体后,第5章,例题 显示BX最高位,shl bx,1;BX最高位移入CF jc one;CF1,即最高位为1,转移 mov dl,30H ;CF0,即最高位为0,DL0 jmp two;一定要跳过另一个分支体 one:mov dl,31H two:mov ah,2 int 21h;显示,对比,例题 显示BX最高位,shl bx,1;BX最高位移入CF jnc one;CF0,即最高位为0,转移 mov dl,31H ;CF1,即最高位为1,DL1 jmp two;一定要跳过另一个

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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