题目:
下面提供了100名同学AS课程的成绩,请编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。
data segment
buf 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
resut db 3 dup(0)
data ends
流程图:主要是分支结构(类似于C语言中的if···else···)和循环结构
代码如下:
assume cs:code,ds:data
data segment
buf 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
resut db 3 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov di,offset resut;获得标号处的偏移地址
mov si,0;数据区起始偏移地址
mov cx,100;循环次数
mov bh,90
mov bl,60
mov ax,0
mov dx,0
s: mov ah,[si];把数据区的数据存入ah
cmp ah,bh
jb n1 ;若ah小于bh(90),则跳转
add al,1;否则al加一
jmp over
n1: cmp ah,bl
jb n2 ;若ah小于bl(60),则跳转
add dh,1;否则,dh加一
jmp over
n2: add dl,1;若ah小于bl(60),dl加一
jmp over
over: inc si
loop s
mov [di],al;把al记录90~100的数的个数存入resut处的第一个数据区
mov [di+1],dh;把dh记录60~89的数的个数存入resut处第二个数据区
mov [di+2],dl;把al记录60以下的数的个数存入resut处第三个数据区
mov ax,4c00h
int 21h
code ends
end start
DOSBox运行结果:90~100:21人 60~89:57人 60以下:22人