实验一

实验1.1.a命令将指令写入内存

 1.目标写入的代码

 

 

 

单步调试的结果如下:

 

 

 

 

 

实验1.2.e命令将指令写入内存

 

代码如下,经过同样的单步调试,发现结果与用A命令写入一样

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

实验2.将三条指令写入,并计算2的八次方

 

 

 

 

 

 

 

在十进制转十六进制中,256的十六进制表示为100H所以当循环四次后求得结果。

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

 

实验3.查看内存中的内容

 

在内存FFF00H-FFFFFH中用D命令即可查到自己的生产日期,如下图所示

 

 

 

然后我就试着开始修改生产日期,但在用e命令修改后结果依旧不变

 

 

  在翻阅书后1.15节并且百度搜索后,我发现地址A000H-FFFFH23KB空间是各个ROM的地址空间。而且在向地址C0000-FFFFF的内存单元中写入数据的操作是无效的,因为这等于在修改只读存储器中的内容。

  A000HFFFFH24KB空间为各个ROM的地址空间,ROM--Read Only Memory 中文意思是:只读存储器,掉电后数据不丢失的一种内存。因为FFFF0005FFFF000CROM只读存储器)中的单元,所以FFFF0005FFFF000C具有read only(只读)的性质,因此修改后内存数据没改变。也就是说,生产日期是改不了的。

---------------------------------------------------------------------------------------------------------------------------------

 

实验4.从内存中向B8100H开始的单元填写数据

 

 

在输入不同的指令后右上角会出现不同颜色和形状的图案。

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

 

实验中出现的问题

 

发生的问题:在调试的过程中,发现了如下问题,即A的值始终不发生变化。

 

 

 

  在尝试了好久后,才发现IP地址的值始终没有改变,而T命令的作用是执行CS:IP指向的内存单元的指令,所以不管我怎么单步调试,AX的值始终不会改变。解决的方法有两个,一个是直接用系统初始的CS:IP的地址进行指令的写入;另一个是修改CS:IP的地址,方法如下:(PS:我之后设置IP的时候设成0001,但下面用的-a 10000还是找了好久错误才知道自己错在哪里,细心很重要!!!!)

 

 

 

 

 

 

posted @ 2018-10-22 22:51  Nebulas  阅读(202)  评论(1编辑  收藏  举报