微机原理与接口技实验报告.docx
《微机原理与接口技实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技实验报告.docx(45页珍藏版)》请在冰豆网上搜索。
微机原理与接口技实验报告
微机原理与接口技术实验报告
学院:
核技术与自动化工程学院
专业:
电气工程及其自动化
班级:
XXXXXX
学号:
XXXXX
姓名:
XXX
指导老师:
XXX
完成时间:
2012、11、14
实验一EMU8086软件的使用
1、实验目的
1、了解EMU8086软件的基本使用步骤和各个工作区的功能,在能力方面主要是学以致用,将理论知识运用于实际的设计,从设计的完整和缺陷中找到新的突破口,以便温故而知新,从而提升自己的实际操作技能,能够通过自我想象与思考做出很多有价值的设计。
2、在系统的学习了微机原理与接口技术后,主要针对8086,利用emu8086软件设计一些程序,熟悉了解此款软件的运行过程中各个步骤寄存器内容及地址的变化。
3、在理论方面,基础软件实验部分共有六个实验组成,通过对这些实验程序的编写、调试,使学生熟悉8086/8088的指令系统等,了解程序设计过程,掌握汇编程序设计方法以及如何使用实验系统提供的各种调试、分析手段来排除程序错误。
2、实验仪器及设备
PC设备、EMU8086软件平台、EMU8086软件仿真平台
3、实验内容
双击EMU8086图标,打开程序。
此时会弹出welcome窗口,见图1.1所示,可将该窗口关闭直接进入编辑状态;也可点击它的new按钮,则会弹出代码模板选择框供用户选择(可选择EXE模板),见图1.2所示,一般点击Cancel按钮,直接进入编辑状态。
在编辑窗口,可直接将源程序输入,见图1.3所示。
图1.1welcome窗口
图1.2模板选择
图1.3编辑窗口输入源程序
点击compile(编译)按钮则进行汇编和链接,生成.EXE文件,并提示存盘。
点击emulate(仿真)按钮则可进入8086仿真器界面,见图1.4所示。
界面中提供了寄存器窗口、内存单元窗口及反汇编窗口,下方一行按钮则提供了虚拟屏幕、源代码观察、复位、辅助工具、变量、DEBUG、堆栈及FLAGS(标志寄存器)观察等功能。
用户可点击run连续运行程序,也可点击singlestep对程序进行单步调试。
图1.5为HELLO.EXE的运行结果,用户通过虚拟屏幕观察,非常形象生动。
。
O
图1.48086仿真器界面
图1.5HELLO.EXE的运行结果
EMU8086提供了断点设置功能,见图1.6所示,先用鼠标选中要设置为断点的指令,然后点击菜单debug——setbreakpoint,即可设置断点。
若要清除断点,则点击菜单debug——clearbreakpoint。
图1.6断点设置
EMU8086也支持DEBUG调试程序,仿真器界面下方的一行按钮中有debug按钮,点击打开后可输入DEBUG命令进行调试。
见图1.7所示。
图1.7EMU8086提供的DEBUG
4、实验总结
通过学习emu8086软件的使用,从编译程序到程序的仿真,EMU8086是学习Intel8086微处理器的理想工具,它模拟真实微处理器的每一步骤,并显示内部寄存器、存储器、堆栈、变量和标志寄存器,而且其中任何一个数值都可通过鼠标双击来改变。
实验二8086指令观察
一、实验目的和要求
1.掌握汇编语言程序编辑、汇编、链接和调试的基本概念。
2.掌握在PC机上建立、汇编、链接和运行8088汇编语言程序的过程。
3.通过观察深入掌握数据传送类、算术运算类和逻辑运算类等各类指令的功能。
二、实验任务
编辑汇编程序,并汇编、链接和调试程序,验证结果。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1.寻找最大最小数程序实验
设内存缓冲区从BUF单元开始,存放若干个单字节数,其数据长度在BUF单元,要求找出最大数送MAX单元,最小数送MIN单元。
2.实验源程序如下
2.代码转换实验
从键盘输入2个十进制数组合成压缩BCD码存入DL,再将压缩BCD码转换成ASCII码送CRT显示。
实验程序如下:
实验结果
输入78
实验三顺序结构程序设计
一、实验目的和要求
1.熟悉星研集成环境软件的使用方法。
熟悉Borland公司的TASM编译器;
2.熟悉8086汇编指令,能自己编写简单的程序,并调试运行验证结果。
二、实验任务
学习使用EMU8086集成环境软件,验证及编写调试实验内容的程序。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1.编写简单程序,用数据运算指令,对两个16位数做加法运算。
这两个数从地址10050H开始连续存放,低位在低地址一端,结果放在这两个数之后。
实验框图:
实验程序如下:
codesegment
start:
;setsegmentregisters:
MOVAX,0000H
MOVDS,AX
;addyourcodehere
MOVSI,50H
MOVDI,52H
MOVBX,54H
CLC
XORAX,AX
MOVAX,[SI]
ADCAX,[DI]
MOV[BX],AX
HLT
ends
endstart;setentrypointandstoptheassembler.
实验结果
2.编写简单程序,实现组合BCD码转换成ASCII码送CRT显示。
实验程序如下:
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
MOVAL,27H
MOVDL,AL
MOVCL,4
SHRDL,CL
ORDL,30H
pushax
MOVAH,2
INT21H
popax
MOVDL,AL
ANDDL,0FH
ORDL,30H
MOVAH,2
INT21H
movdl,0dh;回车换行
MOVAH,02H
INT21H
movdl,0ah
MOVAH,02H
INT21H
leadx,pkey
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
3、试用已学过的指令编程,运算以下算式:
;⑴、5555H+6666H+8756H
;⑵、5678+(-1234)-4321
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
a1dw5555h,6666h,8756h,0,0
b1dw5678,-1234,4321,0
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
clc;5555H+6666H+8756H
movax,a1
adcax,a1+2
adcax,a1+4
mova1+6,ax
jcSAVECF
jmpNEXT
SAVECF:
mova1+8,1
NEXT:
clc;5678+(-1234)-4321
movbx,b1
adcbx,b1+2
subbx,b1+4
movb1+6,bx
leadx,pkey
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
4、已知BX=12ABH,试编程将其内容转换成ASCII码送到
;数据段0100H单元开始存放
datasegment
;addyourdatahere!
pkeydb"pressAnykey...$"
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
movsi,0100h
movbx,12ABh
movcl,12
movax,bx
shrax,cl
oral,30h
mov[si],al
incsi
movcl,8
movax,bx
shrax,cl
andal,0fh
oral,30h
mov[si],al
incsi
movcl,4
movax,bx
shrax,cl
andal,0fh
clc
subal,10
addal,41h
mov[si],al
incsi
movax,bx
andal,0fh
clc
subal,10
addal,41h
mov[si],al
incsi
mov[si],'$'
movdx,0100h
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
实验四分支结构程序设计
一、实验目的和要求
1.学习分支结构程序的设计和调试方法;
2.熟悉8086汇编指令中的程序控制指令的应用。
二、实验任务
学习使用EMU8086集成环境软件,验证及编写、调试实验内容。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1.已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
题目分析:
根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。
8086/8088指令系统中有专门的求相反数的指令NEG。
实验框图:
实验程序如下:
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
XDB-25
RESULTDB?
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
MOVAL,X;X取到AL中
TESTAL,80H;测试AL正负
JZNEXT;为正,转NEXT
NEGAL;否则AL求补
NEXT:
MOVRESULT,AL;送结果
leadx,pkey
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
2.编写计算下面函数值的程序:
1X>0
Y=0X=0
-1X<0
设输入数据为X、输出数据Y,且皆为字节变量。
实验程序如下:
datasegment
;addyourdatahere!
Msg0db0Dh,0Ah,0Dh,0Ah,"pleaseinputdataXbetween-128and127...",0Dh,0Ah,0Dh,0Ah,"X=12",'$'
Msg1db0Dh,0Ah,0Dh,0Ah,"X>Y,Y=1$"
Msg2db0Dh,0Ah,0Dh,0Ah,"X=Y,Y=0$"
Msg3db0Dh,0Ah,0Dh,0Ah,"XMsg4db0Dh,0Ah,0Dh,0Ah,"pressYtocontinue,otherwisestop...",0Dh,0Ah,0Dh,0Ah,'$'
Msg5db0Dh,0Ah,0Dh,0Ah,"pressanykeytoreturn...$"
Msg6db0Dh,0Ah,0Dh,0Ah,"inputdataerror...$"
StXdb"000$"
Xdw0
Ydb0
SFdb0
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
loop0:
;addyourcodehere
leadx,Msg0
movah,9
int21h
movah,1;符号位判断
int21h
cmpal,'-'
jzSIGN
movStX,al;正数处理,firstnumber
movah,1;secondnumber
int21h
movStX+1,al
movah,1;thirdnumber
int21h
movStX+2,al
jmpNEXT0
SIGN:
movSF,1;是负数,标志位sf=1;负数处理
movah,1;firstnumber
int21h
movStX,al
movah,1;secondnumber
int21h
movStX+1,al
movah,1;thirdnumber
int21h
movStX+2,al
NEXT0:
clc;getinputdata'sdecimal,saveinX
xorax,ax
moval,StX;inputdata,baiwei
subal,30h
movbl,100
mulbl
movX,ax
xorax,ax
moval,StX+1;inputdata,shiwei
subal,30h
movbl,10
mulbl
adcX,ax
xorax,ax
moval,StX+2;inputdata,gewei
subal,30h
adcX,ax
cmpX,-128
jlDATAERROR
cmpX,127
jgDATAERROR
jmpNEXT1
DATAERROR:
leadx,Msg6
movah,9
int21h
jmploop0
NEXT1:
cmpSF,1;是负数,求补码
jzNEGX
jmpNEXT2
NEGX:
negX
NEXT2:
cmpX,0;判断X的值,决定Y的值
jzZERO
jgGREAT
movY,0ffh;x<0,Y=-1
leadx,Msg3
movah,9
int21h
jmpEND0
GREAT:
movY,1;x>0,Y=1
leadx,Msg1
movah,9
int21h
jmpEND0
ZERO:
movY,0;x=0,Y=0
leadx,Msg2
movah,9
int21h
END0:
leadx,Msg4
movah,9
int21h
movah,1;waitforanykey
int21h
cmpal,'Y'
jzloop0
leadx,Msg5
movah,9
int21h
movah,1;waitforanykey
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
输入12
3.试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。
设三个带符号数分别在三个字变量X、Y、Z中存储。
实验程序如下:
;multi-segmentexecutablefiletemplate.
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
Xdw-7856
Ydw-1234
Zdw0
MAXdw?
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
movax,X
movMAX,ax
cmpax,Y
jlSAVEMAX1
jmpNEXT1
SAVEMAX1:
movax,Y
movMAX,ax
NEXT1:
cmpax,Z
jlSAVEMAX2
jmpNEXT2
SAVEMAX2:
movax,Z
movMAX,ax
NEXT2:
leadx,pkey
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
实验五循环结构程序设计
一、实验目的和要求
1.学习、掌握循环结构程序的设计和调试方法;
2.熟悉8086汇编指令中的程序控制指令和LOOP指令的应用。
二、实验任务
学习使用EMU8086集成环境软件,验证及编写、调试实验内容。
三、实验设备和软件
PC机、EMU8086
四、实验内容
1.编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。
统计被累加的自然数的个数送CN单元,累加和送SUM。
流程图如下图所示。
实验框图:
实验程序如下:
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
SUMdw?
CNdw?
ends
stacksegment
dw128dup(0)
ends
codesegment
start:
;setsegmentregisters:
movax,data
movds,ax
moves,ax
;addyourcodehere
;movCX,100
MOVAX,0;0送AX
MOVBX,0
LP:
INCBX;BX加1
ADDAX,BX;求累加和
CMPBX,100;比较
JBLP;<100转
;loopLP
MOVSUM,AX
MOVCN,BX;送结果
leadx,pkey
movah,9
int21h;outputstringatds:
dx
;waitforanykey....
movah,1
int21h
movax,4c00h;exittooperatingsystem.
int21h
ends
endstart;setentrypointandstoptheassembler.
实验结果
2、已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。
显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。
实验程序如下:
;multi-segmentexecutablefiletemplate.
datasegment
;addyourdatahere!
pkeydb"pressanykey...$"
BUFdb12,3,-1,0,-4,55,32,89,5,-22
BEQU$-BUF
CNdb0
ends
stacksegment