suppermine 发表于 2016-4-6 16:04:23

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

关于SP的,请高手赐教。

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

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

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

谢谢。

suppermine 发表于 2016-4-6 20:50:57

..{:7_145:}

森林骑兵 发表于 2016-4-8 18:31:08

-2是先把寻址到sp指向的地址然后将数据放入,原来的数据是被覆盖不是挤入。

suppermine 发表于 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的物理结构决定的?(这是理解计算机内部原理的一个例子)


森林骑兵 发表于 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页。

xiaoqz 发表于 2016-4-9 23:26:27

楼上好厉害 哪页都知道!

suppermine 发表于 2016-4-10 19:16:41

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

{:5_110:}
页: [1]
查看完整版本: 问一个关于SP(PUSH指令)的简单但有意义的问题。