注册 登录
编程论坛 汇编论坛

[求助]程序输出不如意

s40860 发布于 2006-11-29 18:52, 576 次点击

题目:建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i保存学号为i+1的学生的成绩。要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i有内容是学号为i+1学生的名次。(提示:一个学生的名次等于成绩高于该学生的人数加1)

我的程序:
DSEG SEGMENT
grade dw 88,75,95,63,98,78,87,78,90,60
rank dw 10 dup(?)
stop db '$'
DSEG ENDS
CSEG SEGMENT
main proc far
assume cs:CSEG, ds:DSEG
start: mov ax, DSEG
mov ds, ax
mov di,10
mov bx,0
loop:
mov si,offset grade
mov dx,1
mov cx,10
mov ax,grade[bx]
next:
cmp ax,[si]
jge no_count
inc dx
no_count:
add si,2
loop next

add dx,30h
mov rank[bx],dx

add bx,2
cmp bx,20
jne loop

lea dx,rank
mov ah,09h
int 21h

mov ax, 4c00h
int 21h
main endp
CSEG ENDS
end start

结果:4 8 2 9 1 6 5 6 3 :

这个程序我的希望是输出1-10的,但结果中没有10这个数字,反而有一个“:”冒号,不知道我的程序哪里设得不对呢?请高手帮我改动一下啦,谢谢大家了。

5 回复
#2
菜鸟上路2006-11-29 20:01
这个程序能运行?!
#3
s408602006-11-29 22:25

可以运行的,就是输出的结果不理想而已,但我不会改呀。

#4
菜鸟上路2006-11-30 12:33
loop是关键字啊,不能做标号
#5
srl99732006-11-30 14:34

DSEG SEGMENT
grade dw 88,75,95,63,98,78,87,78,90,60
rank dw 10 dup(?)
stop db '$'
DSEG ENDS
CSEG SEGMENT
main proc far
assume cs:CSEG, ds:DSEG
start: mov ax, DSEG
mov ds, ax
mov di,10
mov bx,0
loop1:
mov si,offset grade
mov dx,1
mov cx,10
mov ax,grade[bx]
next:
cmp ax,[si]
jge no_count
inc dx
no_count:
add si,2
loop next

cmp dx,10
jl ll
mov ax,dx
mov dl,10
div dl
mov dx,ax
add dh,30h
ll: add dx,30h
mov rank[bx],dx

add bx,2
cmp bx,20
jne loop1

lea dx,rank
mov ah,09h
int 21h

mov ax, 4c00h
int 21h
main endp
CSEG ENDS

输出为:4 8 2 9 1 6 5 6 3 10

#6
s408602006-12-01 20:21

谢谢楼上的兄弟啦!!!!

1