《微机原理与接口技术 第6章2》由会员分享,可在线阅读,更多相关《微机原理与接口技术 第6章2(46页珍藏版)》请在金锄头文库上搜索。
1、第6章 汇编语言程序设计,用汇编语言编程属结构化程序设计。 需按照结构化的思想来进行汇编程序的设计,分析题意,确定算法根据算法画出程序框图根据框图编写程序上机调试程序执行程序,按照自上而下的设计方法,设计一个汇编程序的步骤:,顺序程序 分支程序 循环程序,从结构上来讲,一般的汇编程序可分为:,Eg:从键盘输入一个字符并存储到字节变量BUF单元中.,分析: 用DOS功能调用完成键入,输入 的字符保存在AL寄存器中 将AL中的内容存到定义在数据 段的变量BUF所指单元中,顺序程序设计,.486DATA SEGMENT USE16 BUF DB ?DATA ENDS,源程序清单:,CODESEGME
2、NT USE16 ASSUME CS : CODE , DS : DATABEG:MOV AX , DATAMOV DS , AXMOV AH , 1INT 21H ;AL=键入字符的MOV BUF , AL ASIIC码MOV AH , 4CHINT 21HCODEENDSEND BEG,分支程序设计,转移指令可用来实现分支程序设计,分支程序分三种: 简单分支 复合分支 多分支,简单分支 即两路分支,该分支程序结构为:,Eg: 将BX寄存器的内容以二进制数格式显在屏幕上,BX=1110010011100110B,简单分支, 486CODE SEGMENT USE16 ASSUME CS:CO
3、DE BEG: MOV BX,5678H MOV CX,16 LAST: MOV AL,0 ROL BX,1 JNC NEXT MOV AL,1 NEXT: MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG,源程序清单:,复合分支判断的条件是复合条件,称复合判断 复合分支程序结构为:,Eg:某科室9人,统计月收入在800900间的人数,并用十进制数显示,复合分支,分析:月收入是无符号数,对一批数处理应该用间址。,多分支判断条件后有多个出口,判断一次只能选择一个分支。 多分支程序结构为:,1,例.多分支段内转移要求
4、:键入0,转P0程序段 键入1,转P1程序段 键入9,转P9程序段,思路:用比较指令配合直接转移指令实现 CMP 键入字符,0 JE P0 CMP 键入字符,1 JE P1 ,用转移地址表配合间接转移指令实现,多分支, 486DATA SEGMENT USE16TAB DW P0,P1,P9 ;汇编后自动装入相应的偏移地址MESG DB 0DH,0AH,strike 09:$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AXAGA: MOV AH,9 MOV DX,OFFSET MESG IN
5、T 21H MOV AH,1 INT 21H CMP AL,0 JC AGA,CMP AL,9JA AGASUB AL,30HMOVZX BX,ALADD BX,BX;2BXBXMOV SI,OFFSET TABJMP BX+SI;DS:BX+SI IPP0: P1: P9: CODE ENDS END BEG,源程序清单:,循环程序设计,循环程序的组成: 循环准备 循环体 循环控制,1. 循环程序的结构,Eg: 假设从BUF单元开始为一个 ASCII码字符串,找出其中的最大数送屏幕显示。,循环程序设计,思路:ASC码数为无符号数,无符号数的最小数为0, 486 DATA SEGMENT US
6、E16 BUF DB QWERTYUIOP123 COUNT EQU $ -BUF;统计串长度 MAX DB MAX=,?,0DH,0AH,$ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;无符号最小数 0 AL LEA BX,BUF ;串首址偏移量BX MOV CX,COUNT ;串长度CX,LAST: CMP BX,AL;比较 JC NEXT MOV AL,BX;大数ALNEXT: INC BX LOOP LAST ;循环计数 MOV MAX+4,AL ;最大
7、数MAX+4 单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;显示结果 MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BEG,源程序清单1:, 486DATA SEGMENT USE16BUF DB QWERTYUIOP123FLAG DB 1 ;设置串结束标志MAX DB MAX=,?,0DH,0AH,$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;无符号最小数 0 AL LEA BX,BUF ;串首址
8、偏移量BXLAST: CMP BYTE PTR BX, -1 ;BX=串结束标志 ?,JE DISP ;是,转 CMP BX,AL JC NEXT MOV AL,BX ;大数ALNEXT: INC BX JMP LASTDISP: MOV MAX+4,AL ;最大数MAX+4 单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;显示结果 MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BEG,源程序清单2:,汇编程序设计举例,代 码 转 换,代码转换,常见的代码转换有: 二进制数显示 二进制数十进制数显示 二进制数十六进制数显示 BCD
9、码数二进制数,代码转换,A,Please Enter:,Please Enter:,9,=00001001B,代码转换,思路:键盘缓冲区中是键入字符的ASC码。 09的ASC码为30H39H。二进制数每一位代码的判断:,本程序采用两种格式设计源程序:一种是EXE文件编程格式,另一种是COM文件编程格式。,程序框图:,. 486DATA SEGMENT USE16MESG1 DB Please Enter ! ,0DH,0AH,$MESG2 DB -Error ! $ DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DA
10、TA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;显示操作提示 MOV AH,1 INT 21H ;等待键入 CMP AL,3AH JNC ERROR ;9转 CMP AL,30H,EXE格式程序清单,JC ERROR ;0转 SUB AL,30H MOV BL,AL ;BL=09 的二进制数 MOV AH,2 MOV DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXITERROR: MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;显示错误信息EXIT: MOV AH,4CH INT 21H,