实验一 用机器指令和汇编指令编程
一、实验目的
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工具用法。
三、实验内容
① 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?
汇编指令 功能
mov ax,2000
mov ss,ax 设置栈的段地址,SS=2000H,不能直接向段寄存器SS中送入数据,所以用ax中转
mov sp,10 设置栈顶的偏移地址,因栈为空,所以设SP=0010H
初始时栈顶和栈底都是2000:0010
② 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。
在用t命令执行mov ss,ax的时候,它的下一条指令也紧接着执行了,引发中断机制,CPU会将一些中断
例程使用的寄存器变量自动压栈到栈中
如图中标注的08 01 3F 07对应CS:IP的状态
四、实验总结
push ax的执行
(1) SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈前面的单元为新的栈顶;
(2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。
Debug功能
(1)用Debug的R命令查看、改变CPU寄存器的内容。
(2)用Debug的D命令查看内存中的内容。
(3)用Debug的E命令改写内存中的内容。
(4)用Debug的U命令将内存中的机器指令翻译成汇编指令。
(5)用Debug的T命令执行一条机器指令。
(6)用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。