读书人

汇编菜鸟的初级有关问题求好心人指点

发布时间: 2012-02-16 21:30:36 作者: rapoo

汇编初学者的初级问题,求好心人指点
datarea segment
grade dw 88,75,95,63,98,78,87,73,90,60
rank dw 10 dup(?)

[1]//view dw 10 dup(?)

datarea ends
prognam segment
main proc far
assume cs : prognam,ds :datarea
start:
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
mov di,10
mov bx,0
loop1:
mov ax,grade[bx]
mov dx,0
mov cx,10
lea si,grade
next:
cmp ax,[si]
jg no_count
inc dx
no_count:
add si,2
loop next
mov rank[bx],dx
add bx,2
[2]//mov si,dx
[3]//mov view[si],ax
dec di
jne loop1
[4]//mov di,10
[5] //GO:
[6]//mov si,11
[7]//sub si,di
[8]//mov ax,view[si]
[9]//mov bl,10
[10]//div bl
[11]//mov dh,al
[12]//add dh,30h
[13]//mov dl,dh
[14]//mov ah,02h
[15]//int 21h
[16]//mov dh,ah
[17]//add dh,30h
[18]//mov dl,dh
[19]//mov ah,02h
[20]//int 21h
[21]//dec di
[22]//loopnz GO
ret
main endp
prognam ends
end start
高手帮忙啊``我很不通。。这原本是一个按已给成绩得出每个成绩的排名的程序(前没加//部分为原来的程序),然后要在原来程序的基础上增加一个功能,就是让它按排名先后顺序依次输出成绩。。然后那些前有//的代码是我自己加的,我的意思是想另外用一个数组利用rank数组里的内容来按顺序存放已经排好序的成绩,然后再从这个数组依次输出。。但是最后运行貌似是溢出,我是初学这,编程很差,我知道肯定是我写的那些代码的问题,但是不知道怎么错了。。。求指点啊~!!!

[解决办法]
用debug调试一下,看看做除法的操作的时候错误在哪里。也许你是否参考一下做16位除法的时候需要注意什么。
[解决办法]

Assembly code
; 带注释的行是有修改的,修改的理由……自己看看吧datarea segment grade dw 88,75,95,63,98,78,87,73,90,60 rank dw 10 dup(?) view dw 10 dup(?)datarea endsprognam segment main proc far assume cs : prognam,ds :datareastart:  push ds  sub ax,ax  push ax  mov ax,datarea  mov ds,ax  mov di,10  mov bx,0loop1:  mov ax,grade[bx]  mov dx,0  mov cx,10  lea si,gradenext:  cmp ax,[si]  jg no_count  add  dx, 2    ;* inc dxno_count:  add si,2  loop next  mov rank[bx],dx  add bx,2  mov si,dx  mov view[si],ax  dec di  jne loop1  mov di,10  mov cx, 10    ;*+GO:  mov si,11  sub si,di  shl si, 1    ;*+  mov ax,view[si]  mov bl,10  div bl     mov dh,al  push ax    ;*+  add dh,30h  mov dl,dh  mov ah,02h  int 21h  pop  ax    ;*+  mov dh,ah  add dh,30h  mov dl,dh  mov ah,02h  int 21h  mov dl, ' '    ;*+  int 21h    ;*+  dec di  loop GO    ret  main endpprognam ends  end start 

读书人网 >汇编语言

热点推荐