|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
刚刚看小甲鱼做的视频教程零基础学汇编的第16课,小甲鱼老师说当一个元素被弹出栈的时候 如 pop ax
CPU做了两个动作:
1.把SS:SP指向的内存空间中的元素送入ax中;
2.sp = sp + 2
我想这个大家应该都有映像,然后小甲鱼老师形象的举了一个格式化硬盘的例子来说明,CPU仅仅只是把数据复制到ax中,并不会把原先栈中的数据给清除;于是我在Debug中做了如下实验:
我把10000H~1000FH这段内存空间当作栈来使用,把SS更改为1000,SP更改为10;
接着在20000H内存空间处写入如下代码:
mov ax,2423H //赋值,执行完毕之后AX = 2423H
push ax //压入堆栈,此时SP = E
add ax,20H //这里仅仅是一个花指令,不必理会,执行完毕之后AX = 2443H;
pop ax //执行完毕之后,AX = 2423H,SP = 10
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<从这里开始,我做了一个实验,我把SP人为的减去2(造成压入堆栈的假象),然后再弹出堆栈,那么如果结果是2423H,那么证明CPU不会把原先栈中的数据给清除,否则........
mov ax,EH
mov sp,ax
pop bx
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<实验到这里就结束了,但是我发现执行完毕之后...bx的值并不是等于2423H;那么是结论错误,还是我实验步骤有错误?
菜鸟求教导................
我在执行完pop ax之后使用D指令查看10000这块内存区,发现1000EH~1000FH已经不是等于2423H了...
|
|