`
coolerbaosi
  • 浏览: 727211 次
文章分类
社区版块
存档分类
最新评论

王爽《汇编语言》第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.

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics