文档介绍:【本章重点】熟练掌握汇编语言的四种程序设计方法:
顺序程序设计,分支程序设计,循环程序
设计以及子程序设计。
【本章难点】确定算法,合理分配内存工作单元。
第4章    汇编语言程序设计
§ 汇编语言程序设计概述
汇编语言程序设计步骤
使用汇编语言设计一个程序大致上可分为以下几个步骤。
(1) 分析问题,明确要求。解决问题之前,首先要明确所要解决的问题和要达到的目的、技术指标等。
(2) 确定算法。根据实际问题的要求、给出的条件及特点,找出规律性,最后确定所采用的计算公式和计算方法,这就是一般所说的算法。算法是进行程序设计的依据,它决定了程序的正确性和程序的指令。
(3) 画程序流程图,用图解来描述和说明解题步骤。
(4) 分配内存工作单元,确定程序与数据区的存放地址。
(5) 编写源程序。
(6) 程序优化。
(7)程序调试、修改和最后确定源程序。只有通过上机调试并得出正确结果的程序,才能认为是正确的程序。没有调试过的程序,很难保证程序无错误,程序调试是不可缺省的。
§
对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样的程序结构称为顺序结构。
【例4-1】已知X和Y是数据段中的两个无符号字节单元,用程序完成表达式Z=(X2+Y2)/2的计算。
编制程序如下:
DATA SEGMENT
X DB 15
Y DB 34
Z DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ;初始化数据段
MOV AL,X ;X中的内容送AL
MUL AL ;计算X×X
MOV BX,AX ;X×X乘积送BX
MOV AL,Y ;Y中的内容送AL
MUL AL ;计算Y×Y
ADD AX,BX ;计算X2+Y2
SHR AX,1 ;计算(X2+Y2)/2
MOV Z,AX ;结果送Z单元
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START ;汇编结束
【例4-2】从键盘读入两个一位数(按键时保证按下的是数字键),显示它们的积。
先后从键盘上读取两个按键,分别减去30H得到它们对应的数值,然后相乘分解成十位数字与个位数字,转换成ASCⅡ码后依次输出即可。为了输入输出效果的直观,有必要在每次按键后回车换行。
CODE SEGMENT
ASSUME CS:CODE
MAIN: MOV AH,1
INT 21H ;读入第1个数字
MOV BL,AL ;保存在BL中
MOV AH,2
MOV DL,13
INT 21H ;回车
MOV DL,10
INT 21H ;换行
MOV AH,1
INT 21H ;读入第2个数字
SUB AL,30H ;第2个数字转换成十进制数
SUB BL,30H ;第1个数字转换成十进制数
MUL BL ;两个数相乘,积在AX中
MOV BL,10 ;
DIV BL ;积除以10取商送AL,余数在AH中
ADD AX,3030H ;转换成相应的ASCⅡ码
MOV BX,AX ;保存在BX中
MOV AH,2
MOV DL,13
INT 21H ;回车
MOV DL,10
INT 21H ;换行
MOV DL,BL
MOV AH,2
INT 21H ;输出十位数
MOV DL,BH
INT 21H ;输出个位数
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END MAIN ;程序结束
§
分支程序是利用条件转移指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的次序。在程序设计中经常会遇到各种判断和比较,例如“相等”和“不相等”;“正”和“负”;“大于”和“小于”;“满足条件”和“不满足条件”等等,这些判断和比较在程序中都可以组成各种不同的逻辑框,并产生相应的分支程序。
【例4-3】已知AX中放有一个带符号数,编写程序段,计算它的绝对值。
┇
CMP AX,0
JGE LOOP
MOV BX,AX
MOV AX,0
SUB AX,BX
LOOP: ┇
┇