中易网

汇编程序中 push ds 为什么可以保护PSP段地址 请解析一下 这段命令 PUSH DS;MO

答案:1  悬赏:10  
解决时间 2021-01-08 16:22
汇编程序中 push ds 为什么可以保护PSP段地址 请解析一下 这段命令 PUSH DS;MO
最佳答案
汇编语言,不返回DOS的什么部分
push ds ;DS寄存器入栈
mov ax,0 ;AX寄存器赋值0
push ax ;AX寄存器入栈

下面是出处:
编写的汇编语言源程序是在DOS环境下运行时,必须了解汇编语言是如何同DOS操作系统接口的。

用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT 20H软中断指令。INT 20H中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理的状态。因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的INT 20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。
DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,DOS就设置段寄存器DS和ES的值,以使它们指向PSP的开始处,即INT 20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行用户程序。为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。 (一)标准方法
首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT 20H 指令的段地址及偏移地址压入堆栈:
PUSH DS ;保护PSP段地址 MOV AX,0 ;保护偏移地址0 PUSH AX
这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而执行INT 20H指令,使控制返回到DOS状态。返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:\>。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
金立m6p|us与OPP0r9p|us哪个好
现代有没有人会飞
主播心宁是谁啊,就是里约奥运会街头拜访的主
请问放弃一个爱了几年的人,就不心痛嘛?
短道速滑王蒙的资料
帮我看一下六帝钱和五帝钱的功能及安放位置
为什么 5G比宽带还快
excel里怎么把所有数字加1?
什么是国学文化
有哪些能提升自我值得使用的手机软件?
三国中的钟寺卿是谁
为什么11到12月适合种风信子
谁有采用光排管散热器采暖的采暖平面图?我想
漏电保护是不是与空气开关的大小无关?只要漏
I tried to call you ______I heard from him
推荐资讯
chrome怎么发音
男孩为女孩拭去眼角泪珠,女孩在男孩肩上露出
3D彩票170期试机号是什么
什么是静心,如何静心
沙滩游泳主题乐园是室内的好还是室外的好?
北京现代10万以下汽车有哪些
sql server 2008 未找到请求的值 exfat
朗洁保洁(建设街与振兴路交叉口西南50米朗洁
杜什么能什么的成语
相亲对象有点迂腐怎么办
晚霜和日霜的区别?
GTX TITAN X 和GTX TITAN Z区别在哪?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?