请大家帮忙分析一下
王鲲彩 2006-10-31 01:49:14 stack segment stack
db 16 dup (0)
stack ends
code segment
assume cs:code,ss:stack
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,0f0eh
mov cx,8
cyc: push ax
sub ax,0202h
loop cyc
mov sp,2 //就从这里开始
pop dx
pop dx //最奇怪的地方
mov ax,4c00h
int 21h
code ends
end start
对于以上代码编译后在DEBUG上进行单步跟踪,碰到了以下问题:
1)当我跟踪执行到修改SP后,使用 “D SS:0 F”命令查看堆栈发现物理栈顶到当前栈顶的数据被破坏,想不通为何会有这种情况,是DEBUG破坏的,还是DOS破坏的亦或是CPU对于堆栈操作存在的问题?
2)更令我不解的是当跟踪执行到第二条“POP DX”后,竟然CS也被改掉了,致使MOV AX,4C00H跟踪不到!
我真是想不通,难道在汇编级的堆栈操作有很多讲究之处?希望大家能帮忙分析一下。谢了先!