鱼C论坛

 找回密码
 立即注册
查看: 4043|回复: 6

问一个关于SP(PUSH指令)的简单但有意义的问题。

[复制链接]
发表于 2016-4-6 16:04:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于SP的,请高手赐教。

王爽老师在问题3.10的分析中,解释了PUSH和POP指令的操作顺序。
POP的执行顺序好理解,不断的从栈顶抓取数据就是了,抓完了“SP”站不住脚,“下面”空了,所以SP值改变。

那么PUSH指令。书上说PUSH指令是“先”改变SP,然后向SP处传送。(也就是执行后SP值时要“-2”)
这个“先”字很重要。
问题来了:
站在cpu的角度来看(包括但不限定于“物理层面”),PUSH指令是先改变SP的值,然后再向高位置“传送”吗?
因为我个人的理解是,比如PUSH后,字型数据先来,先“挤”进内存单元,“逼迫”SP值改变。认为可以是先入数据,后改变SP。

个人这种理解倒是能通顺,但不知道正确与否?因为书中专门提醒了“push”的执行步骤,并一再强调其重要性。
如果这种理解不对,就会影响以后的学习,并无法“深入理解、灵活运用”。

谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-6 20:50:57 | 显示全部楼层
..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-8 18:31:08 | 显示全部楼层
-2是先把寻址到sp指向的地址然后将数据放入,原来的数据是被覆盖不是挤入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-9 13:38:01 | 显示全部楼层
森林骑兵 发表于 2016-4-8 18:31
-2是先把寻址到sp指向的地址然后将数据放入,原来的数据是被覆盖不是挤入。

能明白你的意思。

我想了解的主要是:
比如,我要做PUSH AX的操作,物理地址在0000:0010处,那么我就必须要”先“使我的SP在0012这个地方,才能确保最后入栈的是“0000:0010”的字单元。
书中给出的先-2的解释,是用的传送概念,书上的大概思路是:你可以理解为如果要向0010处传送数据,那么你PUSH前先给SP+2,操作时CPU会自动把SP-2,这样才能成功保证0010能写入数据。

我想知道的是,关于这个-2 +2的问题,是王老师为了方便大家理解和灵活编写程序提出的,还是本身CPU的物理结构决定的?(这是理解计算机内部原理的一个例子)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-9 20:04:05 | 显示全部楼层
这个问题,首先push ax的操作,不是王老师提出的,而是8086cpu提供的栈机制,还要你的这句话“那么你PUSH前先给SP+2,操作时CPU会自动把SP-2”不对的sp加2是pop指令,push和pop都是cpu提供的入栈和出栈的指令,cpu只是根据push或pop指令进行一个字的寻址。
你的汇编学的哪了,这些书上都有啊在第二版的57页。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-9 23:26:27 | 显示全部楼层
楼上好厉害 哪页都知道!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-10 19:16:41 | 显示全部楼层
森林骑兵 发表于 2016-4-9 20:04
这个问题,首先push ax的操作,不是王老师提出的,而是8086cpu提供的栈机制,还要你的这句话“那么你PUSH前 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表