第04章汇编语言设计2培训讲学

上传人:yuzo****123 文档编号:141247270 上传时间:2020-08-05 格式:PPT 页数:52 大小:1.06MB
返回 下载 相关 举报
第04章汇编语言设计2培训讲学_第1页
第1页 / 共52页
第04章汇编语言设计2培训讲学_第2页
第2页 / 共52页
第04章汇编语言设计2培训讲学_第3页
第3页 / 共52页
第04章汇编语言设计2培训讲学_第4页
第4页 / 共52页
第04章汇编语言设计2培训讲学_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第04章汇编语言设计2培训讲学》由会员分享,可在线阅读,更多相关《第04章汇编语言设计2培训讲学(52页珍藏版)》请在金锄头文库上搜索。

1、微机原理与接口技术第四章汇编语言程序设计,1,4.6 程序设计方法,顺序结构; 分支结构; 循环结构; 子程序结构; 综合举例;,2,内 容 提 要,3,一个好的程序应该具备的特点: 程序结构模块化,程序易读,易调试及维护。 执行速度快。 占用内存空间小。,概 述,4.6.1 、顺序结构,5,程序简单,程序顺序执行,无分支、循环,也无转移,图中没有判断框。 例 内存中TABLE开始存放09的平方值,通过人机对话,当任意给定一个数X(09),查表得X的平方值,放在AL中。,解:DATASEGMENT TABLE1DB 0,1,4,9,16,25,36,49,64,81 BUFDB Please

2、input one number (09):,0DH,0AH,$ DATAENDS SSEGSEGMENT PARA STACK STACK DB 50 DUP(?) SSEGENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:DATA, DS:DATA, SS:SSEG START:MOVAX, DATA ;段初始化 MOV DS, AX,6,MOV DX, OFFSET BUF ;9号功能调用,提示输入一个数 MOV AH, 9 INT 21H MOV AH, 1 ;1号功能调用,键入数送AL INT 21H AND AL, 0FH MOV BX, OFFS

3、ET TABLE1 MOV AH, 0 ;查表得输入数的平方值 ADD BX, AX;此2条指令等价于XLAT MOV AL, BX;AL=? MOV AH, 4CH;结束程序返回 INT 21H RET MAIN ENDP CODE ENDS END START,;将AL中的ASCII码转换 成非压缩BCD,4.6.2 、分支结构,7,1分支结构: 根据不同条件程序选择不同的处理方法时,运用分支结构。 共同特点:某种条件下,有一个且只有一个分支被执行,而其他分支一定不会被执行,8,例 存储器中有一串字符串首址为BUF,字符串长度N小于256,要求分别计算出其中数字09,字母AZ和其它字符的个

4、数,并分别将它们的个数存放到此字符串的下面三个单元中。 思考:数学逻辑和描述分支结构图。,解:DATASEGMENT BUF DB N DB 01H,38H,47H,60H, 76H NUM DB 3 DUP (?) DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE ,DS:DATA START:PUSHDS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX,9,MOV CH, BUF ;数组个数NCH MOV BX, 1 MOV DX, 0 ;DH计数字的个数,DL计字母的个数 LP: MOV AH, B

5、UF BX CMP AH, 30H JL NEXT ;小于0转 CMP AH, 39H JG ABC ;大于9转 INC DH ;数字个数加1 JMP NEXT ABC:CMP AH, 41H JL NEXT ;小于A转 CMP AH, 5AH JG NEXT ;大于Z转 INC DL ;字母的个数加1 NEXT:INC BX ;数组地址加1 DEC CH ;计数器减1 JNZ LP,10,MOV BUFBX, DH ;数字的个数送入内存单元 MOV BUFBX+1, DL ;字母的个数送入内存单元 MOV AH, N SUB AH, DH ; SUB AH, DL;NDHDL=其它字符的个数

6、 MOV BUFBX+2, AH ;其它字符的个数送入内存单元 RET MAIN ENDP CODE ENDS END START,11,2多分支: 依次测试多个条件是否满足:若满足转入相应分支入口;不满足继续向下测试,直到全部测试完。 此方法编程简单直观,但速度慢。,例 有8个加工子程序,入口地址分别为P1,P2,P8。编程实现检测键盘输入命令,使系统分别转向8个加工子程序。 解:相应程序如下:,12,MOV AH, 1 INT 21H ;1号功能键调用,键盘接收(P159) CMP AL, 1 ;键值为1,转1号加工子程序 JE P1 CMP AL, 2 ;键值为2,转2号加工子程序 JE

7、 P2 CMP AL, 8 JE P8 ;键值非18,转向停止 JMP ST P1: ;1号加工子程序 P2: P3: P8: ST : HLT,13,3跳转表实现多分支: 好处: 可以直接找到相应入口。 实现: 建立跳转表:包括每个分支的入口地址、跳转指令或关键字。 根据表内地址分支: 跳转表中存放了每个分支程序的入口地址,只要找到表地址,再将其中内容取出,即可得到每个分支的入口地址。 表地址跳转表首地址 偏移地址 使用:JMP WORD PTR BX ;转入相应入口地址 JMP BX,14,15,例 将上例用跳转表来实现 解:ADATASEGMENT BASE DW P1, P2, P3,

