实验1 8086汇编指令编码和调试
四、实验结论
1、实验任务1
2、实验任务2
- 使用-d FFF0:0 FF查看生产日期,结果如下图所示。
由图可以看出生产日期位于FFF0:F5到FFF0:FC单元中。

- 使用e命令尝试修改生产日期并再次使用d命令查看生产日期。

- 结论:e命令无法修改生产日期,原因是生产日期在ROM中,存储权限为只读,无法修改。
3、实验任务3
- 使用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:0单元往后一次输入数据05 06 05 06 05 06 05 06 05 06。结果发现单元中的数据并没有被修改,经过在网上搜索发现这里的数据显示的是屏幕上的内容,屏幕上是什么数据就是什么,所以最开始屏幕上没有东西时,输入数据不仅可以改变单元中的数据 值并且屏幕上也会有所改变。

4、实验任务4
- 填空
-
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 执行后,寄存器(sp) = 002E push [2] ; 执行后,寄存器(sp) = 002C push [4] ; 执行后,寄存器(sp) = 002A push [6] ; 执行后,寄存器(sp) = 0028 pop [6] ; 执行后,寄存器(sp) = 002A pop [4] ; 执行后,寄存器(sp) = 002C pop [2] ; 执行后,寄存器(sp) = 002E pop [0] ; 执行后,寄存器(sp) = 0030
- 回答问题
问题一:题目要求是把00220H ~ 0022fH用作栈空间。指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址和物理地址分别是?
答:逻辑地址为0020:0030,物理地址为00230H。
问题二:单步调试到汇编指令 push [6] 执行结束, pop [6] 执行之前,使用 d 20:20 2f 查看此 时栈空间数据,给出实验截图。

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

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

5、实验任务5
- 问题一:使用t命令单步执行 mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令 mov sp, 30 是什么时候执行的?
答:并不是执行完mov ss,ax就暂停了,mov sp,30和mov ss,ax一并执行了。
- 问题二:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通 过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特 别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。
答:内存中的黄色部分记录了cs和ip的值。原因是执行完t命令后发生中断,ip和cs便先后入栈。
6、实验任务6
- 程序源码
assume cs:code code segment start: mov cx, 10 mov dl, '0' s: mov ah, 2 int 21h add dl, 1 loop s mov ah, 4ch int 21h code ends end start
- masm与link对程序汇编链接过程,以及运行程序结果截图。
masm与link:

结果如下:

- 前缀PSP截图

7、实验任务7
- 补全后代码如下:
assume cs:code code segment mov ax, cs mov ds, ax mov ax, 0020h mov es, ax mov bx, 0 mov cx, 17h s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
原因:
第一个空:将代码段起始地址通过ax赋值给ds。
第二个空:从第三行到第十二行所需要的空间大小为17H。
- 在debug中调试,使用g命令将程序执行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命 令对0:200开始的内存单元反汇编,确认是否把task7.asm中line3-line12的代码复制到了目标内存 空间。 给出使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图。

可以看出代码复制成功。
浙公网安备 33010602011771号