东北大学汇编语言第06章分支结构程序.ppt

上传人:za****8 文档编号:13634134 上传时间:2020-06-23 格式:PPT 页数:36 大小:325.06KB
收藏 版权申诉 举报 下载
东北大学汇编语言第06章分支结构程序.ppt_第1页
第1页 / 共36页
东北大学汇编语言第06章分支结构程序.ppt_第2页
第2页 / 共36页
东北大学汇编语言第06章分支结构程序.ppt_第3页
第3页 / 共36页
资源描述:

《东北大学汇编语言第06章分支结构程序.ppt》由会员分享,可在线阅读,更多相关《东北大学汇编语言第06章分支结构程序.ppt(36页珍藏版)》请在装配图网上搜索。

1、第六章分支结构程序,6.1分支结构程序的引出 6.2转移指令 6.3分支结构程序设计 6.4多分支结构程序设计,6.1分支结构程序的引出,用计算机处理问题过程中,总是要求计算机能做出各种逻辑判断,并根据判断的结果,做相应的处理。 例如,火车站用计算机计算托运行李的托运费,当旅客行李重量小于或等于20kg时,收费0.2元/kg,当行李重量超过20kg时,20kg以内部分0.2元/kg,超出部分,收费0.3元/kg。这个处理过程,可归纳为下面数学表达式: 0.2w(w20kg) 0.2*20+0.3*(w-20)(w20kg),P=,6.2转移指令,6.2.1无条件转移指令 6.2.2条件转移指令

2、,6.2.1无条件转移指令,指令汇编格式:JMP targ 操作:段内转移:IP目标的偏移地址 段间转移:IP目标的偏移地址 CS目标所处代码段的基址 受影响的状态标志位:无 说明:指令中的targ可以是直接标号、寄存器间接或存储器间接寻址形式。,6.2.1无条件转移指令,(1)段内转移(NEAR) 1)段内直接转移 JMP LABEL_N ;LABEL_N在当前代码段 JMP SHORT LABEL_N ;LABEL_N在当前代码段,且在-128127范围内; 例:,6.2.1无条件转移指令,CSEG SEGMENT ASSUME CS:CSEG START: JMP L1 JMP SHOR

3、TL2 JMP L2 JMP START L2: NOP ORG L2+100H L1: NOP CSEG ENDS END,6.2.1无条件转移指令,0000 CSEG SEGMENT ASSUME CS:CSEG 0000E9010AR START: JMP L1 0003EB05 JMP SHORTL2 0005EB0390 JMP L2 0008EBF6 JMP START 000A90 L2: NOP 010A ORG L2+100H 010A90 L1: NOP 010B CSEG ENDS END,6.2.1无条件转移指令,(1)段内转移(NEAR) 2)段内寄存器间接转移 JM

4、P AX 3)段内存储器间接转移 JMP SI JMP WORD PTRBX+DI+1000H,6.2.1无条件转移指令,(2)段间转移(FAR) 1)段内直接转移 JMP LABELF 2)短内存储器直接转移 LABEL_D DD 12345678H JMP LABEL_D JMP DWORD PTR BX ,6.2.2条件转移指令,条件转移指令是根据CPU中状态标志位的状态决定程序执行的流程,既可能产生程序转移,也可能不产生程序转移。条件转移指令是以对不同的状态标志的测试为条件。如果 条件成立,则控制转移到指令中所给出的转移目标。条件不成立,程序将顺序执行。所有的条件转移指令均为短(sho

5、rt)转移。,6.2.2条件转移指令,1.根据单标志转移的指令,Even,Odd,6.2.2条件转移指令,2.根据两数(A,B)的大小关系转移的指令 (1)使用该指令前用过比较(CMP A,B)、减法(SUB A,B、SBB A,B)指令。 (2)A与B的关系共有6种: AB A (3)比较转移时分无符号数和带符号数。例如: A=11111111B B=00000001B,6.2.2条件转移指令,Below Above Less Great Equal,6.2.2条件转移指令,JNAE JNA JNBE JNB JNGE JNG JNLE JNL,6.2.2条件转移指令,CMP A,B JL

