首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-16 
汇编初学者的初级问题,求好心人指点datarea segmentgrade dw 88,75,95,63,98,78,87,73,90,60rankdw 10 dup

汇编初学者的初级问题,求好心人指点
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 

热点排行