为啥不能够正常返回值?如何避免?
在无意中遇到一个问题,无法正常从栈中取出AX值,AX、BX都等与栈中CS值,这是为什么?求大神解释,如何要避免?代码如下:assume cs:code,ss:stack
stack segment
db 16 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0
call tiaoz
sub sp,4
pop ax
mov bx,ax
mov ax,4c00h
int 21h
tiaoz:mov bx,0
mov ax,5h
push ax
add sp,2h
ret
code ends
end start
C:\Documents and Settings\Administrator\桌面\clip_image001.jpg
也许是因为系统不会保存超过栈顶的值? CALL 的时候 CPU 会帮你执行 PUSH IP PUSH CS解释完毕 以上两位仁兄,估计没哟运行过该程序吧,此处CALL执行PUSH IP,不是CS和IP,所以采用修改SP值来改变栈的指向 你用真正的DOS 会成功的~~!
页:
[1]