微机原理实验报告1.docx
《微机原理实验报告1.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告1.docx(13页珍藏版)》请在冰豆网上搜索。
微机原理实验报告1
微机原理实验报告
院系:
机电工程学院
专业:
机械设计制造及其自动化
班级:
100220
学号:
姓名:
日期:
12/12/20
实验一系统认知
一.实验目的:
学习掌握利用QTH-2008PCI连机软件调试汇编程序。
二.实验内容:
编写程序要求“在数据段中定义5个数,求这5个数的和,并将结果存放到AX寄存器中(或内存SUM中)”。
三.程序:
DATASSEGMENT
BUFDB3,4,5,6,7
SUMDB2DUP(?
)
DATASENDS
CODESSEGMENT
ASSUMEDS:
DATAS,CS:
CODES
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,0
MOVCX,5
MOVAX,0
CLC
AGAIN:
ADDAL,BUF[SI]
ADCAH,0
INCSI
LOOPAGAIN
MOVSUM,AL
MOVAX,4C00H
INT21H
CODESENDS
ENDSTART
四.结果与分析
从调试结果可以看出,AX=19,并且在数据段地址对应的内存中查出了对应的数据:
3,4,5,6,7以及这五个数之和19。
说明了所编写的程序是正确无误的。
五.思考题
1.软件调试“四部曲“是什么?
答:
写程序xxx.asm,编译xxx.obj,链接xxx.exe,调试。
2.执行程序有哪三种方法?
答:
全速执行,单步执行,执行到指定点。
3.该程序完成什么功能?
执行结果是什么?
如何察看原始数据?
如何显示最终结果?
答:
求5个数的和,结果是19。
在debug调试中,用-D命令显示内存,可以查看原始数据和最终结果,即-D DS:
0000。
最终结果也可以通过定点运行-g001C显示AX
4.MOVAX,DATAS和MOVDS,AX指令执行完后,在DS里送了个什么东西?
具体值是多少?
答:
将那5个数输入到内存中,具体值为3H,4H,5H,6H,7H。
5.最后两条指令MOVAX,4C00H和INT21H的功能是什么?
答:
DOS调用命令,即返回DOS界面。
6.如何看内存结果单元?
答:
在DEBUG调试中,通过—D命令和对应的物理地址查看内存单元。
同组实验者:
实验二分支程序设计
一.实验目的:
掌握分支程序设计的方法。
二.实验内容:
验证程序“符号函数SGN(X)的实现”。
三.程序:
DATASSEGMENT
XVARDW3A2BH;给X赋值
SGNDW?
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,XVAR
CMPAX,0
JGENEXT1
MINUS:
MOVAX,0FFFFH
JMPDONE
NEXT1:
JGNEXT2
ZERO:
MOVAX,0
JMPDONE
NEXT2:
MOVAX,1
;--------------------------------------------------------
DONE:
MOVSGN,AX
MOVAX,4C00H
INT21H
CODESENDS
ENDSTART
四.结果与分析
1.当X为正数(3A2BH)时,结果如下图1所示
可以看出,当X为正数时,SGN(X)=1。
2.当X=0时,结果如下图2所示
可以看出,当X为0时,SGN(X)=0。
3
2
1
3.当X为负数(X=8000H)时,结果如上图3所示
可以看出,当X为负数时,SGN(X)=0FFFFH
所以验证了这个程序的功能,即当X为正数时,结果为1;当X为0时,结果为0;当X为负数时,结果为0FFFFH。
五.思考题
1.XVAR是多少位数?
答:
它是十六进制数,2个字节,16位。
2.MOVAX,XVAR指令中的源操作数和目的操作数分别是什么寻址方式?
可以到Debug中找到这条指令,并分析之。
答:
源操作数是内存寻址方式,目的操作数是寄存器寻址方式(直接寻址方式)。
这条命令对应的是0C84:
:
0005 MOV AX,[0000] 可见XVAR的偏移地址是0.
3.本程序里有几个条件转移指令?
实现了几个分支?
答:
两个,分别是“JGENEXT1”和“JGNEXT2”,实现了三个分支
4.每个分支后为什么必须有一条无条件转移指令?
答:
因为该分支执行完之后,要跳过其后程序,转到DONE.
5.如何察看原始数据?
如何显示计算结果?
答:
在debug调试中,通过D命令查看原始数据所在的内存单元。
用执行到定点G,和对应的偏移地址001E,即-G001E可以显示计算结果。
6.根据数据段具体数据,从CMPAX,0指令开始,指出往下执行哪五条指令?
答:
分别是“JGENEXT1”,“NEXT1:
JGNEXT2”,“NEXT2:
MOVAX,0001”,“DONE:
MOVSGN,AX”,“MOVAX,4C00H”。
同组实验者:
实验三循环程序设计
一.实验目的
掌握循环程序设计的方法。
二.实验内容
编写程序实现“在数据段以NUMBER为首地址,存放有10个无符号数,求其最大数放到MAX单元中。
数据段的十个数:
01H,11H,22H,33H,44H,55H,66H,77H,88H,99H”。
三.程序:
DATASSEGMENT
NUMBERDB01H,11H,22H,33H,44H,55H,66H,77H,88H,99H
MAXDB?
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,NUMBER
LEADI,MAX
MOVCX,10
;------------------------------------------------------------------
MOVAL,[SI]
INCSI
DECCX
AGAIN:
CMPAL,[SI]
JANEXT
MOVAL,[SI]
NEXT:
INCSI
LOOPAGAIN
RESULT:
NOP
MOV[DI],AL
;------------------------------------------------------------------
MOVDL,AL
ADDDL,30H
MOVAH,02H
INT21H
MOVAX,4C00H
INT21H
CODESENDS
ENDSTART
四.结果与分析
从实验结果可以看出,最大值为99H,与理论值相符合。
五.思考题
1.循环程序的3+1结构是什么?
答:
分别是:
初始化,循环体,修改参数和控制循环。
2.初始化都做哪些工作?
答:
为循环做准备,包括建立指针,设置循环次数的计数初始值,设置其他变量的初始值等。
3.改成求无符号数最小值,如何实现?
结果是多少?
改成求带符号数最大值、最小值呢?
答:
将JA改为JB即可,结果是01H。
改成带符号的,即最大,将JA改为JG,结果是77H;最小,将JA改为JL,结果是99H。
4.初始化指令段能够被执行几次?
善后存结果段呢?
答:
都是只执行一次。
同组实验者:
实验四基本IO口扩展实验
一.实验目的
了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
二.实验内容
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
74LS273是一种8D触发器,当CLR为高电平且CLK端电平正跳变时,D0——D7端数据被锁存到8D触发器中。
本实验利用74LS244作为输入口,读取开关状态,并将此状态通过74LS273驱动发光二极管显示出来。
三.实验原理
四.实验步骤
(1)实验连线:
Ø74LS244的CS——ISA总线接口模块的IOY0。
Y7—Y0——开关K8—K1。
Ø74LS273的CS——ISA总线接口模块的IOY2。
Q7—Q0——发光二极管L8—L1。
Ø该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
Ø该模块的数据线(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LAD0~LAD7)、地址线(LA0~LA7)。
(2)运行程序:
IO.ASM
(3)拨动开关,观察发光二极管的变化。
扩展I/O口连线图
五.源程序
CODESSEGMENT
ASSUMECS:
CODES;将CODE定义为代码段
START:
MOVDX,0C400H;分配给74LS244的端口地址
INAL,DX ;将开关的状态传给AL
MOVDX,0C440H;分配给74LS273的端口地址 OUTDX,AL ;将AL所存的开关状态输出到二极管
JMPSTART;无条件跳转到START,循环判断
EXIT:
MOVAX,4C00H ;返回到DOS系统
INT21H
CODESENDS
ENDSTART ;程序结束
同组实验者: