王爽《汇编语言》第10章 检测点10.5(1)的疑问

题目:下面的程序执行后,ax中的数值为多少?(注意用call指令的原理来分析,不要在Debug中单步跟踪来验证你的结论。对于此程序,在Debug中单步跟踪的结果,不能代表CPU的实际执行结果)

assume cs:codesg

stack segment 

 dw 8 dup (0)

stack ends 

codesg segment 
start: 
	mov ax,stack
	mov ss,ax
	mov sp,16
	mov ds,ax
	mov ax,0
        call word ptr ds:[0EH]
	inc ax
	inc ax
	inc ax
	mov ax,4c00h
	int 21h
	
	           
codesg ends 

end   start

本来按上面的代码分析,call执行的时候,第一个 inc ax 的首地址先进栈,然后以ds:[0EH]这个地址的数据作为IP,执行IP指向的代码。而这里的ss和ds是相同的,ds:[0EH]就是栈顶元素,也就是刚入栈的"第一个 inc ax 的首地址",故应该执行的代码是“第一个 inc ax ”,最后结果应该是3.

因为这个代码在调试的时候是不能按正常运行的,我不知道我的分析对不对。另外,为什么这个程序不能正常调试,也是个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值