再生缘 发表于 2011-7-6 22:53:03

实验3

本帖最后由 再生缘 于 2011-7-7 13:14 编辑

各位 我又来了这题令我挺纠结的 ssume cs:abc

abc segment

mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx

mov ax,4c00H
int 21H

abc ends

end

pop ax
ax的值是指2000H吗那下面的popbx   bx的值呢

winddyj 发表于 2011-7-7 10:43:06

如果这条指令是push ax,那ax才是2000H
pop ax,那ax的值就是sp指向位置的值了

再生缘 发表于 2011-7-7 11:50:48

winddyj 发表于 2011-7-7 10:43 static/image/common/back.gif
如果这条指令是push ax,那ax才是2000H
pop ax,那ax的值就是sp指向位置的值了

那个你能告诉我sp指向的值是多少 或者从看到ax的值

再生缘 发表于 2011-7-7 11:51:59

winddyj 发表于 2011-7-7 10:43 static/image/common/back.gif
如果这条指令是push ax,那ax才是2000H
pop ax,那ax的值就是sp指向位置的值了

那个你能告诉我sp指向的值是多少吗 或者从看出ax的值

demon 发表于 2011-7-7 12:54:23

再生缘 发表于 2011-7-7 11:51 static/image/common/back.gif
那个你能告诉我sp指向的值是多少吗 或者从看出ax的值

取出当前栈顶 2000:10 地址字单元中的值放入ax中,
然后sp = sp + 2

自己debug一下就明白了!

再生缘 发表于 2011-7-7 13:01:17

demon 发表于 2011-7-7 12:54 static/image/common/back.gif
取出当前栈顶 2000:10 地址字单元中的值放入ax中,
然后sp = sp + 2



算是明白了接下来就差动手查看了
是用dss:10查看的吗

小甲鱼 发表于 2011-7-7 13:03:57

pop ax 将栈中的值弹出传给ax, 这时候栈顶指向2000:10,也就是将内存单元中的字型数据给ax。

pop bx 将栈中的值弹出传给bx, 这时候栈顶指向2000:12,也就是将内存单元中的字型数据给bx。


demon 发表于 2011-7-7 13:09:54

用t命令 执行,观察寄存器的变化,留意sp寄存器的变化

d命令是查看内存中的数据,我做这个实验的时候,里面没有值,系统环境不同数据也有所变化
你可以用e命令 往这段空间里写点数据


再生缘 发表于 2011-7-7 13:13:53

问题解决了 各位请勿回复了谢谢

demon 发表于 2011-7-7 13:15:03

本帖最后由 demon 于 2011-7-7 13:15 编辑

d 2000:a f

dss:a f

Mr.han 发表于 2011-7-9 22:27:29

这些知识书上和视频里面都有的啊
页: [1]
查看完整版本: 实验3