汇编语言实验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 进行了入栈操作,值会改变。