-
debug的使用
偷个懒,之前写过了这里不再赘述
-
实验
1)实验1
要求:用e将一些数据写入内存,用a写入一段程序,t 逐条执行 观察具体参数变化,并探究现象
1.e写入,d检查
2.a写入程序
3.t 逐条执行
这几步执行完,寄存器 ax=3130,这就体现了小端法:取低地址单元地址为字数据地址,以及数据存取原则:高高,低低。接着add完ax正常变成了6462。bx同理
4.
做完之后,ax寄存器和bx的值就交换了,这就是栈的先进后出。
然后展示下push完内存里具体怎么存的
5.
这里其实重点是明白,压栈,弹出操作对象是字数据(两个字节)
2)
过程如下
这里前三步是初始化栈的操作,ss保存的栈顶段地址,sp保存的栈顶偏移地址是10H,初始化后栈底地址就是栈顶地址-2,即2000:f
这里有个重点,观察一下,一段内存被当作栈段来使用时,这段内存发生了什么变化?
为了便于观察(其实也没多少帮助)我把2000:0000到000f内存全部赋1。
可以看到,当栈初始化完后,有10个字节发生了变化,(由于用d查看的时候漏了一个字节,不过结合后面的显示结果可以猜出来遗漏掉的那个字节)
变化具体如下图
这个貌似涉及到中断的知识,我就简单讲下了,从栈底往上看,前两个字节放入标志寄存器的值(据说),接着两个字节压入了,cs寄存器的值,再接着是ip的值,紧接着两个字节的零(我没搞清是什么含义),最后2000:7 2000:8两个字节就是ax的值。
为什么这是10字节是这么用呢,这大概就是中断过程
-
总结
为了理解现象中10个字节的变化的原因,特意去看了中断过程的知识,虽然自己懂了点,但是表达不出来很难受。
还有疑问:为什么标志寄存器的值是01A3,还是说这两个字节根本就不是标志寄存器的值?
还有然后存ip寄存器跟存ax的中间那两个字节的0是什么含义,希望有大佬解答下。。。