实验任务1
任务
使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
mov ax,4E20H
add ax,1416H
mov bx,2000H
add ax,bx
mov bx,ax
add ax,bx
mov ax,001AH
mov bx,0026H
add al,bl
add ah,bl
add bh,al
mov ah,0
add al,bl
add al,9CH
过程
编写程序
查看是否写入成功
执行程序
首先修改CS和IP的值,指向程序起始处(1000:0),准备执行程序:
执行第①行:
执行第②行:
执行第③行:
执行第④行:
执行第⑤行:
执行第⑥行:
执行第⑦行:
执行第⑧行:
执行第⑨行:
执行第10行:
执行第11行:
执行第12行:
执行第13行:
执行第14行:
实验任务2
任务
将下面的3条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方:
mov ax,1
add ax,ax
jmp 2000:0003
过程
编写程序
执行程序
首先修改CS和IP的值,指向程序起始处(2000:0),准备执行程序:
第1次进入循环:
第2次循环:
第3次循环:
第4次循环:
第5次循环:
第6次循环:
第7次循环:
第8次循环:
第9次循环:
实验任务3
任务
PC机主板上的ROM中写有一个生产日期,在内存FFF00H - FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
分析
地址在FFF00H起始,所以段地址应该设为:CS = FFF0,偏移起始地址为:IP = 0000H,终止偏移地址为IP = 00FF。
过程
查找日期
查看区间地址内的内容,找到的生产日期如下:
修改日期
从上图中可以看到生产日期起始地址为:FFF0:00F5,尝试修改:
原因分析
8086 CPU的1M内存地址空间划分如下:
FFF0:00F5对应的物理地址为:FFF0 * 16 + 00F5 = FFF00 + 00F5 = FFFF5,而FFFF5这个地址对应的是ROM存储器,只能进行读操作,不能进行写操作,所以修改内容会失败。
实验任务4
任务
向内存从B8100H开始的单元中读写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
过程
原因分析
8086 CPU的1M内存地址空间划分如下:
B810:0000对应的物理地址为:B8100,这个地址对应的存储器是显存,所以修改数据后,显卡会将显存数据输出到显示器,所以屏幕上会出现效果。