汇编语言用堆栈指令将寄存器AX与SI的内容交换。 PUSH AX PUSH SI .............. POP AX POP SI

如图片,假设,SI=3333H,AX=2222H.执行以上内容交换命令后AX=3333H,SI=2222H.在书中说的堆栈操作始终遵守“后进先出”的原则,这里为什么要先出... 如图片 ,假设,SI=3333H ,AX=2222H.
执行 以上内容交换命令后
AX=3333H,SI=2222H.

在书中说的堆栈操作始终遵守“后进先出”的原则,这里为什么要先出AX呢?
最后二条 POP 的命令谁能详细解释一下,我始终摸不到头脑?不知道是怎么得到的这个结果?谢谢
命令
PUSH AX
PUSH SI
...........
POP AX
POP SI
展开
 我来答
KawaguchiSky
推荐于2018-03-13 · TA获得超过2638个赞
知道小有建树答主
回答量:296
采纳率:100%
帮助的人:127万
展开全部
有个问题需要注意,push和pop的操作数是寄存器的值,不是寄存器本身。

push AX 先把AX的值入栈
push SI 然后把SI的值入栈

pop AX 是把后压入的SI的值弹到AX
pop SI 是把先压入的AX的值弹到SI

是数据的后进先出,不是寄存器的后进先出。这样就可以达到交换寄存器数据的目的。

同样,如果不是要达到交换数据的目的,而仅仅是用栈保存寄存器的原值,那么就应该这么写:
push AX
push SI
……
pop SI
pop AX
更多追问追答
追问
pop  AX 是把后压入的SI的值弹到AX  ,这时候 SI的值是多少 ?
追答
把寄存器的值压入栈中,寄存器的值本身不会发生变化,而弹出到某个寄存器,则会改变那个寄存器的值。
因此,就拿你这个例子设定的栈作为参考,在没有执行pop SI之前,SI的值是不变的。
SI=3333H ,AX=2222H
push AX; 2222h入栈,同时AX的值不变,AX=2222H
push SI; 3333h入栈,同时SI的值不变,SI=3333H
;---------------------------------
; 此时栈中低地址存放3333h,高地址存放2222h
;---------------------------------
pop AX ; 将存放于低地址的3333h弹出到AX,此时AX=3333h,SI的值不变,SI=3333h
pop SI ;将存放于高地址的2222h弹出到SI,此时SI=2222h,AX=3333h
-----------------------------------
; 两个数据弹出后,栈空
fhmdgxs
2011-11-15
知道答主
回答量:1
采纳率:0%
帮助的人:1681
展开全部
push ax的意思是 将ax寄存器里的值放入栈。
pop ax的意思是讲sp指向的栈顶的16位数据出栈 放入ax寄存器,
不是什么先出ax,
是第一次 出的放到ax里。
什么先出呢, 后入的数据先出 3333后入, 先出放到ax里。
哥们你太混乱了
追问
假设,SI=3333H ,AX=2222H.
PUSH AX
PUSH SI
...........
POP AX
POP SI

执行 以上内容交换命令后
AX=3333H,SI=2222H.

主要是想知道为什么变成这样的 ?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
超级追风筝的我
2018-03-13
知道答主
回答量:5
采纳率:0%
帮助的人:2.1万
展开全部
push ax的意思是将ax的数据压入栈
第二句同理
pop ax的意思是将【原来si的数据(后进)】出栈至ax
第四局同理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2be8958
2011-11-15 · TA获得超过349个赞
知道小有建树答主
回答量:622
采纳率:0%
帮助的人:125万
展开全部
回答过了
追问
你回答的后进先则我知道 ,但并不是我问题的答案。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式