汇编语言实验1

一、实验目的
1. 熟练掌握使用debug工具编写和调试x86汇编命令的方法
2. 掌握8086CPU、寄存器、内存的基础知识
3. 理解并掌握内存中多字节数据的存放:小端法
4. 理解并掌握「栈」内存空间的特性和使用
5. 掌握指令mov, add, sub, jmp, push, pop的基础用法

 

 二、实验准备

1.复习教材第1~2章内容,完成教材内相关检测点

2.复习教材第3章「栈」的知识:栈的特性、寄存器 SS 和 SP、指令 push 和 pop ,完成教材 3.6~3.9 节内的问题 3.6~3.12,检测点 3.1~3.2 3. 结合教材实验1(P35)和课程QQ群文件中的文档,学习debug工具用法。

 

三、实验内容

1. 教材实验1

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

用e命令将指令写入内存:

 

用u命令反汇编写入的指令:

 

用A命令将指令写入内存,并用T命令单步执行:

 

 

 

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

mov ax,1

add ax,ax

jmp 2000:0003

使用a指令将汇编指令写入内存:

 

 

  用t进行单步执行后,ax为0100,2^8。

 

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

 

 

 

找到了ROM的生产日期,但无法更改其值,因为ROM是只读存储器,不可修改其值。

 

(4)向内存B8100H开始的单元中填写数据,如:-e B810:0000 01 01 02 02 03 03 04 04请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

 

 

 

 

这是因为8000H-9FFFH是显存地址空间不同的数据会显示不同的图案,如果改变地址,则显示的位置会发生偏移,如果地址不在8000H-9FFFH,则不显示。

 

 

2.教材实验2

(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

 

 

 

 

实验结果为:

mov ax,[0]     ;ax=5150

add ax,[2]      ;ax=A4A2

mov bx,[4]     ;bx=5554

add bx,[6]      ;bx=ACAA

 

push ax         ;sp=00FE;修改的内存单元的地址是2200:00FE内容为A4A2

push bx    ;sp=00FC;修改的内存单元的地址是2200:00FC内容为ACAA

pop ax   ;sp=00FE;ax=ACAA

pop bx   ;sp=0100;bx=A4A2

 

push [4]    ;sp=00FE;修改的内存单元的地址是2200:00FC内容为5554

push [6]         ;sp=00FC;修改的内存单元的地址是2200:00FE内容为5756

 

(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变

 

mov sp,10 栈顶偏移地址为10

栈顶的起始地址为2000:0;栈顶偏移地址为10;栈顶地址为:2000:0010

2000:0-2000:f中的内容发生变化是因为2000:0-2000:f中存储了栈的相关数据,而CPUCS IP 进行了入栈操作,值会改变。

 

posted on 2020-10-16 12:55  飞羽0-0  阅读(561)  评论(3编辑  收藏  举报