微机原理实验指导书.docx
《微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书.docx(14页珍藏版)》请在冰豆网上搜索。
微机原理实验指导书
微机原理与接口
实验指导书
湖南理工学院
2011年9月
实验一汇编编译器的使用及程序调试
实验目的:
掌握Masm的使用;掌握Link的使用;掌握Debug的使用;熟悉一种界面操作下的集成汇编语言编译器。
实验要求:
(1)根据实验目的,认真完成实验中给出的任务;
(2)根据实验过程和结果,完成实验报告并及时上交相关文档;
(3)在实验报告中应认真写出自己的实验心得和体会;
(4)每人一组,独立完成。
实验原理及内容:
实验内容:
本实验是汇编语言学习的第一个实验,要求利用汇编语言实现一个Dos界面下的最简单的“HelloWorld”程序,只要可以实现在屏幕上输出一行字符即可;
实验原理:
Ø一般的汇编程序包括两个部分:
数据段和代码段(有的程序还会有堆栈段),每个部分都有比较固定的格式;
Ø汇编程序的输入和输出实现相对比较麻烦,需要调用Dos中断来实现,希望学习输入和输出中断是如何实现的;
Ø对于在字符界面下的汇编程序从asm源代码到生成可执行exe文件中间有多个步骤,需要用到masm、link,需要熟练掌握;
Ø汇编语言的调试相对也比较麻烦,需要用到Debug命令,希望掌握常用的Debug选项,能够看懂反汇编的结果。
实验软硬件环境:
奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。
实验步骤和方法:
本实验重点在于熟悉汇编语言编译器的使用及程序的调试,实验内容相对比较简单,但是中间需要大家熟练掌握其中涉及到的每一个步骤,为后续实验打下良好的基础。
下面是以MASM5.0,在winxp环境下,按照给定的任务为例进行的步骤说明(由于这是第一个汇编程序,我们提供一个最基本的源程序供大家参考;):
(5)将包括MASM、LINK以及DEBUG的文件架MASM拷贝到计算机C盘的根目录下;
(6)打开记事本,输入如下代码:
DATASSEGMENT;数据段
msgdb"HelloWorld!
",13,10,"$";此处输入数据段代码
DATASENDS
STACKSSEGMENT;堆栈段
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,msg;此处输入代码据段代码
movah,9
INT21h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
保存为firPro.asm,保存位置为“C:
\masm\”。
a)注意:
后缀名一定要为“.asm”,
(7)在“运行”窗口键入“cmd”,回车,打开字符界面,进入masm文件夹下,如图1-3所示;
图1-3进入masm文件夹
(8)键入masmfirPro.asm,并回车,如图1-4所示。
其中:
Objectfilename是编译为目标文件的名称,直接回车,表示默认和源文件同名,只是后缀名不同,本试验中均为默认;编译之后文件夹中出现一个新文件:
firPro.obj,如图1-5所示:
图1-4masm后的结果
图1-5masm命令的执行
(9)键入linkfirPro.obj,回车,如图1-6所示:
其中:
RunFile是可执行的目标文件名,直接回车,表示默认和源文件同名,只是后缀名不同。
编译之后文件夹中出现一个新文件:
FIRPRO.exe,如图1-7所示:
(10)键入可执行文件名FIRPRO,回车,显示的运行结果如图1-8所示:
(11)利用Debug,进行反汇编,键入:
Debugfirpro.exe,回车,如下图1-9所示:
(12)在出现的光标后,键入U,出现反汇编后的结果,如图1-10所示:
(13)键入q,回车,推出反汇编程序,如图1-11所示:
至此,我们对MASM、LINK以及DEBUG的使用方法已经有了比较清楚的了解。
另外,我们还提供了另外一个集成的编译环境,“MasmforWindows集成实验环境”,大家可以仿照上述步骤,熟悉一下所提供的集成试验环境。
希望大家在熟悉了最基本的masm、link以及Debug的基础之上再去使用所提供的集成试验环境!
图1-6link命令的执行
图1-7编译之后出现的可执行文件
图1-8可执行文件的执行结果
图1-9反汇编之后的结果
图1-10反汇编命令U的结果
图1-11推出反汇编的命令
2.思考题:
(1)在图1-4中,masmfilename.asm后,如果不是连续回车,而是输入字符串结果会有什么不同;
(2)在图1-11中,每行的类似于“0B4F:
xxxx”表示什么意思?
(3)在图1-11中,为什么首行和源程序不同,而又有那些是相同的,可否给出一些原因?
注意:
思考题不做硬性要求。
3.评分标准:
(1)掌握Masm、Link和Debug的使用(30%);
(2)输入一个简单的程序,利用Masm和Link将其编译为可执行程序(30%);
(3)使用Debug查看程序的机器代码;(20%)
(4)实验报告编写认真详细,按时上交(20%)。
实验二分支程序实验
1. 实验目的:
(1) 掌握分支程序的设计方法
(2) 掌握利用DEBUG修改参数、检查结果的方法。
(3) 掌握汇编语言源程序的编辑、汇编、连接及调试过程。
2. 实验内容
(1) 编写一个程序,显示AL寄存器中的两位十六进制数
(2) 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
3. 实验准备
(1) 编写实验内容要求的两个程序。
(2) 写出调试以上程序,即修改程序参数,检查结果的操作方法。
(3) 熟悉源程序汇编、连接命令的使用方法即要回答的内容。
4. 实验步骤
(1) 用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。
(2) 对其进行汇编及连接,产生.EXE文件。
(3) 对.EXE文件进行调试运行。
a. 用DEBUG调试运行,学会修改AL内容的方法。
b. 对DSPKEY.EXE键入不同的字符,分别进行调试。
c. 在MS-DOS下运行这两个.EXE文件。
5. 实验报告要求
画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
6. 参考程序清单
(1) 显示AL中两位十六进制数程序:
;DISPHEX.ASM
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;显示高位ASCII码
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H;显示低位ASCII码
MOVAH,4CH
INT21H
CODEENDS;返回DOS
ENDSTART
1.实验预习要求:
预习相关的汇编语言指令,着重是理解相关寄存器的特定用途,如:
SI、CX等,以及寄存器的高低位可以分开使用的特点。
2.思考题:
(1)总结汇编语言中的寄存器分为那几类,每类各有什么特点?
(2)总结汇编语言中如何利用相关指令实现分支程序设计?
3.评分标准:
(1)正确的设计和实现从一组数中挑选出最大值和最小值,能够正确的使用相关的寄存器(SI和CX),实验结果正确(80%);
(2)实验报告编写认真详细,按时上交(20%)。
实验三循环程序设计
实验目的:
通过上机的编程,掌握汇编语言中实现循环的常用指令组合;掌握汇编语言中不同种类循环程序设计的基本方法。
实验要求:
(1)本实验项目要求利用汇编语言实现对一组数的“冒泡法”排序。
(2)每人一组,独立完成。
(3)根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!
实验原理及内容:
循环结构是一种常见的程序结构,在汇编语言程序设计中也经常用到,是一种基本的程序设计结构。
循环结构一般是根据某个条件为真或者假来判断是否需要继续执行循环体。
循环结果一般包括如下3个部分:
循环初始部分:
一般是为循环作准备的部分,如:
设置循环计数器等;
循环体部分:
是需要被重复执行的部分,包括循环工作部分和修改部分,其中修改部分一般是和循环条件相关的,规律性地修改循环条件;
循环控制部分:
主要是判断循环条件是否成立,决定是否需要继续进行循环等。
本实验要去实现“冒泡法”排序,在实验过程中,要利用汇编语言实现一个多重循环的程序。
对这个问题,可以分析如下:
假设在以BUF为首地址的存储区中存放有N个符号数。
“冒泡法”排序的基本思路是:
从第一个数开始依次对相邻2个数进行比较,如果前面的数比后面的数大,则交换位置(即大数沉入下面),否则,不就交换二者位置。
这样,第一次排序后,最大的数已经放到了最后一个位置,第二次排序后,次大的数已经放在了倒数第二的位置上,继续下去,直到最后,经过N-1次排序后,所有的N个数将按照由小到大的顺序排列。
实验软硬件环境:
奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。
实验步骤和方法:
本实验重点在于对“冒泡法”这种典型的排序算法的理解,在此基础之上,熟悉汇编语言中循环程序中所涉及到的相关指令。
(1)分析问题,设计算法;
(2)根据上述算法,编制程序流程图,如图5-1所示;
(3)根据流程图,编写实现代码;
(4)程序汇编为目标文件.obj;
(5)目标文件.obj链接为可执行文件.exe;
(6)使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得到正确的结果;
(7)根据实验过程和实验结果完成实验报告,并按时上交。
注意:
Ø在汇编语言中,数组名所代表的含义;
Ø在汇编语言中,标号的使用;
Ø在汇编语言中,不同跳转指令的含义;
图5-1程序流程图
实验预习要求:
提前预习汇编语言中的相关跳转指令,以及在数据结构中“冒泡法”排序的基本原理。
思考题:
(1)程序中为了实现“冒泡法”需要设定几个变量;
(2)JGE/JNE等这些跳转指令有那些细微的不同,可否归纳一下如何记忆这些不同点;
评分标准:
(1)能正确设计和实现用汇编语言编写的“冒泡法”程序,运行结果正确(50%);
(2)能够设计合理正确的输入/输出模块(30%);
(3)实验报告编写认真详细,按时上交(20%)