实验任务一:
一、用R命令查看,改变CPU寄存器的内容
查看:
修改AX的内容:
二:用D命令查看内存中的内容
D命令预设地址处的内容
查看特定长度的内容
三、用E命令修改内存中的内容
四、用U命令将内存单元中的内容翻译为汇编指令显示
五、用T命令执行指向CS:IP的单条指令
六、用A命令以汇编的形式向内存中写入机器指令
实验任务二:
可以看出,日期存在于FFF0:00F6到FFF0:00FD中,占八个字节。
尝试修改:
修改无效。原因是在8086中,C0000~FFFFF中内容用作ROM空间,受到保护无法修改。
实验任务三:
在debug中使用E命令向内存单元填充数据
实验任务四:
录入如下内容:
单步执行,观察结果。
填空:
002E 002C 002A 0028 002A 002C 002E 0030
回答问题:
问题1:逻辑地址:0020:0030、物理地址:00230h
问题2:
问题3:
问题4:
实验任务五:
问题1:两条指令一起执行。debug的T命令在执行修改寄存器SS的指令时,下一条指令也跟着执行。
问题2:根据题意进行跟踪。
可以看到题目中划线部分为代码偏移量,即IP与CS的值。随着代码的执行,代码的偏移量在不断地变化:0108->010B->010C->010F->0110
执行入栈操作后,栈顶指针向前移动2个字节,所以整体向前移动2个字节。
实验任务五:
使用masm与link进行编译连接
观察程序段前缀,发现前两个字节是CD 20。验证完成。
实验任务七:
补全代码,完成代码自身的自我复制:把mov ax, 4c00h之前的指令复制到内存0:200开始的
连续的内存单元。
第一空:cs
为了定位到代码的开头,使用了代码段的开头cs
第二空:23
可以使用debug的u命令得到。
汇编截图: