》实验结论
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];p=__”,([4]表示一个内存单元,4表示内存单元的偏移地址) 修改的内存单元地址去sp里找,内容去这段命令最后找DS:XXX里的XXX便是。(SS:SP可以类比CS:IP吧)
栈顶的段地址存放在SS中,偏移地址存放在SP中,任意时刻,SS:SP指向栈顶元素,CPU从SS和SP中得到栈顶的地址,push是sp-2;pop相反,sp+2,额,栈顶越界会使部分数据被覆盖又是另一说了。
2.为何下图中2000:0~2000:f中的内容会发生改变
使用T命令单步追踪之后,至10/28/19:10还没有看懂。
王爽第二版《汇编语言》的答案
“因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。”
》总结与体会
像第一题中,我的答题方法可能有点“强答”“凑答案”哈,我知道啥叫啥,但是好像只知道啥叫啥,构造不成一个整体。由于这样,导致实验的不太成功,加之还看了其他同学做的博客,我做的真的是很糙了,就是简单的截屏+敲一下题目+附上答案。一次汇编作业,让我反思了我的前20年人生,抱拳。
汇编书上前三章多次提到“先不深究”,莫不是之后,一起究???
最后再补充以下三点
. . .