6、XXX SFOF=1(SF=1*EXAM6.1* 2:SSEG SEGMEN TSTACK 3:STK DB 50DUP(0) 4:SSEG ENDS 5:DSEG SEGMENT 6:ARGX DB -5 7:RLT DB ? 8:DSEG ENDS 9:CSEG SEGMENT 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12:BEGIN: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,SIZESTK,17: MOV AL,ARGX ;取X值 18: AN

7、D AL,AL ;置标志位 19: JS ABSL ;X0转 20: JZ MOVE ;X=0转 21: CMP AL,8 ;X8? 22: JLE ONE ;是,转 23: CMP AL,15 ;X15? 24: JGE MOVE ;是,转 25: SAL AL,1 ;计算5X-2 26: SAL AL,1 27: ADD AL,ARGX 28: SUB AL,2 29: JMP MOVE 30:ONE: ADD AL,10 ;X8,计算X+10 31: JMP MOVE 32:ABSL: NEG AL ;取补 33:MOVE:MOV RLT,AL ;保存结果 34: MOV AH,4CH

8、35: INT 21H 36:CSEG ENDS 37: END BEGIN,6.3分支结构程序设计-例6.1,6.3分支结构程序设计-例6.2,例6.2设内存中有三个互不相等的无符号字数据,分别存放在ARG开始的字单元,编制程序将其中最大值存入MAX单元。,6.3分支结构程序设计-例6.2,1:;*EXAM6.2* 2:SSEG SEGMENT STACK 3:STK DB 20 DUP(0) 4:SSEG ENDS 5:DSEG SEGMENT 6:ARG DW 7138H,84A6H,29EH 7:MAXDW ? 8:DSEG ENDS 9:CSEG SEGMENT 10: ASSUME

9、 CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12:FMAX:MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,SIZESTK,17: LEA SI,ARG ;取数据首址 18: MOV AX,SI ;取第1个数 19: MOV BX,SI+2 ;取第2个数 20: CMP AX,BX ;两数比较 21: JAE FMAX1 ;AX中的数大 22: MOV AX,BX ;大数送AX 23:FMAX1:CMP AX,SI+4 ;大数与第3个数比较 24: JAE FMAX2 ;AX中的数

10、大 25: MOV AX,SI+4 ;第3个数大大值 26:FMAX2:MOV MAX,AX ;保存最大值 27: MOV AH,4CH 28: INT 21H 29:CSEG ENDS 30: ENDF MAX,6.3分支结构程序设计-例6.2,6.3分支结构程序设计-例6.3,例6.3内存由ADR单元开始存放两个带符号字数据,编制程序,若两数同号将FLAG单元置0,否则置全1。 判断两数是否同号,即判断两个数的最高位是否相同,若相同即为同号。判断的方法有两种:第一种方法:先取出一个数,判断符号是否为正,若为正,再判断另一个数的符号是否为正,也为正,则两数同号,否则为异号;若第一个数的符号为

11、负判断另一个数的符号是否为负,也为负,则两数同号,否则为异号。,6.3分支结构程序设计-例6.3,1:;*EXAM6.3.1* 2:SSEG SEGMENT STACK 3:STK DB 20 DUP(0) 4:SSEG ENDS 5:DSEG SEGMENT 6:ADR DW 73A5H,924BH 7:FLAG DB ? 8:DSEG ENDS 9:CSEG SEGMENT 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12:START: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,

12、AX 16: MOV SP,SIZESTK,6.3分支结构程序设计-例6.3,17: MOV AX,ADR 18: AND AX,AX ;置标志 19: JNS PLUS ;正转 20: MOV AX,ADR+2 21: AND AX,AX ;第二个数置标志 22: JS SAME ;同为负 23:UNSAME: MOV AL,0FFH;异号标志 24: JMP LOAD 25:PLUS: TEST ADR+2,8000H;第二个数置标志 26: JS UNSAME ;异号 27:SAME: XOR AL,AL ;同号标志 28:LOAD: MOV FLAG,AL ;存标志 29: MOV A

13、H,4CH 30: INT 21H 31:CSEG ENDS 32: END START,1001 0010 0100 1011 1000 0000 0000 0000,6.3分支结构程序设计-例6.3,0111 0011 1010 0101 1001 0010 0100 1011,1110 0001 1110 1110,换个算法:,1:;*EXAM6.3.1* 2:SSEG SEGMENT STACK 3:STK DB 20 DUP(0) 4:SSEG ENDS 5:DSEG SEGMENT 6:ADR DW 73A5H,924BH 7:FLAG DB ? 8:DSEG ENDS 9:CSE

14、G SEGMENT 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12:START: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,SIZE STK,6.3分支结构程序设计-例6.3,6.3分支结构程序设计-例6.3,17: MOV AX,ARG 18: XOR AX,ARG+2 ;两数异或 19: MOV AL,0 ;同号标志 20: JNS LOAD ;同号 21: DEC AL ;异号标志 22: LOAD: MOV FLAG,AL ;存标志 23: MO

15、V AH,4CH 24: INT 21H 25: CSEG ENDS 26: END START,6.3 分支结构程序设计-例6.4,例6.4 设ASC单元存放两个字符的ASCII码,编制程序检查其奇偶性,并将它们配制成奇校 验存入原单元。 字符的ASCII码是用七位二进制表示的,当用一个字节单元 (8位) 保存一个字符的ASCII码时,字节单元的第7位空闲,不同的计算机存放ASCII码时,系统软件对该位有不同的定义: 1) 第7 位总是0; 2) 第7 位总是1;3) 做为奇偶校验位; 4) 第7 位为1,扩充128 种特殊字符或图形代码(在西文状态下); 5) 做为汉字代码的标志位(在中文

16、状态下)。,6.3 分支结构程序设计-例6.4,1: ;*EXAM 6.4 * 2: SSEG SEGMENT STACK 3: STK DB 20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT 6: ASC DB AC 7: DSEG ENDS 8: CSEG SEGMENT 9: ASSUME CS:CSEG,DS:DSEG 10: ASSUME SS:SSEG 11: MKODD: MOV AX,DSEG 12: MOV DS,AX 13: MOV AX,SSEG 14: MOV SS,AX 15: MOV SP,LENGTH STK,16: MOV AX,WO

