回 帖 发 新 帖 刷新版面

主题:[讨论]关于堆栈的小问题

[size=5]start:
         push  ds
         sub   ax,ax
         push  ax
为什么程序开始总是使用这几句,但是好像code中 ,又未将 ax(0)弹出.[/size]

回复列表 (共3个回复)

沙发

程序的开始
都要写
mov ax,data
mov ds,ax
数据的首地址
入栈

板凳


但是 push ax
即push 0的作用呢?

谢谢

3 楼

因为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
...

我来回复

您尚未登录,请登录后再回复。点此登录或注册