微机原理与接口技术第6章2共47页文档

发布于:2021-07-31 09:10:37

按照自上而下的设计方法,设计一个汇编程序的步骤: ? 分析题意,确定算法 ? 根据算法画出程序框图 ? 根据框图编写程序 ? 上机调试程序 ? 执行程序 从结构上来讲,一般的汇编程序可分为: ? 顺序程序 ? 分支程序 ? 循环程序 顺序程序设计 Eg:从键盘输入一个字符并存储到字节变 量BUF单元中. 分析: 用DOS功能调用完成键入,输入 的字符保存在AL寄存器中 将AL中的内容存到定义在数据 段的变量BUF所指单元中 源程序清单: DATA DATA CODE BEG: CODE .486 SEGMENT USE16 BUF DB ? ENDS SEGMENT USE16 ASSUME CS : CODE , DS : DATA MOV AX , DATA MOV DS , AX MOV AH , 1 INT 21H ;AL=键入字符的 MOV BUF , AL ASIIC码 MOV AH , 4CH INT 21H ENDS END BEG 分支程序设计 转移指令可用来实现分支程序设计 分支程序分三种: ? 简单分支 ? 复合分支 ? 多分支 简单分支 即两路分支,该分支程序结构为: Y 条件满足否? N 程序段1 程序段2 简单分支 Eg: 将BX寄存器的内容以二进制数格式显在 屏幕上 BX=1110010011100110B CF RCL CF ROL 0 CF SAL 数→BX,16 →CX ‘0’→AL BX左移一位 0 C标=? 1 ‘1’→AL 调BIOS.0EH CX-1→CX N CX=0 Y 返DOS 源程序清单: ·486 CODE SEGMENT USE16 ASSUME CS:CODE BEG: MOV BX,5678H MOV CX,16 LAST: MOV AL,’0’ ROL BX,1 JNC NEXT ADC AL,0 MOV AL,’1’ NEXT: MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG 复合分支 判断的条件是复合条件,称复合判断 复合分支程序结构为: Y 程序段1 条件1和条件2... 满足否? N 程序段2 复合分支 Eg:某科室9人,统计月收入在800~900 间的人数,并用十进制数显示 分析:月收入是无符号数,对一批数处理应该用间址。 数轴: · N1 (800) · N2 (900) 多分支 判断条件后有多个出口,判断一次只能选择 一个分支。 多分支程序结构为: 条件属哪种 1 程序段1 …... 情况? n+m n …... 程序段n+m 程序段n 多分支 例.多分支段内转移 要求:键入0,转P0程序段 键入1,转P1程序段 …… 键入9,转P9程序段 思路:①用比较指令配合直接转移指令实现 CMP 键入字符,‘0’ JE P0 CMP 键入字符,‘1’ JE P1 …… ②用转移地址表配合间接转移指令实现 ·486 DATA SEGMENT USE16 TAB DW P0,P1,…,P9 ;汇编后自动装入相应的偏移地址 MESG DB 0DH,0AH,’strike 0~9:$’ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX AGA: MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,1 INT 21H CMP AL,’0’ JC AGA 源程序清单: CMP AL,’9’ JA AGA SUB AL,30H MOVZX BX,AL ADD BX,BX;2×BX→BX MOV SI,OFFSET TAB JMP [BX+SI] ;DS:[BX+SI] →IP P0: … P1: … …… P9: … CODE ENDS END BEG 或:MOV BX,[BX+SI] JMP BX ;BX →IP 循环程序设计 循环程序的组成: ? 循环准备 ? 循环体 ? 循环控制 1. 循环程序的结构 预置循环次数 其他准备工作 循环体 循环减1计数 (a) N 结果为0? 单 循 Y 环 退出循环 结 构 预置外循环次数 其他准备工作 预置内循环次数 其他准备工作 循环体 内循环减1计数 N 结果为0? (b) Y 双 外循环减1计数 循 N 结果为0? 环 结 Y 退出循环 构 循环程序设计 Eg: 假设从BUF单 元开始为一个 ASCII码字符串,找 出其中的最大数送 屏幕显示。 思路:ASCⅡ码数为无符号 数,无符号数的最小数为0 数据区首址→DS:BX 无符号最小数→AL 数据个数→CX [BX]>=AL? N Y [BX] → AL BX+1 → BX CX-1 → CX N CX=0? Y 显示结果 返回DOS 源程序清单1: ·486 DATA SEGMENT USE16 LAST: CMP [BX],AL;比较 BUF DB 'QWERTYUIOP123' COUNT EQU $ -BUF;统计串长度 JC NEXT MOV AL,[BX];大数→AL MAX DB 'MAX=',?,0DH,0AH,'$' NEXT: INC BX DATA ENDS LOOP LAST ;循环计数 CODE SEGMENT USE16 MOV MAX+4,AL ASSUME CS:CODE,DS:DATA ;最大数→MAX+4 单元 BEG: MOV AX,DATA MOV AH,9 MOV DS,AX MOV AL,0 ;无符号最小数 0 →AL

相关推荐

最新更新

猜你喜欢