汇编高手来 学生成绩排序。哪里有错? 全部分了。大家帮忙,初学啊

Princezhouf 2008-11-13 07:34:10
data segment
buf db 10, ?, 10 dup('$')
input1 db 'Please input the student name:$'
input2 db 'Please input the score(0-100):$'
name1 db 100 dup(?)
score1 dw 10 dup(0)
data ends
stack segment para 'stack' stack
db 200 dup( 0 )
stack ends
code segment
assume cs:code, ds:data, ss:stack
begin:
mov ax, data
mov ds, ax
mov es, ax
mov ax, stack
mov ss, ax
mov cx, 10
mov bx, 0
input:
lea dx,input1 ;输出input1
mov ah,09h
int 21h

lea dx, buf ;输入buf
mov ah, 0ah
int 21h

mov dl, 13
mov ah, 2
int 21h

mov dl, 10
int 21h

lea dx, buf
add dx, 2
mov ah, 9
int 21h

mov dl, 13
mov ah, 2
int 21h

mov dl, 10
int 21h

push cx ;存储姓名
push ds
pop es
cld
mov cl, buf[1]
xor ch, ch
lea si, buf[2]
lea di, name1
rep movsb
pop cx
push cx
cld
push ds
pop es
lea di,buf
add di,2
mov cx,10
mov al,'$'
rep stosb
pop cx

lea dx,input2 ;输出input2
mov ah,09h
int 21h

lea dx, buf ;输入buf
mov ah, 0ah
int 21h

push si ;存储buf
push cx
lea si,buf
add si,2
mov cl,buf[1]
cld
xor dx, dx
lp:
mov ax, 10
mul dx
mov dx, ax
lodsb
and ax, 0FH
add dx, ax
loop lp
pop cx
pop si

mov score1[bx],dx
inc bx

mov dl, 13
mov ah, 2
int 21h

mov dl, 10
int 21h

lea dx, buf
add dx, 2
mov ah, 9
int 21h


mov dl, 13
mov ah, 2
int 21h

mov dl, 10
int 21h

push cx
cld
push ds
pop es
lea di,buf
add di,2
mov cx,10
mov al,'$'
rep stosb
pop cx

dec cx
cmp cx,0
je compare
jmp input

compare:
mov cx,10
dec cx
compare1:
mov di,cx
mov bx,0 ;比较score,并输出
compare2:
mov ax,score1[bx]
cmp ax,score1[bx+2]
jge continue
xchg ax,score1[bx+2]
mov score1[bx],ax
continue:
add bx,2
loop compare2
mov cx,di
loop compare1
mov di,9
Print: ;打印排好的score
int 1
xor ax,ax
mov al,score1[di]
xor cx,cx
DoDiv:
mov bl,10
div bl
push ax
inc cx
xor ah,ah
cmp al,0
jnz DoDiv
DoPrt:
pop dx
xchg dh,dl
add dl,30h
mov ah,2
int 21h
loop DoPrt
cmp di,-1
jne ddd
ddd:
dec di
jmp print

Exit: mov ah, 4ch
int 21h
code ends
end begin
...全文
244 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyzzk8610 2010-11-24
  • 打赏
  • 举报
回复
版主能把你最后调试好的程序发给我吗 小弟就靠这个程序结课呢,zzk_zzk_zzk@126.com
hxp297065853 2010-01-10
  • 打赏
  • 举报
回复
学习下
cnzdgs 2008-11-14
  • 打赏
  • 举报
回复
你调试程序,在各个部分完成后查看数据,看处理是否正确。先找出错误的部分,然后再对出错的部分单步执行来分析。
我是想让你掌握查找和解决问题的方法。
cnzdgs 2008-11-14
  • 打赏
  • 举报
回复
排序部分是把score1中的10个WORD从小到大排序,没有错。
Princezhouf 2008-11-14
  • 打赏
  • 举报
回复
难道是我的输出错了?
可是没发现啊。
cmzdgs大哥,再次呼叫你!
Princezhouf 2008-11-14
  • 打赏
  • 举报
回复
谢谢cnzdgs大哥。我一直不太会调试。学学去
hmilyzy 2008-11-14
  • 打赏
  • 举报
回复
学习了!
Princezhouf 2008-11-13
  • 打赏
  • 举报
回复
cnzdgs,帮忙啊
Princezhouf 2008-11-13
  • 打赏
  • 举报
回复
好像是排序出的问题。排序排出错了。
cnzdgs 2008-11-13
  • 打赏
  • 举报
回复
哪部分有错?是前面的处理还是最后的输出?
Princezhouf 2008-11-13
  • 打赏
  • 举报
回复
看了,知道哪里错了。但是为什么输出的不是正确的结果?!
高手帮我看看吧
Joey_cc 2008-11-13
  • 打赏
  • 举报
回复
先把循环次数减到1,看是不是还死循环。如果是的话单步跟踪汇编语句,很容易就能找出问题
Princezhouf 2008-11-13
  • 打赏
  • 举报
回复
无穷的循环。
无法得到正常的排序结果。
哎。
cnzdgs 2008-11-13
  • 打赏
  • 举报
回复
运行后具体是什么情况?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