实验一
题目预览
- 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后的CPU中相关寄存器中内容的变化。
- 将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方
- 查看内存中的内容
- 向内存从B8100H开始的单元填写数据。
1
使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后的CPU中相关寄存器中内容的变化。
机器码 汇编指令
b8 20 43 mov ax,4E20H
05 16 14 add bx,1416H
bb 00 20 mov bx,2000H
01 d8 add ax,bx
89 c3 mov bx,ax
01 d8 add ax,bx
b8 1a 00 mov ax,001AH
bb 26 00 mov bx,0026H
00 d8 add al,bl
00 dc add ah,bl
00 c7 add bh,al
b4 00 mov ah,0
00 d8 add al,bl
04 9c add al,9cH
我们用A命令从1000:0开始写入汇编指令
用r cs和r ip改变CS:IP的指向
一步一步运行,结果如下
机器码 汇编指令 运行结果 CS:IP
b8 20 43 mov ax,4E20H ax=4E20 1000:0003
05 16 14 add ax,1416H ax=6236 1000:0006
bb 00 20 mov bx,2000H bx=2000 1000:0009
01 d8 add ax,bx ax=8236 1000:000B
89 c3 mov bx,ax bx=8236 1000:000D
01 d8 add ax,bx ax=046C 1000:000F
b8 1a 00 mov ax,001AH ax=001A 1000:0012
bb 26 00 mov bx,0026H bx=0026 1000:0015
00 d8 add al,bl ax=0040 1000:0017
00 dc add ah,bl ax=2640 1000:0019
00 c7 add bh,al bx=4026 1000:001B
b4 00 mov ah,0 ax=0040 1000:001D
00 d8 add al,bl ax=0066 1000:001F
04 9c add al,9cH ax=0002 1000:0021
2
将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方
mov ax,1
add ax,ax
jmp 2000:0003
使用A命令从2000:0输入指令
改变CS:IP的指向
使用T命令执行程序即可
省略
3
查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并改变它。
物理地址FFF00H~FFFFFH可用FFF0:00~FFF0:FF表示
使用D命令查看FFF0:00~FFF0:FF内存中的内容
找到了生产日期在FFF0:00F0~FFF0:00FF内存中
用E命令修改FFF0:00F0~FFF0:00FF内存中的内容
用d命令查看修改过后的内容
我们可以发现内存中的内容没有改变!
那是因为在8086PC机内C0000~FFFFF是各类ROM地址空间。ROM是只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。我们向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。
4
向内存从B8100H开始的单元中填写数据,如:
e B810:0000 01 01 02 02 03 03 04 04
进入debug模式,输入上面的指令。会发现多了三个表情
在8086PC机中A0000~BFFFF内存是显存地址空间。向地址A0000~BFFFF的内存单元中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上。
我们一个一个输入观察一下,给B810:0001赋值01,多了个表情
给B810:0002赋值01,表情换了颜色
给B810:0003赋值02,多了一个表情
给B810:0004赋值02,表情换了颜色
在来多几次可以发现,本题中,在一个字(16位)中,低位字节决定了图案,高位字节决定了颜色。