
LEA DX,PARAM
MOV AH,9
INT 21H
ENDM
DSEG SEGMENT
MARKS DB100,87,45,67,32,45,66,98,83,90,85,60,59 成绩
MARKED DB0FFH表示成绩数据结束
M59MSG DB' <60 counter:$'
M59 DB5 DUP(0),0DH,0AH,24H
C59 DW0
M60MSG DB' <90 counter:$'
M60 DB5 DUP(0),0DH,0AH,24H
C60 DW0
M90MSG DB'>=90 counter:$'
M90 DB5 DUP(0),0DH,0AH,24H
C90 DW0
BUFFER DB20,20 DUP(0)
CRLF DB0DH,0AH,24H
MSGERR DB'data error',07,0DH,0AH,24H
DSEG ENDS
CSEG SEGMENT
ASSUMECS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA SI,MARKS
ML1: MOV AL, [SI]取一个成绩
INC SI
CMP AL,0FFH 是不是已经处理完所有成绩
JZML2
CMP AL,101 判断一下是不是有大于100的数,这里假设最大成绩是100分
JNC ML_ERR
CMP AL,60 下面进行各成绩段的计数
JCML_L60
CMP AL,90
JCML_L90
INC [C90]
JMP ML1
ML_L60: INC [C59]
JMP ML1
ML_L90: INC [C60]
JMP ML1
ML2: MOV AX,[C59]
LEA SI,M59+5
CALL AX2ASC 将AX中的数转换成ASCII码,以显示
MOV AX,[C60]
LEA SI,M60+5
CALL AX2ASC
MOV AX,[C90]
LEA SI,M90+5
CALL AX2ASC
PRINT M90MSG 显示,如果不希望用宏指令,可以用下列的方式实现
LEA DX,M90MSG
MOV AH,9
INT 21H
PRINT M90
PRINT M60MSG
PRINT M60
PRINT M59MSG
PRINT M59
MOV AX,4C00H返回DOS
INT 21H
ML_ERR: PRINT MSGERR 显示错误信息
MOV AX,4C01H
INT 21H
下面的子程序用于将AX中的数转换成ASCII码
AX2ASC PROC NEAR
ent ax=data si=end of buffer exit si=start of string
PUSH AX
PUSH CX
PUSH DX
MOV CX,10
SUB_L1: MOV DX,0
DIV CX
ADD DL,30H
DEC SI
MOV [SI],DL
ORAX,AX
JNZ SUB_L1
POP DX
POP CX
POP AX
RET
AX2ASC ENDP
CSEG ENDS
END START
以上程序已测试通过。不知道是否满足你的要求
希望能帮到你。
你的程序不完整,以下为完整程序:datarea segment
DATA1 dw 5
DATA2 dw 4
DATA3 dw ?
DATA4 dw ?
datarea ends
prognam segment
main proc far
assume cs:prognam,ds:datarea
start: mov ax,seg datarea
mov ds,ax
mov es,ax
mov ax,data1
mov bx,data2
add ax,bx
mov DATA3,ax
mov ax,DATA1
sub ax,bx
mov DATA4,ax
mov ah,4ch
int 21h
ret
main endp
prognam ends
end start
汇编语言程序设计的基本步骤了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。一般来说,编制一个汇编语言程序的步骤如下:(1) 分析题意,确定算法或算法思想。算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。(2) 根据算法画出流程图,简单的情况也可不画。画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。(3) 分配存储空间和工作单元,合理地使用寄存器。分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。(4) 根据流程图编写程序。这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。(5) 上机调试运行程序。通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种 *** 作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的 *** 作。它有一个入口,两个出口,如下图(a)所示。
连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。
注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的 *** 作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。
处理框反映做些什么样的 *** 作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。
输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)