
1、分析问题,抽象出描述问题的数据模型
2、确定问题的算法思想
3、画出流程图或结构图
4、分配存储器和工作单元(寄存器)
5、逐条编写程序
6、静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。
7、分析问题 根据条件、特点、规律 →数学模型 本例分数已给定为0~200之间的整数集合(考虑加试分) ,记为{S},找max{S}(注: 简单问题不一定写数学模型) 。
PRINT MACRO PARAMLEA 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
以上程序已测试通过。不知道是否满足你的要求
希望能帮到你。
首先你要有个总体的逻辑框架,然后写出你大致的程序框图,在在每一个环节上进行思考理解,理清头绪,把整个框图都完全理解明白以后,就开始进行写程序了,注意一些语句的用法哦,写完之后烧到开发板上,然后对程序进行调试,有错误就仔细的修改,调试应该说是最麻烦的工作,所以不要着急,慢慢来,等到你成功的时候你就有种说不出来的高兴了,祝你好运。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)