实验1 用机器指令和汇编指令编程
一、实验目的
1. 熟练掌握使用debug工具编写和调试x86汇编命令的方法
2. 掌握8086CPU、寄存器、内存的基础知识
3. 理解并掌握内存中多字节数据的存放:小端法
4. 理解并掌握「栈」内存空间的特性和使用
5. 掌握指令mov, add, sub, jmp, push, pop的基础用法
二、实验内容
1. 教材实验1(P35)
2. 教材实验2(P71),对「2. 实验任务」的(1)做如下两点调整:
① 在使用 a 命令输入指令调试之前,先使用 e 命令将内存单元 0022:0 ~0022:7连续 8 个字 节数据修改为 50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H
② 将 P74 实验任务(1)中第1行的 mov ax, ffff → 改为 mov ax, 0022
三、实验过程及结论
教材实验一
实验任务(1)
使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。
机器码 汇编指令
b8 20 4e mov ax,4E20H
05 16 14 add ax,1416H
bb 00 20 mov bx,2000H
01 d8 add ax,bx
用E命令和A命令两种方式将指令写入内存,并用T命令执行
(1)E命令

(2)A命令


实验任务(2)
将下面三条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方。
mov ax,1
add ax,ax
jump 2000:0003
2的8次方256为0100H。
用A命令写入指令,并用T命令执行



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

该生产日期并未被改变,原因在于地址C0000~FFFFF中的内存单元为只读存储器的地址空间,所以写入数据的操作是无效的,因为这相当于改变只读存储器中的内容。
实验任务(4)
向内存从B8100H开始的单元中填写数据:-e B810:0000 01 01 02 02 03 03 04 04
先填写不同的数据,观察产生的现象;再改变填写地址,观察产生的现象。
1.填写不同的数据
2.改变填写的地址
结果:观察实验结果,发现显示器上会出现色块,不同的数据所显示的色块不同,向不同内存单元写入数据显示的色块位置也不同。因为向地址A0000~BFFFF的内存单元中写入数据就是向显存中写入数据,这些数据会被显卡输出到显示器上。
教材实验二
实验任务(1)
1)使用e命令将内存单元0022:0 ~0022:7连续8个字节数据修改为50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H并查看:
2)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况填空。





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



结果分析:前3行汇编指令的功能是设置栈的段地址SS=2000H,不能直接向段寄存器SS中送入数据,所以用ax中转,因为栈为空,所以设置栈顶的偏移地址SP=0010H。
初始栈顶:2000:0010H
初始栈底:2000:000EH
初始没有执行代码时,2000:0~2000:f的值都为00,创建站结构指向这段内存后出现数据,使用t命令会引发单步中断,执行中断时,CPU会将寄存器变量自动压栈到栈中,当执行到push ax时,将ax中的数据压入栈中。
浙公网安备 33010602011771号