哲学中说:实践理论再实践再理论.
实验时回想了第4章知识
应知道cx中存放的是代码的16进制长度,也应发现dx的值等于ex的值,ss的值等于cs的值.其中cs的什比dx中大10H.
第6章实验
5.(1)中用debug加载程序后发现与4章的不同(我电脑中的数据): -r
cs=1D7D SS=1D7B DS=1D6B ES=1D6B cx=42
CS不等于SS
4章中代码,数据,堆栈在一个段中,6章中分开了.是造成CS不等于SS的真正原因吗?恳请专手回复.
cpu执行程序返回前:
cs=1d7d ss=1d7c ds=1d7b es=1d6b
我是这样认为的:由start初始化cs段地址后上共32B,所以
ds与ss各16B.
改造原程序:将所有的data字符与satck字符互换后,再次编译程序加载:
cs=1D7D SS=1D7B DS=1D6B ES=1D6B cx=42
cpu执行程序返回前:
cs=1d7d ss=1d7b ds=1d7c es=1d6b
结论:ss与ds段地址与在程序中的位置有关.回答了实验5.(3)
5.(2)中用debug加载程序后
-r
cs=1D7D SS=1D7B DS=1D6B ES=1D6B cx=42
cs的值与5.(1)中相同.
结论:深刻理理了一个段最小16B.
5.(3)中用debug加载程序后
-r
cs=1d7b ss=1d7b ds=1d6b es=1d6b cx=44
发现与第4章结论相同.
cpu执行程序返回前:
cs=1d7b ss=1d7f ds=1d7e es=1d6b
发现问题:观察5.(2)与5.(3),和程序一样,只是结构发生变化,cx中的值却不相同.
为何就不同?
怀疑5.(3)的程序录入有误,把5.(2)改为5.(3)再编译,还是如此.
这是为什么为什么???
恳请专家回答!
通过本实验:5.(2)在实验中起到承上启下的作用,不上机实验,想当然的就会用第4章知识来掩盖事实的真假.
对段地址到现在为址有了较为深的理解:一段连续的物理内存,可用,不同的段地址来表示,且为16的倍数.
体验了发现问题后的快感! |