第5章汇编语言程序设计 5.1顺序结构程序设计 5.2分支结构程序设计 5.3循环结构程序设计 5.4子程序设计 5.5模块化程序设计 5.6常用D0s中断调用
第5章 汇编语言程序设计 5.1 顺序结构程序设计 5.2分支结构程序设计 5.3循环结构程序设计 5.4子程序设计 5.5模块化程序设计 5.6常用Dos中断调用 1
汇编语言程序设计的基本过程,可以分为以下几步: 1.分析问题,明确要求。 2.建立数学模型。 3.确定算法。 4.画出程序的流程图。 5.编写程序,上机调试。 6.整理资料,投入使用。 汇编语言程序设计,应采用模块化和结构化的设计方法。 888 2
汇编语言程序设计的基本过程,可以分为以下几步: 1.分析问题,明确要求。 2.建立数学模型 。 3.确定算法。 4.画出程序的流程图 。 5.编写程序,上机调试。 6.整理资料,投入使用 。 汇编语言程序设计 汇编语言程序设计,应采用模块化和结构化的设 应采用模块化和结构化的设计方法。 2
5.1顺序结构程序设计 顺序结构程序是指完全按先后顺序逐条执行指令序列的程序,● 既不跳转也不循环,从头到尾一条一条执行语句。单独的 顺序结构程序完成的功能相对简单,很多情况下都是顺序、 分支、循环、子程序结构相结合,这样的程序可以具有更 大的功能。如图5.1所示。 开始→语句1→ ..>语句n>结束 见课本图5.1顺序结构程序流程图
5.1 顺序结构程序设计 顺序结构程序是指完全按先后顺序逐条执行指令序列的程序, 既不跳转也不循环,从头到尾一条一条执行语句。单独的 顺序结构程序完成的功能相对简单,很多情况下都是顺序 、 分支、循环、子程序结构相结合,这样的程序可以具有更 大的功能。如图5.1所示。 开始 Æ语句 1 Æ ….. Æ语句 n Æ结束 见课本图5.1 顺序结构程序流程图 3
例题5.1 键盘输入任一按键,用十进制输出相应按键的ASCII值 分析:问题的求解并不复杂,首先从键盘接收一个 按键,键的ASCII值一定在0到255之间,最多是十 进制的3位数。作为整数是不能直接输出的,应先 把这个值除以100,得到商是百位数字,再把刚才 的余数除以10,商是十位数字,余数是个位数字, 把这3个数字分别加上30H,则转换成相应的ASCII 码,在回车换行后依次输出
例题5.1 键盘输入任一按键,用十进制输出相应按键的ASCII值。 分析:问题的求解并不复杂,首先从键盘接收一个 按键,键的ASCII值一定在0到255之间,最多是十 进制的3位数。作为整数是不能直接输出的 作为整数是不能直接输出的,应先 把这个值除以100,得到商是百位数字,再把刚才 的余数除以10,商是十位数字,余数是个位数字 余数是个位数字, 把这3个数字分别加上30H,则转换成相应的ASCII 码,在回车换行后依次输出。 4
CODE SEGMENT ADD AH,30H ASSUME CS:CODE MOV BX,AX;AX存放十位 START:MOV AH,1 数字和个位数字 NT21H;读入一个按键 MOV AH,2 MOV AH,0;AX保存按键的 MOV DL,13 ASC INT 21H ;输出回车 MOV BL,100 MOV DL,10 DVBL;ASCI除以100, INT 21H ;输出换行 取百位数字 MOV DL,CL MOV CL,AL;CL存放百位 INT 21H 数字 ;输出百位数字 MOV DL,BL ADD CL,30H;CL存放百位 数字的ASCⅡ INT 21H ;输出十位数字 MOV AL,AH MOV BL,BH MOV AH,0 INT 21H ;输出个位数字 MOV BL,10 MOV AH,4CH DIV BL ;ASCⅡ除以10, INT 21H 取十位数字 CODE ENDS ADD AL,30H END START ●
CODE SEGMENT ADD AH, 30H ASSUME CS:CODE START: MOV AH, 1 INT 21H ;读入 一个按键 , MOV BX, AX ;AX存放十位 数字和个位数字 MOV AH, 2 INT 21H ;读入 个按键 MOV AH, 0 ;AX保存按键的 ASCII MOV BL 100 , MOV DL, 13 INT 21H ;输出回车 MOV BL, 100 MOV DL 10 DIV BL ;ASCII除以100, 取百位数字 MOV CL AL ;CL存放百位 MOV DL, 10 INT 21H ;输出换行 MOV DL, CL MOV CL, AL ;CL存放百位 INT 21H ;输出百位数字 数字 ADD CL, 30H ;CL存放百位 数字的 ASCII INT 21H ;输出百位数字 MOV DL, BL INT 21H ;输出十位数字 OBB 数字的MOV AL, AH MOV AH, 0 MOV BL 10 M OV BL, B H INT 21H ;输出个位数字 MOV AH, 4CH MOV BL, 10 DIV BL ;ASCII除以10, 取十位数字 ADD AL 30H INT 21H CODE ENDS ADD AL, 30H END START 5
●● 例5.2编写程序,计算Z=((W-X)/10*Y)的平方值,R为相除所得余 数,其中W,X,Y均为八位有符号二进制数。 ● 分析:这是一个简单的算术运算问题,编程之前首先根据运算对 象分配存储单元,然后针对运算对象选择操作指令。注意Z变量的 数据类型。 DATA SEGMENT MOV AL,X CBW W DB-128 MOV BX,AX X DB 127 MOV AL,W Y DB-100 CBW SUB AX,BX R DBO MOV BL,10 Z DD0 IDIV BL DATA ENDS MOVR,AH IMUL Y CODE SEGMENT IMUL AX ASSUME MOV WORD PTRZ,AX CS:CODEDS:DATA.SS:STACK MOV WORD PTR Z+2,DX BEGIN:MOV AX,DATA MOV AH,4CH INT 21H MOV DS,AX CODE ENDS ●● END BEGIN
例5.2 编写程序,计算Z=((W-X)/10*Y)的平方值,R为相除所得余 数,其中W,X,Y均为八位有符号二进制数 均为八位有符号二进制数 。 分析:这是一个简单的算术运算问题,编程之前首先根据运算对 象分配存储单元,然后针对运算对象选择操作指令。注意Z变量的 数据类型 。 DATA SEGMENT W DB -128 MOV AL,X CBW MOV BX AX W DB 128 X DB 127 Y DB -100 MOV BX,AX MOV AL,W CBW SUB AX BX R DB 0 Z DD 0 DATA ENDS SUB AX,BX MOV BL,10 IDIV BL DATA ENDS MOV R AH CODE SEGMENT ASSUME MOV R,AH IMUL Y IMUL AX MOV WORD PTR Z,AX CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX,DATA MOV WORD PTR Z,AX MOV WORD PTR Z+2,DX MOV AH,4CH INT 21H MOV DS, AX CODE ENDS END BEGIN 6
5.2分支结构程序设计 ●● 在程序中,往往需要对不同的情况或条件做出不同的处理,这样 的程序就不再是简单的顺序结构,而要采用分支结构。分支程 序结构可以有两种基本形式,即二路分支结构和多路分支结构, 如图5.2所示。 条 件 条 古- (a)二路分支结构 (b)多路分支结构 图5.2分支结构程序流程图
5.2 分支结构程序设计 在程序中,往往需要对不同的情况或条件做出不同的处理,这样 的程序就不再是简单的顺序结构,而要采用分支结构。分支程 序结构可以有两种基本形式,即二路分支结构和多路分支结构, 如图5.2所示。 条件 条件 …… (a)二路分支结构 (b)多路分支结构 图5.2 分支结构程序流程图 7
由图可知,这两种结构都只有一个入口和一个出口。。 不论哪一种形式,它们的共同特点是:运行方向 是向前的,在某一种确定的条件下,只能执行多 个分支中的一个分支。 分支程序常常利用比较指令和条件转移指令来实现。 80
由图可知,这两种结构都只有一个入口和一个出口。 不论哪一种形式,它们的共同特点是:运行方向 是向前的,在某一种确定的条件下,只能执行多 个分支中的一个分支。 分支程序常常利用比较指令和条件转移指令来实现。 8
5.2.1二路分支 例题5.3从键盘输入一位数字,判断其奇偶性, 并在屏幕输出一个标志,若为奇数,则输出1,否 则输出0。 分析:判断键入的一位数字的ASCII码的最低位是 否为1,若为1,则是奇数,否则是偶数。输入采 用D0S中断的1号子功能调用,键入的一位数字的 ASCII码放进AL中,此时只需将最低位移入状态寄 存器的CF标志位,然后对CF进行判断,即可确定 输入数字的奇偶性,输出采用D0S中断的2号子功 能调用。 889 9
5.2.1二路分支 例题5.3 从键盘输入一位数字 从键盘输入一位数字,判断其奇偶性, 并在屏幕输出一个标志,若为奇数,则输出1,否 则输出0。 分析:判断键入的一位数字的ASCII码的最低位是 否为1,若为1,则是奇数,否则是偶数。输入采 用DOS中断的1号子功能调用,键入的一位数字的 ASCII码放进AL中,此时只需将最低位移入状态寄 此时只需将最低位移入状态寄 存器的CF标志位,然后对CF进行判断,即可确定 输入数字的奇偶性 输入数字的奇偶性,输出采用DOS中断的2号子功 能调用。 9
程序如下 JMP DISP CODE SEGMENT EVN:MOV AL,30H ASSUME CS:CODE ;偶数,AL←一0的ASCI码 BEGIN:MOV AH,01H MOV BL,AL ;调用DOS中断的1号子功能 DISP:MOV AH,O2H: INT 21H 调用DOS中断的2号子功能,输出字符 ;AL←-键入数字ASCII MOV DL,OAH;输出换行 CLC INT 21H ;CF清O MOV DL,ODH;输出回车 RCR AL,1 INT 21H ● ;AL最低位移入CF MOV DL,BL;输出标志字符 JNC EVN INT 21H ;根据CF的状态,判断输入数字的 MOV AH,4CH;返回DOS 奇偶性 INT 21H MOV AL,31H CODE ENDS ;奇数,AL<-1的ASCⅡ码 END BEGIN 10
JMP DISP 程序如下 CODE SEGMENT ASSUME CS:CODE JMP DISP EVN:MOV AL, 30H ;偶数,AL←0的ASCII码 BEGIN:MOV AH, 01H ;调 用DOS中断的1号子功能 INT 21H MOV BL, AL DISP:MOV AH, O2H : INT 21H 调用DOS中断的2号子功能,输出字符 ;AL←键入数字ASCII CLC 调用DOS中断的2号子功能,输出字符 MOV DL, 0AH ;输出换行 INT 21H ;CF清0 输出回车 RCR AL, 1 ;AL最低位移入CF MOV DL, 0DH ;输出回车 INT 21H ;AL最低位移入CF MOV DL, BL ;输出标志字符 JNC EVN ;根据CF的状态,判断输入数字的 奇偶性 INT 21H MOV AH, 4CH ;返回DOS INT 21H MOV AL, 31H ;奇数,AL←1的ASCII码 INT 21H CODE ENDS END BEGIN 10