在内存中以BUF单元开始缓冲区中连续存放着10个学生的分数,试编制程序统计其中90一100分、80一89分、60一79分及60分以下者各有多少人,并把结果分别存放在S9、S8、S7和S6中。
声明:本人使用Masm for Windows 2015编译
代码段如下:
DATAS SEGMENT
;此处输入数据段代码
BUF DB 98,95,81,87,75,77,63,61,59,45
S9 DB 0
S8 DB 0
S7 DB 0
S6 DB 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV SI,0
AGAIN:
MOV AL,BUF[SI]
.IF AL>=90
JMP JL1
.ELSEIF AL>=80
JMP JL2
.ELSEIF AL>=60
JMP JL3
.ELSE
JMP JL4
.ENDIF
JL1:
INC S9
JMP EXIT
JL2:
INC S8
JMP EXIT
JL3:
INC S7
JMP EXIT
JL4:
INC S6
JMP EXIT
EXIT:
INC SI
CMP SI,10
JL AGAIN
MOV AH,2
MOV DL,S9
ADD DL,30H
INT 21H
MOV AH,2
MOV DL,20H
INT 21H;空格
MOV AH,2
MOV DL,S8
ADD DL,30H
INT 21H
MOV AH,2
MOV DL,20H
INT 21H;空格
MOV AH,2
MOV DL,S7
ADD DL,30H
INT 21H
MOV AH,2
MOV DL,20H
INT 21H;空格
MOV AH,2
MOV DL,S6
ADD DL,30H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
代码段结束
运行结果截屏如下
注意:
本人在写代码的过程中,有错误如下
1.BUF DW …
MOV AX,BUF[SI]
…
INC SI
其实也不能说错误,但是当BUF定义为字型,它占内存两个单元,而SI自增1,就只能一个一个读数,比如98,它会读9,8
所以我将BUF重新定义为字节型,同时修改将BUF[SI]传给AL,而不是AX(AX=AL+AH)
另:应该可以将INC SI修改为ADD SI,2
但是我没有运行过,有兴趣可以自己尝试一下
所以,写代码的时候,不要粗心大意哦