解惑,解惑,汇编大人请入

xirenshen 2003-09-05 09:55:31
main proc far
assume cs:program,ds:datarea
start:
;set up stack for return
push ds
sub ax,ax
push ax
..........
书上是这样描述以上语句的:“这里把主程序建立为过程,由dos调用该过程。进入程序后,首先把ds的内容和0作为段地址和偏移地址入栈,以便在程序结束时用ret指令返回dos”

这段话我看的非常胡涂,
1文章中并没有call main的语句,为什么说dos调用该过程
2程序不就是在dos环境下运行的嘛为什么有“返回dos”之说
3为什么通过以上压栈就可以实现“返回dos”
初学汇编不能看透其中奥妙请大人详解,谢谢
...全文
60 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫郢剑侠 2003-09-05
  • 打赏
  • 举报
回复
这个问题以前曾经讨论过,
最后的结论是推荐调用INT 21H的4CH号子功能来结束程序返回DOS.
SoRoMan 2003-09-05
  • 打赏
  • 举报
回复
同意樓上兩位。
補充一點:
關於3.因為dos加載一個外部命令或應用程序時,會在程序段之前設置一個256字節的
信息區,就是PSP。在PSP的偏移00H處安排了一條指令:int 20h,而當dos加載程序時,會將ds,es指向PSP,所以ret返回時,彈出ds給cs,0給ip.實現 (cs:ip)=int 20h 程序終止退出,返回dos.
spbabyba 2003-09-05
  • 打赏
  • 举报
回复
你在DOS里,输入UEXE.EXE(你自己写的程序).
1.DOS就CALL你的MAIN函数了.(这个代码不在你的程序里,在操作系统里).
2.你的程序运行完了.不可能关机或挂起.要回到操作系统(DOS)下,继续做别的事.
3.程序把 0 压入堆栈,返回后就回到DOS.
W32API 2003-09-05
  • 打赏
  • 举报
回复
1。任何程序都是一个或者多个过程,你的程序由操作系统调用,
在你的代码里面当然不会 CALL 自己。
2。DOS 操作系统在运行应用软件的时候是把控制权交给应用软件的,
所以在软件结束运行的时候要把控制权交还 DOS 系统。
方法比较多,可以调 21H、20H,也可以直接 RET,因为程序也是过程。
3。这种方法我没有试过,习惯于使用 20H 返回。
他所说的是返回 DS:0000,这个应该是系统提供的一种返回机制。
xirenshen 2003-09-05
  • 打赏
  • 举报
回复
在线等待,解释明白后立即结帖^_^

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