汇编语言(第三版)王爽著(实验一)查看CPU和内存

一、实验目的

      掌握在Debug中使用命令进行汇编指令编程及执行

二、实验设备与环境

计算机

DOS操作系统或 Windows 操作系统

MASM.EXE, LINK.EXE, DEBUG.COM 或宏汇编集成环境

三、实验内容、程序清单及运行结果

1.使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后cpu中相关寄存器中的内容的变化

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

反汇编结果

汇编语言(第三版)王爽著(实验一)查看CPU和内存

要执行编写的代码,需要将cs:ip先修改成指向所编写代码的首地址,用r查询可知修改成功

第二个框显示即将要执行的代码和相关信息

汇编语言(第三版)王爽著(实验一)查看CPU和内存

依次执行t命令,可发现代码被一条一条的执行

从最上面的框的机器码可知,ip的增加值与所对应的代码的机器码的长度有关

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

这里类似al和ah的,表示一个字节,即8位。其中al表示ax的低8位,ah表示ax的高8位

当这些低位或高位进行运算时,如果有进位,那么进位记录将记录在cf中,而不会改变无关的低位或高位

汇编语言(第三版)王爽著(实验一)查看CPU和内存

2.将下面3条指令写入2000:0开始的内存单元中,利用这3条指令计算2的8次方。

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

将ax作为累加单元,初始值为1

Jmp 立即数,表示将立即数转移到ip中,由图可见这条指令可以改变IP的值

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

运算结束,可知jmp 立即数在这里起了一个循环的作用,使mov ax,ax循环执行了8次即可得到2的8次方

3.查看内存的内容

Pc机主板上的rom中写有一个生产日期,在内存fff00h-fffffh的某几个单元中,请找到这个生产日期并试图改变它

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验一)查看CPU和内存

可知生产日期在只读的地址空间,所以只能读取,不能写入

而且这个日期是虚拟的,应该可以在实模式下看到真实的日期

4.向内存从b8100h开始的单元中填写数据,看有啥现象,然后改变地址,再看有什么现象

汇编语言(第三版)王爽著(实验一)查看CPU和内存

可知b8100h在显存地址空间,所以在里面写的数据会被读取并解析成相应的屏幕信息,所以就可以看到屏幕显示东西了

  • 实验结论、实验体会

第一题:

学会了debug的一些简单操作。明白了csip是指向代码段的,用t命令前要确保csip指向要执行的指令地址。ip的变化与前一条指令的长度有关,指令的机械码多少个字节,就偏移多少。类似al和ah的,表示一个字节,即8位,其中al表示ax的低8位,ah表示ax的高8位,当这些低位或高位进行运算时,如果有进位,那么进位记录将记录在cf中,而不会改变无关的低位或高位

第二题:

Jmp 立即数,表示将立即数转移到ip中,使用这条指令可以实现指令的循环,也可以进行指令的跳跃执行。并且mov不可用在ip上。

第三题:

认识了 rom区的特点——只读,和实模式和虚拟的一些区别

第四题:

认识了

主随机存储器的地址空间

(存储数据、代码、指令)

显存的地址空间

(存储的数据会被显卡输出到屏幕)

各个rom的地址空间

(写入数据的操作不会改变这片地址空间的内容,因为它是只读的)

 

刚开始接触汇编,可以感受到学完这门课程可以对我学高级语言中的许多不明白之处进行补充,可以更好的理解如何从硬件层面来操控计算机,觉得这门课程是非常基础的课程,并且很重要。

通过这次实验体验到了机器码和硬件层的紧密性,语言的进化原因(机器码真的麻烦,和人类总是会想方设法使事情变懒的)