今天下午在使用dbox学习汇编语言的时候,惊奇地发现如果先对数据进行入栈操作然后再对数据进行出栈操作,原先栈地址位置的数据会发生随机的变化
运行实验5(2)中的程序,程序如下
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends;076a:0000中存放这些数
stack segment
dw 0,0,0,0,0,0,0,0
stack ends;076a:0010中存放这些数
code segment
start: mov ax,stack
mov ss,ax;ss=076B
mov sp,16;sp=10h
mov ax,data
mov ds,ax;ds=076A
push ds:[0];将076A:0000中的数压入栈中
;076A:000E中开始存放数据,即0123h
push ds:[2];将076A:0002中的数压入栈中
;076A:000C中开始存放数据,即0456h
pop ds:[2];将栈中的数弹出076A:0002
;即0123h放入076A:0002
pop ds:[0];将栈中的数弹出076A:0000
;即0456h放入076A:0000
mov ax,4c00h
int 21h
code ends
end start
可以看出,原先栈中的数据为04 56,出栈之后相应位置的数据会发生变化
运行(3)中的数据
汇编语言弹栈之后原先那个位置栈的数据可能发生改变,比如这个原先的56 04弹出栈之后相应的数据变为A3 01的数据,再弹一次栈之后
相应位置的数据又发生了相应的变化