下面提供了100名同学AS课成的成绩,请编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。
当cx为0再loop在我的程序内陷入了无限循环,t命令单步执行搞懂了错因,设置了当碰到cx为0时直接跳出程序
流程图
assume
cs:code,ds:data
data
segment
db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79,
71, 77, 77, 65, 89, 93
db 69, 96, 72, 98, 60, 78, 69, 68, 80,
65, 91, 64, 90, 90, 64, 90
db 99, 55, 84, 56, 80, 54, 55, 66, 53,
54, 83, 61, 52, 92, 66, 51
db 95, 81, 51, 100, 70, 65, 50, 74, 91,
57, 95, 66, 54, 50, 73, 59
db 78, 80, 92, 78, 89, 78, 99, 100, 82,
92, 59, 71, 74, 81, 93, 74
db 98, 57, 57, 96, 76, 79, 57, 67, 52,
84, 87, 54, 67, 72, 59, 75
db 64, 89, 77, 80
result db 3 dup(0)
data ends
code
segment
start:
mov
ax,data
mov ds,ax
mov si,0
mov cx,100
s0: cmp
cx,0 ;用了loop,为防止有无限循环
je over ;当循环截至时,终止
mov bl,[si]
;将要检查的数放入bl中
cmp bl,90 ;如果>=90,进入s1
jnb s1
cmp bl,60
;比60小,进入s2
jna s2
inc si
;其他的情况,si加1定位到下一位数
add [result+1],1 ;小于90大于等于60的个数加1
loop s0
;检测下一位数
s1: cmp cx,0 ;用了loop,为防止有无限循环
je over
add [result],1 ;>=90的个数加1
inc si ; si加1定位到下一位数
loop s0 ;检测下一位数
s2: cmp cx,0 ;用了loop,为防止有无限循环
je over
add
[result+2],1 ;<60的个数加1
inc si
loop s0 ;检测下一位数
over:
mov ax,4c00h
int 21h
code ends
end
结果: