实验一 用机器指令和汇编指令编程

一、实验目的

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命令以汇编指令的格式在内存中写入一条机器指令。

 

posted @ 2020-10-18 22:16  TimeBomb  阅读(52)  评论(4编辑  收藏  举报