GitHub

第二章实验

四  实验结论

1.使用Debug。将程序段写入内存

(1)用a命令将指令写入内存

出现error的原因是ax后未加逗号,debug里默认16进制,不需要再加H

(2)修改cs,ip值,指向输入的程序段

(3)用t命令逐条执行,观察寄存器的变化

(4)用e命令将指令写入内存

(5)用 t 命令执行同上

 

2  采用指令计算2的8次方

(1)将三条指令写在2000:0开始的内存单元里

(2)修改CS IP指向

 (3)用t指令逐条执行 

 

 

.........

 

(4)最后ax上的结果是0100H,为16进制数,转换为10进制就是256=2^8;

 问题:这样计算效率比较低,会不会有效率更高的?

3.查看内存中的内容

(1)在内存FFF00H~FFFFFH的某几个单元中会有主板的生产日期,找到生产日期并试图改变它

 

(2)我们可以在右边看到生产日期01/01/92,其对应的内存数据为 30 31 2F 30 31 2F 39 32   

(3)我用e命令尝试修改日期是10/10/29,即对应的内存数据为31 30 2F 31 30 2F 32 39

 

  (4) 结果可以看出修改不了日期对应的内存数据,即日期修改不了

 

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

(1)输入数据后会发现右上角出现了彩色标记

(2)改变第一个数据,发现彩色标记行数发生变化

(3)之后改变数据会发现彩色标记的颜色,个数和形状会随着数据改变发生变化

五 总结与体会

1.在写汇编指令时,改变寄存器中的数据时,默认16进制,不需要在数据后加H

2.我们基于一个计算机硬件系统编程时候,必须知道这个系统的内存地址空间分配情况。我们在存储器中读写数据时,是要分配地址的,我们要保证读写操作在预期的存储器上进行,就要了解系统的内存地址分配情况,就像最后一个实验,b810地址在在显存地址空间,在这个内存单元写入数据,数据会被写入显存中,然后被显卡输出到显示器上。

3. 不同计算器系统的内存地址空间的分配情况是不同的,例 8086PC机的内存地址空间分配情况

 

注意:

从地址0~9FFFF的内存单元中读取数据,实际上是在读取主随机存储器中的数据;

向地址A0000~BFFFF的内存单元中写数据。就是向显存中写入数据,这些数据会被显示在显卡然后输出到显示器上;(比如第四个实验的彩色标记)

向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器的内容(比如第三个实验,无法改变日期)

(摘自《汇编语言》王爽)

 

posted @ 2018-10-13 20:03  繁华似锦觅安宁  阅读(357)  评论(2编辑  收藏  举报