主题:[讨论]关于堆栈的小问题
cmk447
[专家分:0] 发布于 2007-04-20 23:24:00
[size=5]start:
push ds
sub ax,ax
push ax
为什么程序开始总是使用这几句,但是好像code中 ,又未将 ax(0)弹出.[/size]
回复列表 (共3个回复)
沙发
小牛斑斑 [专家分:1210] 发布于 2007-04-21 13:03:00
程序的开始
都要写
mov ax,data
mov ds,ax
数据的首地址
入栈
板凳
cmk447 [专家分:0] 发布于 2007-04-21 18:03:00
但是 push ax
即push 0的作用呢?
谢谢
3 楼
小牛斑斑 [专家分:1210] 发布于 2007-04-22 09:14:00
因为ds默认指向psp的首地址
push ds ;把psp的首地址入栈
sub ax,ax ;ax清0
push ax ;压入栈中
mov ax,data
mov ds,ax
...........
...........
ret ;弹出0送入ip ,再弹出psp的首地址送入cs
则cs;ip 指向原来的地址 退出dos
也可以这样写:
mov ax,data
mov ds,ax
.......
......
mov ah,4c
int 21h
...
我来回复