;****************************
;bubble sort冒泡法排序
;****************************
data SEGMENT
a DW 2,3,27,18,11,9
data ENDS
code SEGMENT
main PROC far
assume CS:code,DS:data
start:
MOV AX,data
MOV DS,AX
MOV CX,4
DEC CX
loop1:
MOV DX,1
MOV DI,CX
MOV BX,0
loop2:
MOV AX,a[BX]
CMP a[BX+2],AX
JGE continue
XCHG AX,a[BX+2]
MOV a[BX],AX
SUB DX,DX
continue:
ADD BX,2
LOOP loop2
CMP DX,1
JE exit
MOV CX,DI
LOOP loop1
exit:
RET
main ENDP
code ENDS
END start
我用DEBUG功能跟踪调试,执行到exit程序结果没有错误。但执行完RET指令后内存的内容就不是期望的了。RET指令到底该怎么用呢?
------最佳解决方案--------------------------------------------------------
主程序最后通过 ret 来结束,这在其最开始处,肯定是应该有下面的这样的语句:(也别太迷信书上的内容)
start::
push ds ; 这些指令一定要在对 ds 赋值之前
mov ax, 0
push ax
不过,对于“结束程序返回DOS”的功能,现在还是建议使用下面的方法:
mov ax, 4c00h ; 需要的话,可以给 AL 赋程序的结束码
int 21h
------其他解决方案--------------------------------------------------------
ret通常都跟call配对使用的吧
------其他解决方案--------------------------------------------------------
这个程序是书上的原代码,应该没有错的。
------其他解决方案--------------------------------------------------------
楼上大牛。。谢谢。。
给说说怎样学好汇编吧。。简单谈谈。。
------其他解决方案--------------------------------------------------------
怎么学好汇编,最保守的方法就是选本还可以的教程,从头看到尾;书上的例题,一个不拉,都自己也动手练习一遍;每章每节后的每道习题,也都要做,不是只是想着这道题该怎样做,而是将实现和内容真实地落到代码上。大致能看懂些代码后,多读些其它的比较典型的代码或程序,比如主引导区代码、dos 引导代码等等。我想,多看、多练,熟能生巧。
------其他解决方案--------------------------------------------------------
受教啦~~~ :)
------其他解决方案--------------------------------------------------------
谢谢谢谢。。
------其他解决方案--------------------------------------------------------
唉呀,向各位学习了!!!