汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

时间:2024-06-15 12:04:56


在装完DosBox环境之后,就可以用debug模式进行汇编指令的编程了。

  • 实验内容:

    汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

首先用a指令进行数据的储存,然后用t命令进行调试。

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

可以发现ax,bx在不同的命令下发生了改变,cs的地址和指令是相同的,ip的值也是根据输入指令的长度而不断的增加。

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

    mov ax,1

    add ax,ax

    jmp 2000:0003

先观察一下实验要求,执行完第一步后ax= 1,第二步后ax  = 2,执行add 1次 2*2,执行2次,就是2*2*2就是2的3次方,那么2的8次方 就 add 执行 7次。

执行之前先将指令指向add语句 这样就会重复执行 add语句,用jmp 指令更改CS、IP寄存器的值,从而控制CPU执行目标指令。之后,就可执行我们写的汇编指令了,我们要先使用r指令改变 cs 和ip的指向,cs为代码段寄存器,ip为指针寄存器。在任意时刻,CPU将cs:ip指向的内容当做指令执行。

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

关于执行命令t的执行次数:执行第一二步执行需 2个t,那么执行第三步的t的时候实际上只是改变cs:ip的指向,并没执行cs:ip指向内容的机器指令,后面的7个jmp 每个需要执行2个t才能执行add方法。所以共需要执行t 16次才能计算出2的8次方。

第一次t命令:

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

最后一次t命令:(最后短线位置的t手抖了)

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

(3)查看内存中的内容。

PC机主板上的ROM中有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。 

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

尝试修改:

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

发现无法修改。

(4)向内存从B8100H开始的单元中填写数据,如:

-e B8100:0000 01 01 02 02 03 03 04 04

请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

可以看到,向B8100H单元中输入这些数据后,可以观察到界面上出现了一些彩色的图案,黄方框标识。

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

接着在相同的地址内填写不同的数据,可以看到出现了完全不同的图案。

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

下面改变输入数据的地址,可以看到显示的内容不变,位置改变了。

汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

说实话,我也不知道这是怎么回事。我就去查了查,度娘告诉我:这一段内存为显存,是RAM,可以改变其值在屏幕上的显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII码,后一个(高)为要显示的颜色。

实验总结:

(1)首先得理解并且熟练操作的一些指令。

在debug模式下常用的命令:

R命令:查看、改变CPU寄存器的内容;

D命令:查看内存中的内容;

E命令:改写内存中的内容;

U命令:将内存中的机器指令翻译成汇编指令;

T命令:执行一条机器指令;

A命令:以汇编指针的格式在内存中写入一条机器指令。

(2)通过这次实验,对debug的一些基本操作有了基本了解,如何写入机器代码和汇编代码,查看所需要的内容,并且知道了某些内存中存储的内容,以及它们中的内容是否可变等知识。

如果有什么错误的话,还希望各位大佬指出。谢谢!