实验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.教材实验1结论
实验任务(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命令写入内存

③ 使cs:ip指向当前cs:ip

使用t命令单步执行指令:

实验任务(2)
将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
① 使用a命令写入指令

将cs:ip:转到当前位置并用t命令单步调试

如图,执行到最后一次

执行到2的8次方,得到正确结果AX=0100
实验任务(3)
查看内存中的内容。
PC机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找出这个生产日期并试图改变它。
① 使用d命令查找对应单元内存

找到生产日期为1992年1月1日
② 尝试使用e命令修改生产日期。

修改失败,因为C0000-FFFFF地址空间为各类ROM地址空间,只读存储器无法修改内容。
实验任务(4)
向内存从B8100H开始的单元中填写数据,如:
-e B810:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
① e指令从B8100H填写数据

右上角出现图案
② 改变填写的数据

右上角出现与之前不同的图案
③ 改变填写的地址

改变填写的地址后,在不同位置出现了图案
可知从A0000~BFFFF的内存单元是显存地址空间,向显存中写入数据,这些数据才会被显示卡输出到显示器中,数据决定了显示图案,同时在该空间内的不同地址决定了图案显示位置。
2.教材实验2结论
实验任务(1)
① 使用e命令将内存单元0022:0~0022:f中的数据修改为50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H,修改后再用d命令查看是否正确写入的操作

② 使用a命令输入p74的指令。

③ 每一行指令单步调试




④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式复制在文档中。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。如不一致,分析原因。

实验结果与理论相同。
实验任务(2)
① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分。

② 单步调试每一行汇编指令的截图。每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化,并思考原因。



文字描述:
① 将2000H存入寄存器ax,将寄存器ax中的数据2000H存入栈段寄存器ss,将数据10H存入栈指针寄存器sp中。mov sp,10意味着将2000:0000-2000:000f为栈空间,初始化栈顶为2000:0010,栈底为2000:000e
② push ax中的数据3123H后,2000:000e与2000:000f中存入23H,31H这是入栈的数据3123H同时按小端法存放,后按同样方法入栈数据3366H,存在地址2000:000c,2000:000d中
浙公网安备 33010602011771号