实验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
练习教材P35-45「预备知识:Debug的使用」,学习debug启动、退出及常用指令用法; 在练习基础上,完成「2. 实验任务」
2.教材实验2
练习「1.预备知识:Debug 的使用」 在练习基础上,完成「2. 实验任务」
四.实验结论
1.教材实验1结论
#实验任务(1)
首先使用e命令写入内存,如下所示:

使用t命令执行之后的结果如下所示:

然后使用a命令写入内存:

t命令执行结果如下:

# 实验任务(2)
实验要求计算2的8次方的结果,使用 mov ax,1;add ax,ax;jmp 2000:0003;三条命令完成操作。一二步就是计算出1+1,然后当使用jmp时,那么就跳回到第二条指令add ax,ax;也就是把得到的2再次进行翻倍,然后计算2的8次方则只需要重复七次jmp指令就可以做到了,其具体代码如下所示:

然后可以看到ax部分已经得到最后的结果是0800(16进制),如下所示:

#实验任务(3)
查看内存内容,题目中已经给出了内存范围是FFF00H~FFFFFH,然后只需要使用 d指令对内存进行检索就可以了,结果如下所示:

然后尝试使用e指令去改变生产日期,发现无法更改,考虑到这个日期存在于系统的ROM区,所以不允许修改。
#实验任务(4)
向内存中填写数据 -e b810:0010 01 01 02 02 03 03 04 04,然后观察产生的变化:

可以看到,在图片的右上角出现了几个小图标,A0000~BFFFF对应的是显存地址,所以在地址段中输入数据时会在显示器上面显示出来。
2.教材实验任务(2)
#实验任务(1)
使用debug,将如下程序写入,并且依据情况填空:
mov ax,0022 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ;ax=5150 add ax,[2] ;ax=A4A2 mov bx,[4] ;bx=5554 add bx,[6] ;bx=ACAA push ax ;sp=00FE;修改的内存单元的地址是2200FE,内容为A4A2 push bx ;sp=00FC;修改的内存单元的地址是2200FC,内容为ACAA pop ax ;ax=ACAA pop bx ;bx=A4A2 push [4] ;sp=00FE;修改的内存单元的地址是2200FE,内容为5554 push [6] ;sp=00FC;修改的内存单元的地址是2200FC,内容为5756
首先修改内存单元中的数据,-e 0022:0 50 51 52 53 54 55 56 57
具体代码如下所示:

然后输入上述的代码:

然后使用t命令按部执行,如下所示结果:



可以从执行结果中看到与之前的填空结果一致。
#实验任务(2)
输入书中的执行代码,然后使用d命令查看每一步内存单元的数据结果,如下所示:



在上图中可以看出,每一步mov指令的执行,内存单元中数据都在前移,类似一个堆栈的过程,所以dos本身就存在了一个栈,当系统没有指定栈内存时,则使用这个默认的栈去存储数据,其中mov sp,10,则是指定了一部分的栈内存,起始位置是2000:0010,可以看到当push ax之后,sp=000E,
所以,不断使用mov命令对ax内存单元赋值,可以看到也是与之相对应的一个堆栈过程。
五.实验总结
1.在本次实验中,我了解了如何使用汇编命令和机器指令去编写一些简单的程序,例如计算2的次方,然后就是在编写好汇编指令后,使用t命令去一步一步的跟踪执行,可以清楚的看到每一步中内存单元中的变化,同时使用d命令可以查看内存单元中的数据变化,都帮助我更加清楚的了解了其中的工作原理。
2.关于堆栈的部分,可以知道在dos中本身存在了一个栈,每一次mov的赋值都是一个堆栈的过程,当分配了栈空间后,则使用分配好的栈内存,同时内存中数据的栈存储方式是小端法,也就是数据高位存在内存高位,数据低位存在内存低位,需要在取出数据时注意到这一点,理解大端与小端的区别所在。


浙公网安备 33010602011771号