求10个学生成绩中的最高成绩,结果存入MAX字节单元中,已知成绩为字节型。
正确代码 可以跑通
DATA SEGMENT
A DB 98
B DB 96
C DB 90
D DB 89
E DB 88
F DB 91
G DB 92
H DB 88
M DB 96
N DB 99
MAX DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET B
MOV AL, A
MOV CX, 09H
COMPARE:
CMP AL, [SI]
JL DONE
INC SI
LOOP COMPARE
MOV MAX, AL
MOV AH, 4CH
INT 21H
DONE: MOV AL, [SI]
INC SI
JMP COMPARE
CODE ENDS
END START
运行结果
心路历程
分析:10个学生的成绩如何输入,自己给几个吧,直接在数据段中给出,1号命令是接一个字符,2号命令是把它显示,10号命令是接收一个字符串,9号命令是把它显示;貌似可以用10号命令试一试,但接收了以后怎么一个个遍历,存放的位置又在哪,这些都需要考虑,汇编程序这样好像不是那么好实现;
成绩为字节型,那就是DB了,8位
开始写源程序 结果... error 。。。
DATA SEGMENT
A DB 98
B DB 96
C DB 90
D DB 89
E DB 88
F DB 91
G DB 92
H DB 88
I DB 96
H DB 100
MAX DB ?
I DB 1
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV MAX, A
MOV CX, 9
COMPARE: CMP MAX, [A+I]
JGE DONE
MOV MAX, [A+I]
INC I
LOOP COMPARE
MOV AH, 4CH
INT 21H
CODE ENDS
END START
总之就是各种报错,一路修修改改成了最后的那个正确代码
需要关注的点
地址遍历最好用[SI],SI是源变址寄存器,给它赋初值然后不断调整就好
赋初值
MOV SI, OFFSET B
调整指针,依次遍历十个元素
INC SI