实验二
实验结论
1.使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
为了便于验证结果,调整如下:
在使用a命令输入指令调试前,使用e命令将内存单元0021:0-0021:7连续8个字节修改为 30h,31h,32h,33h,34h,35h,36h,37h
将第一行的 mov ax,ffff改为mov ax,0021
以下为理论分析指令执行后的值
与理论上分析一致。
在使用t命令单步调试过程中,涉及到的内容:中断机制。它是我们后半部分课程中的一个主题。现在我们只要知道这一点就可以了:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。
2.仔细观察实验过程,分析:为什么2000:0-2000:f中的内容会发生改变?
猜测 2000为ax的值,07 3f 01 08为cs:ip的值,存23 31入ax
p72页说
mov ax,2000
mov ss,ax
mov sp,10
为安排2000:0000-2000:000f为栈空间,初始化栈顶
2000:0-2000:f中的内容会根据ax中的值发生变化,也会根据栈操作而发生变化,栈操作push ax
就是在栈底2000:e的位置存入31 23,以小端法存入,再存入2000:c中33 66。
实验总结与体会
cs:ip 必须指向debug处理D命令的代码,ss:sp要指向栈顶,一般都默认段地址在ds中。
一段内存,可以既是代码的存储空间,还可以是栈空间,也可以什么也不是,关键在于CPU中寄存器的设置。即cs、ip,ss、sp,ds的指向。