实验二

实验结论

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的指向。

原文地址:https://www.cnblogs.com/byxy/p/9956395.html