汇编语言用堆栈指令将寄存器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 展开
展开全部
有个问题需要注意,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
第四局同理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答过了
追问
你回答的后进先则我知道 ,但并不是我问题的答案。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询