8、 P4 ;定义跳转表 DW P5, P6, P7, P8 KEY DB ? ADATA ENDS ASTACKSEGMENT PARA STACK STACK DB 100 DUP (?) ASTACKENDS ACODESEGMEINT ASSUME CS :ACODE , DS: ADATA , SS :ASTACK MAIN PROC FAR START:PUSHDS MOV AX, 0 PUSHAX MOV AX, ADATA MOV DS, AX,16,MOVAH,1 ;检测按键,键值在AL中 INT 21H AND AL, 0FH;将ASCII码转换为非压缩BCD码 MOV BX,

9、OFFSET BASE ;取跳转表首地址 MOV AH,0 ADD AL,AL;数字2偏移量 ADD BX,AX ;求表地址 JMP WORD PTR BX ;转入相应入口地址 RET MAIN ENDP CODE ENDS END START,17,根据表内指令分支: 表内存放:转移指令。 查表后程序转到相应子程序。 转移指令跳转表存放形式如图。,使用:JMP BX ;转入转移指令,18,19,例 程序用跳转表来安排指令实现分支。 解:建立跳转表: DATASEGMENT BASEDB E9,P1低,Pl高,E9 DB E9E9,P8低,P8高 DATAENDS 有关程序段为:MOVAH,

10、1 ;键入到AL INT 21H AND AL, 0FH MOV AH, 0 MOV BL, AL ; AL为键值 ADD AL, AL ADD AL, BL ;偏移量键值3 MOV BX, OFFSET BASE ;基地址 ADD BX, AX ;表地址 JMP BX ;转入转移指令,20,根据关键字分支: 表中存放:关键字,及相应分支地址。 图4 给出了关键字跳转表的格式; 图5 给出了关键字分支流程图。,21,BDATASEGMENT BASE DB 31H ;关键字 DW P1 ;P1入口地址 DB 32H DW P2 DB 38H DW P8 BDATA ENDS LOP: MOV

11、AH, 1 ;读入键值 INT 21H AND AL, 0FH CMP AL, 0 JE LOP MOV BX, OFFSET BASE ;取表首址 NEXT:CMP AL, BX ;关键字转DO JE DO ADD BX, 3 ;修改地址 JMP NEXT DO: JMP WORD PTR BX+1 ,例 将上例用关键字跳转表方式实现分支。,4.6.3、循环程序结构,22,1循环程序的两种结构形式: “先执行后判断” 进入循环后至少要执行一次循环体,再判断循环是否结束。 适合于循环次数固定的程序。 “先判断后执行” 进入循环后,先判断循环结束条件,再决定是否执行循环体,可能循环体一次也不执行

12、。 适合于循环次数不固定的程序。,循环控制方式分: 计数控制 循环次数已知,每次循环计数器都需要进行加或减的调整工作,当达到循环次数时退出循环程序,顺序执行下一条指令。 条件/状态控制 事先不知循环次数,在执行循环时,通过判定某种条件或状态的真假来达到控制循环。或由外界干预,测试得到某种状态,来决定循环与否。,23,24,25,两种循环结构都包括四部分: 初始化 设置循环计数值,设置变量初值。 循环体 循环部分的核心:循环的全部执行指令。 修改参数 修改操作数地址,为下次循环作准备。 循环控制 修改计数器值,判断循环控制条件,决定是否跳出循环。,26,例求内存中100个以内无符号字节数的平均值

13、,结果放在内存中。 解:本程序编写采用“先执行后判断”的结构。流程图如图所示。,27,解:START: MOV DX,DATA MOV DS, DX ; MOV CL, X ; MOV CH, 0; LEA BX, TAB XOR AX, AX ; LP: ADD AL ,BX ADC AH, 0; INC BX LOOPLP DIVX ; MOVY,AL MOVAH,4CH INT21H,28,2多重循环: 多重循环设计方法应注意: 初始控制条件。 循环可以嵌套,并列,但不能交叉。 可以从内循环跳到外循环,不可以从外循环中直接跳进内层循环。 防止死循环。,29,例 存储器数据段从BUF开始存

14、放一个字数组,数组中第一个字中存放该数组的长度N,编制一个程序使此数组中的数据按照从小到大的次序排列。 类同:书:P168 解:采用冒泡排序算法。 从第一个数据开始相邻的数进行比较,若次序不对,两数交换位置。第一遍比较(N1)次后,最大的数已到了数组尾。 第二遍仅需比较(N一2)次。 共比较(N-1)遍就完成了排序,于是共有两重循环。 下图给出了程序流程图。,30,31,解:ADATASEGMENT BUFDW N,15,37,8600,A768H,3412H,1256H,76H ADATA ENDS ASTACKSEGMENT STACK STACK SA DB 100 DUP(?) AST

15、ACK ENDS ACODE SEGMENT ASSUME CS:ACODE, DS:ADATA, SS:ASTACK MAIN PROC FAR START: PUSH DS SUB AX, AX PUSH AX MOV AX , ADTAT MOV DS, AX,32,MOV BX, 0 MOV CX, BUFBX ;设计数器CX,内循环次数 DEC CX L1: MOV DX, CX ;设计数器DX,外循环次数 L2: ADD BX, 2 MOV AX, BUFBX ;取BUFI与BUFI+2 CMP AX, BUF BX+2 ;若BUFI=BUFI+2转 JBE CONT1 XCHG AX, BUFBX+2 ; 否则两数交换 MOV BUFBX, AX CONT1: LOOP L2 ;内循环 MOV CX, DX ;外循环次数CX MOV BX, 0 ;地址返回第一个数据 LOOP L1 ;外循环 RET MAINENDP ACODE ENDS END START,4.6.4、子程序结构,33,1子程序使用: 子程序的概

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

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

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