回 帖 发 新 帖 刷新版面

主题:显示的问题!!!

看看我程序!这是个冒泡程序,怎么显示不了全部,只显示:00010002000300040005
为什么不显示到0006???
data segment
 Y     dw       2,4,3,5,1,6
data ends
code segment
 main proc far
    assume cs:code,ds:data
start:

            push      ds
            sub       ax,ax
            push      ax
            mov       ax,data
            mov       ds,ax
              
            mov       si,6
            dec       si  
again:      mov       di,si
            mov       bp,0
next:       mov       ax,Y[bp]
            cmp       ax,Y[bp+2]
            jge       nochg
            xchg      ax,Y[bp+2]
            mov       Y[bp],ax
nochg:      add       bp,2
 
            dec       si
            jnz       next
            mov       si,di
             mov    bx,Y[bp]
 
             mov    ch,4 

rotate:      mov    cl,4

             rol    bx,cl

             mov    al,bl

             and    al,0fh

             add    al,30h

             cmp    al,3ah

             jl     printit

             add    al,7h

printit:
              
             mov    dl,al

             mov    ah,2

             int    21h

             dec    ch

             jnz    rotate
         

            dec       si
           
            jnz       again
            ret
            main endp           
            code ends
            end start

                                  
             

回复列表 (共4个回复)

沙发

mov       si,6
    dec       si  ;;;;;;;;;;;
   ........
   dec       si   ;;;;;;;;;;;;;;;;;你说这样能循环多少次..
   jnz       again


用push ds
  xor ax,ax
  push ax
   .....
   ret
是最古老的退出程序的方法了,建议还是使用
mov ah,4ch
int 21h
还有学会使用.while等伪指令,标号多了看得心烦.
学汇编还是去www.aogosoft.com把,现把那里的DOS汇编教程看了在说.
这里没有什么好学的.

板凳

谢谢!好像还是不行啊!好相信显示了000000010002000300040005怎么回事啊???

3 楼

问题很明显了,就是SI的细节处理出了点问题.剩下的自己解决把.

4 楼

我知道什么地方错了! 这里不应该是mov    bx,Y[bp],应该是 mov   bx,Y[b-2].但好象还是有点不太明白啊!我刚学汇编,老师只叫我们显示那东西,那冒泡不是我编的,显示是我后加的。我看我自己好好想想了,等想好了,一定给你30分!!!
            

我来回复

您尚未登录,请登录后再回复。点此登录或注册