当前位置: 代码迷 >> 汇编语言 >> RET指令如何用
  详细解决方案

RET指令如何用

热度:5604   发布时间:2013-02-26 00:00:00.0
RET指令怎么用

;****************************
;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 引导代码等等。我想,多看、多练,熟能生巧。
------其他解决方案--------------------------------------------------------
引用:
怎么学好汇编,最保守的方法就是选本还可以的教程,从头看到尾;书上的例题,一个不拉,都自己也动手练习一遍;每章每节后的每道习题,也都要做,不是只是想着这道题该怎样做,而是将实现和内容真实地落到代码上。大致能看懂些代码后,多读些其它的比较典型的代码或程序,比如主引导区代码、dos 引导代码等等。我想,多看、多练,熟能生巧。

受教啦~~~ :)
------其他解决方案--------------------------------------------------------
引用:
怎么学好汇编,最保守的方法就是选本还可以的教程,从头看到尾;书上的例题,一个不拉,都自己也动手练习一遍;每章每节后的每道习题,也都要做,不是只是想着这道题该怎样做,而是将实现和内容真实地落到代码上。大致能看懂些代码后,多读些其它的比较典型的代码或程序,比如主引导区代码、dos 引导代码等等。我想,多看、多练,熟能生巧。

谢谢谢谢。。
------其他解决方案--------------------------------------------------------
唉呀,向各位学习了!!!
  相关解决方案