一开始没注意把ffff改成0021,第二次改了,两次结果对比了一下,发现:
- 不改ffff不影响栈的内存单元地址,DS是数据段地址,SS是栈段地址,两者是独立的。
- SP也不受影响,SP代表栈顶,只和存入数据的多少有关,存入时SP=SP-2
- 内存单元地址我一开始没看运行结果的SP,是直接算的,用22000+(0010-2),后来发现SP都告诉我了,可以直接看SP算。
最后查看了一下内存单元内容和我自己算的也是一样的。
看到了CS的值
存入ax的值在偏移地址7、8和e、f都有
第一行 把数据2000存入寄存器ax
第二行 把寄存器ax的值存入栈段寄存器,因位栈段寄存器不可以直接送入。
第三行 将数据10赋值给栈顶偏移地址,也就是确定了栈底的位置是20010,sp对应了栈顶的位置,从此处存入数据SP会随之变化,如此栈就定义好了。
我感觉是因为指令是一条一条执行的,所以会把上一步执行的数据和CS存在里面。百度说是单步中断,我也不是很懂。2000:0 f里面我没看见IP。
五、实验总结与体会
1.DS、CS、IP、SS、SP之间注意区分。
2.栈的空间大小要自己把控管理,防止超界。
3.操作对象之间可不可以直接送入要注意。
4.栈顶的偏移地址,和栈底要分清楚。
5.入栈出