在汇编语言中碰到一个栈的问题。 程序运行时首先被装入内存,然后由一个进程启动并设置cs:ip 并启动一个进行来运行这个代码块。 在执行汇编指定时时,为什么汇编指定总是把数据写入栈,难道有些指定就带有栈操作? 但翻阅相关的书籍并没有发现相关说明
下面的代码我是想测试指定对栈的操作问题,可我申请的一块栈总是被其他什么东西给使用了。。但push和pop 的进栈和出栈还是正常的。
代码
assume cs:codesg
;
stack segment
dw 8 dup (0)
stack ends
codesg segment
start:mov ax,stack
mov ss,ax
;这里用d 命令查看stack内存处的数据还全是00000000000000
mov ax,1
;这个代码执行之后就不在是0000000000000了,而是其他的一些数字在里面00e0d1030....之类的,说明执行了mov sp,16进行了相关的栈操作。
mov sp,16
;后面的入栈和出栈数据内存处的数据正常
push ax
push ax
pop ax
pop ax
mov ax,4c00h
int 21h
codesg ends
end start
------解决方案--------------------
如果你是使用DEBUG的话,DEBUG是会把调试信息保存在栈里面的
------解决方案--------------------
这样的代码用Bochs调试比较好