查看CPU和内存,使用机器指令和汇编指令编程
试验任务
1,使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
- 首先用e命令将机器码写入内存
再使用u命令反汇编查看汇编指令
然后使用rcs 和 rip改变CS:IP的指向
接着使用t命令一直执行得出结果
结果为 ax=0002 bx=4026
- 使用a命令写入汇编指令
使用t命令执行
结果为 ax=0002 bx=4026
2.将下面三条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方
mov ax,1
add ax,ax
jmp 2000:0003
执行结果
结果为 ax=0100
3.查看内存的内容
PC主机板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并改变它
我们使用d命令查看内存空间,发现生产日期在FFF0:00F5上
然后我们使用e命令试图改写它,但未成功,原因是ROM为只读存储器不能被修改
4.向内存从B8100H开始的单元中填写数据,如
-e B810:0000 01 01 02 02 03 03 04 04
屏幕上显示出4个不同颜色不同形状的图案,由此可知一个图案是由两个字节控制的
我们将第二个字节改为02,则第一个图案的颜色改变了,可见每两个字节中的后一个字节是控制图案的颜色
我们再将第一个字节改为02,则第一个图案的形状改变了,可知每两个字节中的前一个字节可以控制图案的形状
之后我们改变一下填写的地址,发现第二组与第一次执行时相同的图案在屏幕的其他地方浮现了
总结与体会
- 在第一个实验中使用e命令写入机器码后,使用t命令执行时发现CS:IP地址与我写入的不符,于是我使用了rcs和rip改变了CPU当前要读取、执行的内存地址。
- 第二个实验中jmp指令可以跳到某一个内存地址,由此实现循环计算。
- 第三个实验我发现我们无法改变ROM中的数据,原因是ROM为只读存储器不能被修改。
- 第四个实验中之所以在屏幕上显示了图案的原因是A000-BFFF为显存地址空间,当我们向显存输入数据并执行后,这个数据就会被输出到屏幕上,显示出我们实验中出现的图案。