1.使用Debug将下面的程序写入内存,逐条执行(见1-1),根据指令执行后的实际情况填空(见1-2)
p.s. 已经按实验要求将使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H ,
将第 1行的 mov ax, ffff → 改为 mov ax, 0021
(1-1 e+d)
(1-1 a+r)
(1-1 t)
在用E命令改写内存中的内容并且用A命令依次将程序段写入内存后,用D命令查看内存中的内容,R命令查看寄存器中的内容,T命令逐行执行,根据观察到的填空所需的各值后,完成(1-2)
(1-2)
我的答题方法可能有点“强答”“凑答案”哈,因为我不知道啥是啥,譬如说找“push ax;sp=__”,修改的内存单元地址就去这段命令的sp里找,内容就去ax里找,“push [4,sp=__”,修改的内存单元地址去sp里找,内容去这段命令最后找DS:XXX里的XXX便是。
2.为何下图中2000:0~2000:f中的内容会发生改变
使用T命令单步追踪之后,没有看懂,因为一些基本的概念我是不知道的,所以选择先保存着,知道了再重新编辑。
王爽第二版《汇编语言》
“因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。”
》总结与体会
由于基本的概念不清楚,导致实验的失败,所以我意识到了我之前学习方法是存在很大问题的。其实不单是学习方法这方面的问题,看了班级里别的同学做的博客,我觉得我做的真的是很糙了,就是简单的截屏+抄一下题目+附上答案,我理念似乎一直都是差不多就行,差不多吧。
最后再补充以下三点