汇编语言用堆栈指令将寄存器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 展开
执行 以上内容交换命令后
AX=3333H,SI=2222H.
在书中说的堆栈操作始终遵守“后进先出”的原则,这里为什么要先出AX呢?
最后二条 POP 的命令谁能详细解释一下,我始终摸不到头脑?不知道是怎么得到的这个结果?谢谢
命令
PUSH AX
PUSH SI
...........
POP AX
POP SI 展开
4个回答
展开全部
有个问题需要注意,push和pop的操作数是寄存器的值,不是寄存器本身。
push AX 先把AX的值入栈
push SI 然后把SI的值入栈
pop AX 是把后压入的SI的值弹到AX
pop SI 是把先压入的AX的值弹到SI
是数据的后进先出,不是寄存器的后进先出。这样就可以达到交换寄存器数据的目的。
同样,如果不是要达到交换数据的目的,而仅仅是用栈保存寄存器的原值,那么就应该这么写:
push AX
push SI
……
pop SI
pop AX
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
-----------------------------------
; 两个数据弹出后,栈空
展开全部
push ax的意思是 将ax寄存器里的值放入栈。
pop ax的意思是讲sp指向的栈顶的16位数据出栈 放入ax寄存器,
不是什么先出ax,
是第一次 出的放到ax里。
什么先出呢, 后入的数据先出 3333后入, 先出放到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.
主要是想知道为什么变成这样的 ?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
push ax的意思是将ax的数据压入栈
第二句同理
pop ax的意思是将【原来si的数据(后进)】出栈至ax
第四局同理
第二句同理
pop ax的意思是将【原来si的数据(后进)】出栈至ax
第四局同理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答过了
追问
你回答的后进先则我知道 ,但并不是我问题的答案。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询