微机原理实验指导和报告 2.docx
《微机原理实验指导和报告 2.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导和报告 2.docx(18页珍藏版)》请在冰豆网上搜索。
微机原理实验指导和报告2
本科实验报告
课程名称:
实验名称:
实验地点:
专业班级:
学号:
学生姓名:
指导教师:
年月日
实验一汇编语言开发环境与程序调试
一、实验要求和目的
1.熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握轻松汇编的使用方法。
2.通过各种寻址方式操作,了解最基本的8086寻址方式、了解8086汇编指令格式。
3.熟悉程序调试的方法,熟悉汇编过程中一些常见出错信息。
二、实验内容
将轻松汇编使用指南中给出的程序作为该实验的练习程序,按照指南中所给出的步骤完成实验。
三、实验步骤
1.在轻松汇编环境下,按照指南中的指示输入、编辑、链接实验程序。
程序代码如下:
;eg501.asm
.modelsmall
.486
.stack
.data
msgdb'hello,Assembly!
',13,10,'$'
.code
.startup
movdx,offsetmsg
movah,9
int21h
.exit
End
2.运行程序,写出运行结果:
3.单步运行程序,观察CPU的相关寄存器、存储器,写出寄存器CS、IP、DS、DX、AH和存储器在执行过程中的数值。
msgdb'hello,Assembly!
',13,10,'$';DS:
msg为:
数据:
.code
.startup;CS=IP=
movdx,offsetmsg;DX=IP=
movah,9;AH=IP=
int21h
.exit
4.写出程序中可执行指令的寻址方式。
目标寻址方式源寻址方式目标值源值
movdx,offsetmsg
movah,9
5.将程序改为完整段定义格式并再次编译(汇编)执行。
;eg502.asm
datasegmentparapublic‘data’
msgdb'hello,Assembly!
',13,10,'$'
dataends
codesegmentparapublic‘code’
assumecs:
code,ds:
data
start:
movdx,offsetmsg
movah,9
int21h
endstart
codeends
6.将eg501的输出改为'hello,AssemblyBegin!
',编译运行,写出输出结果。
输出结果为:
7.将eg502的输出改为'Good,AssemblyEnd!
',编译运行,写出输出结果。
输出结果为:
四、选作实验内容
从键盘接收23个有效字符并存入以BUF为首地址的缓冲区中。
DATASEGMENT
BUFDB25;缓冲区长度
ACTHARDB?
;保留单元,存放输入的实际字符个数
CHARDB25DUP(?
);定义25个字节存储空间
DB‘$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
CODEENDS
ENDSTART
教师点评:
指导教师:
年月日
实验二顺序程序设计
一、实验要求与目的:
1、实验要求:
编写两到三个用顺序程序设计方法可实现的汇编语言程序,并上机完成。
2、实验目的:
通过编写和上机练习顺序汇编语言程序,学习汇编语言的顺序程序设计方法和在计算机上的编辑、汇编、链接、调试和运行。
二、实验内容:
1、设变量X、Y均为16位无符号数,编写程序求表达式2X+Y的值。
程序代码:
DATASSEGMENTPARAPUBLIC‘DATA’
XDW20H
YDW100H
SUMDW?
?
DATASENDS
CODESSEGMENTPARAPUBLIC‘CODE’
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
XORDX,DX
MOVAX,X
ADDAX,AX
ADCDX,0
ADDAX,Y
ADCDX,0
MOVSUM,AX
MOVSUM+2,DX
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
(1)仿照实验一,写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值
(2)写出该程序的计算结果:
2、将输入的大写字母转换成小写字母输出
程序代码:
同样,写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值
3、(选作)有两个变量VAR1和VAR2,编写程序实现交换其值的功能。
程序代码:
教师点评:
指导教师:
年月日
实验三分支程序设计
一、实验要求与目的:
1、实验要求:
掌握分支结构程序设计的基本方法;掌握无条件转移指令和条件转移指令的使用;掌握分支结构程序设计的两种基本结构的使用。
2、实验目的:
通过分支程序的设计掌握结构化程序设计方法和常用算法设计。
通过编写和上机练习分支汇编语言程序,在程序中使用条件转移语句实现两路分支,学习汇编语言的分支程序设计方法。
二、实验内容:
利用比较转移指令编写分段函数:
1.程序流程图:
2.内存分配:
设给定值X存放于XX单元中,函数Y存放于YY单元中,则按照X的不同取值给Y赋值。
3.程序代码:
DATASEGMENT
XXDB0F0H
YYDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTMOVAX,DATA
MOVDS,AX
MOVAL,XX
CMPAL,0
JGEBIGR
MOVAL,-1
JMPEQUL
BIGR:
JEEQUL
MOVAL,1
EQUL:
MOVYY,AL
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
4.写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值
最终结果YY=
5.
(1)将XX的值重新定义为:
25H,则:
最终结果YY=
(2)再次将XX的值重新定义为:
00H,则:
最终结果YY=
教师点评:
指导教师:
年月日
实验四循环程序设计
一、实验要求与目的:
1、实验要求:
掌握循环结构程序设计的基本方法;了解循环控制的方法(计数、条件和混合)。
2、实验目的:
通过循环程序的设计掌握结构化程序设计方法和循环控制方法的设计。
二、实验内容:
用循环程序设计的方法实现:
计算S=∑i(i=1~100),将其和5050存入SUM单元。
1.程序流程图
2.程序代码:
DATASEGMENT
SUMDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVCX,100
AGAIN:
ADDAX,CX
DECCX
JNZAGAIN
MOVSUM,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值,对于循环部分,只写出第1,2和最后一次的值。
三、选作实验内容:
统计寄存器BX中1的个数,结果存放在COUNT单元中。
1.程序流程图2.程序代码:
教师点评:
指导教师:
年月日
实验五子程序调用
一、实验要求与目的:
1、实验要求:
掌握子程序指令,了解子程序结构和子程序设计的基本方法。
2、实验目的:
学习汇编的子程序结构和模块化程序设计方法。
二、实验内容:
编写子程序将符号常数X乘10,结果存在Y存储单元中
1.程序如下:
XEQU1000
YDW?
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,X
CALLMUL10
MOVY,AX
MOVAX,4C00H
INT21H
MUL10PROC
PUSHF
PUSHBX
ADDAX,BX
MOVBX,AX
ADDAX,AX
ADDAX,AX
ADDAX,BX
POPBX
POPF
RET
MUL10ENDP
CODEENDS
ENDSTART
2.写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值。
3.给出程序的执行结果
Y=
三、选作实验内容:
通过子程序的递归求n!
,算法是:
n(n-1)!
当n>0时;
n!
=
1当n=0时
1.程序代码:
2.写出每条可执行指令的:
目标寻址方式、源寻址方式、目标值、源值。
3.给出程序的执行结果
教师点评:
指导教师:
年月日
轻松汇编使用指南
轻松汇编是一个集成汇编语言开发的软件环境,在轻松汇编环境下,可完成汇编语言程序的编辑、汇编、链接、调试和运行。
假设轻松汇编软件保存“汇编语言”文件夹中。
轻松汇编的安装、操作使用如下:
1.创建汇编环境:
打开“汇编语言”文件夹,双击轻松汇编图标
运行之。
在打开的“欢迎使用轻松汇编”对话框中选择“接收”按钮,再在新出现的窗口中点击“安装”按钮,如图1所示。
图1轻松汇编安装窗口
在出现的“汇编提示”对话框中选择“是”,完成汇编安装,出现如图2标题为“轻松汇编II”的画面。
图2标题为“轻松汇编II”的画面
点击右上角的关闭图标
,即出现轻松汇编环境,可开始输入新程序或打开已有程序,如图3所示。
图3轻松汇编环境
2.用轻松汇编编辑、编译、生成(链接)、调试和运行一个在屏幕上显示Hello,Assembly!
的汇编语言程序。
(1)程序代码:
;eg301.asm
.modelsmall
.486
.stack
.data
msgdb'hello,Assembly!
',13,10,'$'
.code
.startup
movdx,offsetmsg
movah,9
int21h
.exit
End
(2)输入程序
–在轻松汇编窗口输入源代码,如图4所示。
图4编辑并保存
在程序输入过程中有些语句会自动变为大写,这些不影响程序的效果,不用去理会它。
–程序输入完成后要保存,给源文件取名。
在没有保存文件以前,轻松汇编给源程序一个缺省的名字NoName.asm。
选择“文件”“保存”或单击图标
,出现另存为对话框如图5所示。
在“文件名”输入栏中输入eg301,点击保存即可。
这时轻松汇编会自动为文件加上.asm的扩展名。
–
图5另存为对话框
(3)汇编、链接、运行和调试
轻松汇编的操作环境与VC++的操作环境很类似。
用菜单或工具栏上的图标就可以了。
操作基本过程如下:
–汇编:
输入程序完成后,选择“运行”“编译”或单击工具栏上的图标
。
如果编译通过,底部显示“编译成功”,可以进行下一步操作。
如果没有,底部显示出错信息。
这时需要从新检查、修改源程序,从新进行编译。
–链接:
选择“运行”“生成”或单击工具栏上的图标
,如果通过,底部显示“链接成功”就可以进行下一步操作;否则,从新检查程序,从新汇编、链接。
–运行:
选择“运行”“运行”或单击工具栏上的图标
。
如果运行通过、则出现如图6的窗口,表示结果正确,程序完成。
图6汇编语言的输出窗口
–如果程序没有通过,或程序的运行结果不正确,可以检查源程序,也可以选择调试。
在轻松汇编环境下完成试验一的步骤
一、按照指南的步骤输入、编译、链接实验一给出的程序,链接通过后可单击工具栏上的“交叉文件”查看机器码和汇编语言对应的程序列表如图7所示。
图7交叉文件列表
二、选择“运行”“调试”或点击工具栏上的图标
,进入轻松汇编的调试屏幕。
在调试环境下经常用到的命令如下:
1.F8Step:
按一下键盘最前排的功能键F8,执行一次单步操作,即按一下执行一条指令。
在程序列表的前面有一条指令前面有一个小三角,这条指令就是将要执行的指令。
每按一次F8,前有小三角的指令被执行,三角向下移动,指向下一条将要执行的指令。
通过单步执行方式,可以观察每一条指令的执行情况。
如寄存器或存储器的变化情况。
2.在单步执行以前,通常根据情况打开寄存器、存储器和变量进行观察。
既可打开一种,也可同时打开多种。
打开的操作如下:
•打开寄存器:
“View”“Registers”,这时可观察所有寄存器的值。
•打开存储器:
“View”“Dump”,这时可观察所指数据段的值。
•打开变量的值:
“View”“Variable”,这时可观察所有变量的值。
3.退出调试状态:
“File”“Quit”或Alt-x。