201983290384 周梦青 实验一

实验任务一

使用masm、link得到8086汇编可执行程序及运行程序方法

实验任务二

PC机主板上的ROM中有一个生产时期,在内存FFF00H ~ FFFFFH的某几个单元中,请找到这个生产时 期,并试图修改它。

 

 

 

 

 

 不能修改

实验任务三

在debug中,使用e命令,向内存单元填写数据。 -e b800:0 03 04 03 04 03 04 03 04 03 04 从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。 在debug中,使用f命令,向内存单元批量填写数据。 -f b800:0f00 0f9f 03 04 把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。

实验任务四

 (1) 单步执行,在执行push指令和pop指令时,观察并记录栈顶偏移地址的寄存器sp值的变化情况。

 push ax需要执行两步
1 SP=SP-2
2 将ax中的内容送到SS::SP指向的内存单元处。

 pop ax同样也需要执行两步
1将SS::SP指向的内存单元的数据送入ax中。
2SP = SP + 2

(2) push [6] 指令执行结束后, pop [6] 指令执行结束前,使用d命令 d 20:20 2f 查看此时栈空间的 数据。

 

(3) pop [0] 指令执行结束后,使用d命令 d 20:0 7 查看此时数据空间内的数据是否有变化。

(4) 如果把最后四条指令改成截图中的顺序, pop [6] 指令执行结束后,使用d命令 d 20:0 7 查看此时 数据空间内的数据是否有变化。

 问题1:

ss:sp 0020:0030  00230

 实验任务五

问题1:使用t命令单步执行 mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令 mov sp, 30 是什么时候执行的?

对SS的初始化指令后面应紧跟SP初始化指令,单步中断不会在此中断

问题2:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通 过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特 别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。

 

 进行单步调试时,发生中断,使用栈存放CPU关键数据来保存原程序的入口。

实验任务六

在debug中,使用d命令,查看task5.exe的程序段前缀,观察这256个字节的内容,验证前两个字节是 否是CD 20。

 

 

 

PSP 前两个字节是CD 20

实验任务七

下面程序的功能是,完成自身代码的自我复制:把 mov ax, 4c00h 之前的指令复制到内存0:200开始的 连续的内存单元。 补全程序,并在debug中调试验证,确认是否正确实现了复制要求。

 

 

 

 cx为循环次数

posted @ 2021-10-23 14:40  木回  阅读(109)  评论(3编辑  收藏  举报