实验1 8086汇编指令编码和调试
1. 实验任务1
【跳过】
2.实验任务2
·在debug中,使用d命令查询FFF00H ~ FFFFFH所有单元中的内容,我们发现在FFFF0~FFFFFH这段内存中存储着生产日期,为1992/01/01.

·使用e命令修改所在的内存单元:
并未修改成功。原因是FFF00H~FFFFFH中内存单元中写入数据时无效的,因为等于改写只读存储器中的内容。
3. 实验任务3
在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。
4. 实验任务4:
填空:
问题一:逻辑地址为:0020:30,物理地址为:00230H
问题二:

问题三:

问题四:

5. 实验任务5
问题1:我通过debug测试发现指令mov ss,ax执行完后直接跳转至mov,sp,30指令之后,但是根据寄存器的情况,我们发现ss段的值被改变,说明指令得到了执行。

根据书P74对此的描述,这个现象产生的原因可能是中断机制。
问题二:黄色下划线部分是之前已经在内存中cs:ip的值,所以只有最前面部分被ss段和f填充的值修改。
6. 实验任务6

该程序的功能为通过循环输出0~9;
使用d命令我们发现psp的前两个字节确实为CD 20

7. 实验任务7
(1)因为需要完成程序的自我复制所以ds所指向的地址应为程序段的地址cs;
每次复制一个字节,整个程序的大小存储在cx中,所以循环次数为cx的值。
assume cs:code code segment mov ax,cs mov ds,ax mov ax,20h mov es,ax mov bx,0 mov cx,cx s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
我先将源程序反汇编:

使用g命令将程序执行到loops之后、movax,4c00h之前,

观察是否成功复制。


浙公网安备 33010602011771号