实验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工具用法。在课程QQ群文件->工具软件及相关文档说明文件夹,有如下文档:

1)关于汇编实验软件的简要说明.pdf 2)debug工具简介及用法.pdf

三、实验内容

1. 教材实验1(P35) 
练习教材P35-45「预备知识:Debug的使用」,学习debug启动、退出及常用指令用法;在练习基础上,完成「2.实验任务」
2. 教材实验2(P71)
练习「1.预备知识:Debug 的使用」在练习基础上,完成「2. 实验任务」
为了便于验证实验结果,对「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

实验前,请先从理论上分析指令执行后各个填空处的值,并记录下来。

实验时,通过在debug中调试,观察实验结果与理论分析是否一致;如果存在不一致的情形,尝试发现问题所在,并分析原因。

四、实验结论

1.教材实验1结论

实验任务(1)(由于机器码数据较多,故仅选取前四行实验)

用E命令将指令写入内存:

 

 

用T命令执行:

用A命令将指令写入内存:

用T命令执行:

实验任务(2)

a命令写入:

t命令单步调试:(只给出调试开始和调试出正确结果部分)

说明:在十进制中2的8次方为0100,在十六进制中2的8次方为100H

实验任务(3)

说明:通过E命令试图修改内存单元的部分数据,CPU向内存单元写入数据的操作是没有结果的,内存单元中的内容不会被改变,该内存单元实际上就是ROM存储器的一个单元。

实验任务(4)

向内存从B8100H开始的单元填写数据:

填写不同数据:

改变填写地址:

说明:用E命令向内存地址为B810H的内存单元中写入数据,会发现右上角出现四个不同颜色的彩色图案,当只改变内存单元中的数据时,图案的位置未发生改变,发生改变的是图案的颜色和形状;当只改变内存地址时,图案的颜色和形状未发生改变,改变的是图片所处的位置。

教材实验2结论

实验任务(1)

说明:经检查核对,理论分析与实验结果一致

实验任务(2)

说明:

前三行汇编指令功能:将ax赋值为2000H,再把ax中的值赋值给段寄存器ss,mov sp,10意味着留10个内存空间给接下来的寄存器;初始时栈顶是23,栈底是31

变化:从执行完mov ss,ax后,内存单元中的数据就发生了变化,出现了不需要的数字

原因:栈顶在有数据变动的sp值的变化规则为入栈:sp=sp-2;出栈:sp=sp+2

五、实验总结

本次实验主要应用到R命令(查看,修改寄存器中的内容),D命令(查看内存中的内容),E命令(修改内存中的内容),T命令(执行代码行命令),在实验2中一定要理解栈在系统内存中的变化原理和栈顶在有数据变动时sp值的变化规则。

 

posted @ 2020-10-11 16:55  LS8029  阅读(159)  评论(5)    收藏  举报