题目:将下面的程序编译连接,用debug加载、跟踪,然后回答问题。
源代码:
调试过程:
问题1:cpu执行程序,程序返回前,data段中的数据为多少?
解答:data段中的数据为:144C:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09
问题2:cpu执行程序,程序返回前,cs=144eh、ss=144dh、ds=144ch。
问题3:设程序加载后,codesg段的段地址为X,则datasg断的段地址为:X-2h,stacksg段的段地址为:X-1h。这里要好好解释一下为什么codesg段的段地址为X,而datasg和stacksg的段地址会是X-2h和X-1h。其实刚开始的时候我也没有弄明白,开始时我认为是X-20h和X-10h,但是段地址是要乘以16后在与偏移地址相加 ,即一般的物理内存地址都是这样表示的ds*16+[n].所以10h要除以16,也就是1h了。所以最终datasg=X-2h、stacksg=X-1h。这个从程序中的cs、ss、ds的值也可以得到证实。