回 帖 发 新 帖 刷新版面

主题:[讨论]帮我看看显示不出是什么原因??能回答者有分送哦!!!

本人刚开始学习汇编,遇到一道题目,
对几个数3,-4,5,8,-9,28进行从大到小的排序,并显示(要求用冒泡法)
我编的程序如下。编译的时候出错了,请大侠指点哈,在下感激不尽!!
data segment
     m dw 6,-2,8,48,-4
     n equ ($-m)/2
data ends
code segment
     assume cs:code ds:data 
 start: mov ax,data  
       mov ds,ax
       mov cx,n
       dec cx
loop1: mov dx,cx
       mov si,0 
        mov bx,si
loop2: mov ax,m[bx]
         cmp ax,m[bx+2]
         jge l
        xchg ax,m[bx+2]
       mov m[bx],ax
l:     add bx,2
        dec cx
        jne loop2
        add si,2
        mov cx,dx
        loop loop1
        mov ah,4ch
        int 21h
code ends
end start[em2][em2]

回复列表 (共10个回复)

沙发

assume cs:code ds:data
兄弟,你这里的定义里头少了一个逗号。
assume cs:code, ds:data
编译通过,俺没仔细看你的程序,不知道内容对不。

板凳

运行没输出

3 楼


不能显示是什么原因?
是不是2号功能没用对啊?我不是很会用,请高手赐教!

4 楼

??请问哪里用了2 int 10

5 楼

你的循环结构不行``````好象没有结尾定义

6 楼

输出字符串?
可以用mov ah,09h
还有mov si,0
mov bx,si
啥用意?
直接mov bx,0不行?
偶也是菜鸟^^

7 楼

我改了一下还是没有
汗!!!
没有高手了吗难道?

8 楼

不是吧!都这么久了,还在期待...
帮你顶

9 楼

虽然运行上没什么问题,但这段程序错误好多。。。

不说思路上的错误,只说程序上的错误

1、mov si,0 
mov bx,si
同样没看明白是什么意思。这里用si就可以了,在附值给bx就是多此一举了。

2、jne loop2
。。上面没有比较指令,怎么能实现转移。应该在语法上没什么问题,所以当你MASM的时候,没报错。

3、mov dx,cx
mov cx,dx
我想LZ的原意是保存扫描次数吧?这用堆栈指令更好
push cx
pop cx

4、dec cx
估计是LZ认为执行一次LOOP,就要将CX的循环次数减1,以保证LOOP能完成循环
其实不是,CX已经有扫描次数了,在循环到规定次数就结束了,不用在程序将cx内的附值减1

5、最关键的是LZ没有进行是否已经排序的判断。。。无尽的循环了。。。

10 楼

感谢楼上的兄弟指点!!

我来回复

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