实验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工具用法。
练习debug的使用:
使用debug、退出以及a命令t命令执行
使用常用的r命令,d命令,e命令
三、实验内容
1. 教材实验1(P35)
练习教材P35-45「预备知识:Debug的使用」,学习debug启动、退出及常用指令用法; 在练习基础上,完成「2. 实验任务」
2. 教材实验2(P71)r
练习「1.预备知识:Debug 的使用」 在练习基础上,完成「2. 实验任务」
四、实验结论
1.教材实验1(P45)
实验任务(1)
使用e命令方式写入指令:
使用a命令方式写入汇编指令:
实验任务(2)
三次执行后最终得到Ax寄存器为8:
实验任务(3)
找到日期记录在fff0:00f5 日期为01/01/92
尝试修改日期,发现修改失败,查询书可知该空间属于ROM的地址空间,属于只读不能写的地址。
实验任务(4)
根据书本要求对b810h地址操作,查书可知8000H的内存单元的数据会被显卡输入到显示器上。修改不同的值出现不同的颜色。
2. 教材实验2结论
教材实验2(P74)
实验任务(1)
根据要求预测出相应寄存器的值:
实际执行情况:
修改数据并查看
写入命令并执行:
发现与预测一致。
实验任务(2)
实验执行过程如下:
思考:
① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?
前三行指令通过ax寄存器中转使得ss:sp为指定的2000:0010。
答:mov sp,10指将10赋值给sp寄存器,说明sp寄存器可以直接用数值赋值(而ss属于段寄存器不可以)
初始时栈顶和栈底都是0483:FFFD
三行执行后栈顶为:2000:0010 栈底为 2000:000E
② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
答:前三部设置了栈段的位置,后面单步执行结果表面使用t指令执行时将ax的3123,3366分别被压入栈内,栈顶指针变化为0010,000E,000C
同时使用t指令后发现还未执行push指令时栈段2000:0到2000:f内出现变化,查询资料和书本可知该情况基于t指令引发cpu执行的中断过程。
根据书P249,单步中断引发的过程会使得标志寄存器入栈,CS,IP入栈,正好与此处0192,0483,010C对应。