汇编语言的数据先入栈再出栈之后会发生相应的变化

今天下午在使用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的数据,再弹一次栈之后
在这里插入图片描述
相应位置的数据又发生了相应的变化

发布了17 篇原创文章 · 获赞 7 · 访问量 2992

猜你喜欢

转载自blog.csdn.net/znevegiveup1/article/details/85240783
今日推荐