一道汇编语言题,望详细解释
设(AX)=1122H,(BX)=3344H,(CX)=5566H,(SP)=2000H,试分析下列程序段PUSHAXPUSHBXPUSHCXPOPAXPOPCX执行后,...
设(AX)=1122H,(BX)=3344H,(CX)=5566H,(SP)=2000H,试分析下列程序段
PUSH AX
PUSH BX
PUSH CX
POP AX
POP CX
执行后,AX BX CX SP中的内容各为多少 并画出堆栈变化示意图 展开
PUSH AX
PUSH BX
PUSH CX
POP AX
POP CX
执行后,AX BX CX SP中的内容各为多少 并画出堆栈变化示意图 展开
展开全部
你的图片已经上传!
好好学习天天向上!
呵呵,真是不好意思。
ESP=1FFEH ,才对!
真是不好意思了。
ax,bx,cx,这些是16位的汇编寄存器。
EAX,EBX,ECX,是32位的汇编寄存器。我把ax,bx,cx,.....这些当成EAX,EBX......了,汇编来计算时所有入栈、出栈都是加的4。所以才错了。
它们入栈、出栈的占用空间的大小是不一样的。
16位的汇编是2字节,32位的是4字节所以搞错。
把图中的加、减4换成加减2就对了。
当成32位的汇编了,push 一次。ESP-4
在16位汇编中:
push ax sp-2 ;记住入栈-2,也就是分配16位,2个字节的空间,用来存放ax
push bx sp-4
push cx sp-6
pop ax sp-6+2 ax=5566H ; 出栈一次,腾出2字节16位的空间,还给系统,系统回收。
pop cx sp-6+4 cx=3344H
sp=1FFCH
2字节=(16位)/(8位/1字节),即每8位为一个字节
正如注释的那样
ax 是16的寄存器,所以sp-2或+2.EAX是32的寄存器,那么ESP-4或ESP+4
展开全部
2楼是对的。。。(AX) = 5566H、(BX) = 3344H、(CX) = 3344H、(SP) = 1FFEH
追问
能不能把过程详细解释一下,谢谢了
追答
根据后进先出原理,题目把第一个出栈的值赋值给AX,就是说把CX的值给了AX,同理的把bx的值赋值给CX啦,原先的AX、CX都被覆盖了,但BX没有出栈,所以并没被覆盖还是原先的值啊。。。。关于SP,寄存器都是以16位的2个字节的数据,进栈3次,SP:3X(—2)=—6,出栈2次,SP:2X2=4,3进2出,SP的最终变化是—6+4=—2进栈SP-2;出栈SP+2即是SP=2000h-2h=1FFEh
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询