17、RD PTR ASC;取两字符 17: AND AL,AL ;置奇偶标志 18: JPO NEXT ;奇转 19: OR AL,80H ;配为奇性 20:NEXT:AND AH,AH ;置奇偶标志 21: JPO LOAD ;奇转 22: OR AH,80H ;配为奇性 23:LOAD:MOV WORD PTR ASC,AX 24: MOV AH,4CH 25: INT 21H 26:CSEG ENDS 27: END MKODD,6.3 分支结构程序设计-例6.4,6.4 多分支结构程序设计,利用计算机解决实际问题时,常遇到这样的情况: 处理某个问题时有多种选择方案,根据实际情况选择其中一种

18、。每种处理方案由一段程序完成,每一段程序可以看作一个分支,程序在执行过程中根据当前的状况,决定下一步应执行哪一个分支,这就构成了多个分支的程序。 如用计算机控制一台电动机,该电动机有正转、逆转,在每种转动方式下又有几种转速的档次控制,这些控制可以通过键盘09的数字键进行选择,进入某种档次选择后,执行相应分支程序,使电机以最佳方式由一个状态进入所选状态。假设程序的十个分支的起始地址分别为ADR0,ADR1,.ADR9。,1: ;*EXAM 6.5.1* 2: SSEG SEGMENTSTACK 3: STK DB20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT 6:

19、DSEG ENDS 7: CSEG SEGMENT 8: ASSUME CS:CSEG,DS:DSEG 9: ASSUME SS:SSEG 10: MOTOR:MOV AX,DSEG 11: MOV DS,AX 12: MOV AX,SSEG 13: MOV SS,AX 14: MOV SP,SIZE STK 15: MOV AH,01 16: INT 21H 17: CMP AL,0 18: JZ ADR0 19: CMP AL,1 20: JZ ADR1 21: : 22: CMP AL,8 23: JZ ADR8 24:ADR9: : 25: : : ADR0: : : : : ADR1

20、 : : : : ADR8 : : : CSEG ENDS : END MOTOR,6.4 多分支结构程序设计,6.4 多分支结构程序设计,地址常数表法 所谓地址常数表法,就是把多个分支中的每个分支程序段的起始地址顺序存放在一个存储区中,这个存储区称地址表存储区。根据键值,将相应处理程序的入口地址取入某寄存器,然后用间接转移指令实现转移。,6.4 多分支结构程序设计,1: ;*EXAM 6.5.2 * 2: SSEG SEGMENT STACK 3: STK DB 20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT 6: ADRTAB DW OFFSET ADR0,O

21、FFSET ADR1 7: DW OFFSET ADR2,.,OFFSET ADR9 8: DSEG ENDS 9: CSEG SEGMENT 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12: BRANCH: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,LENGTH STK,17: LEA DI,ADRTAB ;取地址表首址 18: MOV AH,01 ;读键盘 19: INT 21H 20: SUB AL,0 ;转换为数字 21: XOR AH,AH ;扩展为字数据 22: SHL AX,1 ;乘2 23: ADD DI,AX ;形成相应地址 24: MOV AX,DI ;取程序入口 25: JMP AX ;转去执行 26:ADR0: : 27: : :ADR1: : : : :ADR9: : : : :CSEG ENDS : END BRANCH,6.4 多分支结构程序设计,MOV BX,AX JMP ADRTABBX MOV BX,AX JMP DI+BX,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!