微机原理与接口实验报告书.docx
《微机原理与接口实验报告书.docx》由会员分享,可在线阅读,更多相关《微机原理与接口实验报告书.docx(85页珍藏版)》请在冰点文库上搜索。
微机原理与接口实验报告书
微机原理与接口实验报告书
1341901124武易
实验一显示程序与数据传送实验
1、实验目的
1)掌握在PC机上以十六进制形式显示数据的方法。
2)掌握部分DOS功能调用使用方法。
3)掌握与数据有关的不同寻址方式。
3)熟悉Windows集成操作软件Tdpit的操作环境和操作方法。
2、实验设备
PC微机一台、TD-PIT++实验系统一套。
3、实验内容及说明
1.显示程序实验
一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并利用DOS功能调用完成一些提示信息的显示。
通过本实验,初步掌握实验系统配套操作软件的使用。
实验中所使用DOS功能调用(INT21H)说明如下。
(1)显示单个字符输出
入口:
AH=02H
调用参数:
DL=输出字符
(2)显示字符串
入口:
AH=09H
调用参数:
DS:
DX=串地址,’$’为结束字符
(3)键盘输入并回显
入口:
AH=01H
返回参数:
AL=输出字符
(4)返回DOS系统
入口:
AH=4CH
调用参数:
AL=返回码
2.数据传送实验
本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
4、实验代码与截图
显示程序代码
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENTUSE16
MES1DB'Showaashex:
',0AH,0DH,'$'
SDDB'a'
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES1;showmessage
MOVAH,09H
INT21H
MOVSI,OFFSETSD
MOVAL,DS:
[SI]
ANDAL,0F0H
;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H;gobacktodos
INT21H
CODEENDS
ENDSTART
数据传送
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MSRDB'goodmorning!
$'
LENEQU$-MSR
DDATAENDS
EXDASEGMENT
MSDDBLENDUP(?
)
EXDAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA,ES:
EXDA
START:
MOVAX,DDATA
MOVDS,AX
MOVAX,EXDA
MOVES,AX
MOVSI,OFFSETMSR
MOVDI,OFFSETMSD
MOVCX,LEN
MOVBX,0
NEXT:
MOVAL,MSR[BX]
MOVES:
MSD[BX],AL
INCBX
LOOPNEXT
PUSHES
POPDS
MOVDX,OFFSETMSD
MOVAH,9
INT21H
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
六.思考题
1、常用的数据传送指令和算术运算指令有几种类型?
试归纳并举例说明。
把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存单元、I/O端口中读取数据。
1.通用传送指令:
MOV,PUSH,POP,XCHG,XLAT
2.输入输出指令指令:
IN,OUT
3.目的地址传送指令:
LEA,LDS,LES
4.标志位传送指令:
LAHF,SAHF,PUSHF,POPF
二使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算
2、在DEBUG下输入程序段,如何建立、修改、存盘?
文件名是被调试文件的名字。
如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。
如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
3、程序段近过程与远过程有什么不同?
什么情况下是RET?
什么情况下是RETF?
ret分两种:
retn和retf
retn是近返回,用于段内返回,它返回到堆栈内保存的本段内的偏移地址
retf是远返回,一般用于段间返回,它返回堆栈内保存的段地址:
偏移地址
实验二代码转换
一.实验目的:
1.学习不同数及编码相互转换的程序设计方法。
2.进一步掌握程序编辑,编译,连接过程。
3.进一步掌握可执行文件在DEBUG里调试过程。
二.实验器材。
1.PC机一台;
2.QTH-2008PCI32位微机教学实验仪一套。
三.实验内容:
1.将ASCII码表示的十进制数转换为二进制数
十进制数可以表示为:
Dn×10n+Dn-1×10n-1+…+D0×100=Di×10i其中Di代表十进制数1、2、3…9、0。
上式可以转换为:
ΣDi×10i=((…(Dn×10+Dn-1)×10)+Dn-2)×10+…+D1)×10+D0
由上式可归纳十进制数转换为二进制的方法:
从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数结果。
本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。
2.将十进制数的ASCII码转换为BCD码
本实验要求将键盘输入的一个五位十进制数54321的ASCⅡ码存放在数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。
若输入的不是十进制数的ASCⅡ码,则输出“FF”。
提示:
一字节AsⅡ码取其低四位即变为BCD码。
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
五位十进制数可表示为:
ND=D4×104+D3×103+D2×102+D1×10+D0
因此,将十六位二进制数转换为五位ASCⅡ码表示的十进制数,就是求D1-D4,并将它们转化为ASCⅡ码。
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。
4.BCD码转换为二进制码
本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
四.实验步骤:
1.输入给定的程序,编译、连接并产生可执行文件。
2.DEBUG调试分析各程序的功能,观察调试过程中数据传输指令执行后,各寄存器及数据区的内容。
并给出16进制数转换成ASCII码数学表达式。
3.更改数据区的数据,考察程序的正确性。
五.实验代码与截图
将ASCII码十进制数转换为二进制数
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MES1DB'Theasciicodeofdecimalcodeare:
$'
BUFDB30H,30H,30H,31H,32H
DB10HDUP(0)
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVBX,000AH
MOVCX,0004H
MOVAH,00H
MOVAL,[SI]
SUBAL,30H
A1:
IMULBX
ADDAL,[SI+01]
SUBAL,30H
INCSI
LOOPA1
MOV[SI],AX
MOVDX,OFFSETMES1
MOVAH,09H
INT21H
INCSI;显示高字节
CALLSHOW
DECSI;显示低字节
CALLSHOW
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
SHOWPROCNEAR
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
RET
ENDP
CODEENDS
ENDSTART
将十进制数的ASCII码转换为BCD码
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MES1DB'TheBCDcodeofdecimalare:
$'
BUFDB31H,32H,33H,34H,35H
DB10HDUP(0)
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVCX,0005H
MOVDI,OFFSETBUF
A1:
MOVBL,0FFH
MOVAL,[DI]
CMPAL,3AH;比较AL中的数是否是0~9的ASCII码
JNBA2
SUBAL,30H
JBA2
MOVBL,AL
A2:
MOVAL,BL
MOV[DI+05H],AL
INCDI
LOOPA1
MOVSI,DI
MOVCX,05H
MOVDX,OFFSETMES1
MOVAH,09H
INT21H
A3:
CALLSHOW
MOVDL,20H
MOVAH,02H
INT21H
INCSI
LOOPA3
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
SHOWPROCNEAR
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
RET
ENDP
CODEENDS
ENDSTART
将十六进制的ASCII码转换为十进制数
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MES1DB'Theasciicodeofhexare:
$'
BUFDB0CH,00H
DB10HDUP(0)
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVDX,[SI]
MOVBX,SI
ADDBX,2
ADDSI,7
A1:
DECSI
MOVAX,DX
MOVDX,0000H
MOVCX,000AH
DIVCX
XCHGAX,DX
ADDAL,30H
MOV[SI],AL
CMPDX,0000H
JNEA1
A2:
CMPSI,BX
JZA3
DECSI
MOVAL,30H
MOV[SI],AL
JMPA2
A3:
MOVCX,5
MOVSI,OFFSETBUF
ADDSI,2
MOVDX,OFFSETMES1
MOVAH,09H
INT21H
A4:
CALLSHOW
MOVDL,20H
MOVAH,02H
INT21H
INCSI
LOOPA4
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
SHOWPROCNEAR
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
RET
BCD码转换为二进制码
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MES1DB'TheBCDcodeofbinaryare:
$'
BUFDB01H,07H,03H,04H,05H,01H,06H,08H
DB10HDUP(0)
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVCX,0004H
MOVDI,OFFSETBUF
A1:
MOVAL,[DI]
ADDAL,AL
MOVBL,AL
ADDAL,AL
ADDAL,AL
ADDAL,BL
INCDI
MOVAH,00H
ADDAL,[DI]
MOV[DI+07H],AX
INCDI
LOOPA1
MOVDX,OFFSETMES1
MOVAH,09H
INT21H
MOVCX,04H
MOVDI,OFFSETBUF
ADDDI,08H
A2:
MOVAX,[DI]
CALLSHWORD
MOVDL,20H
MOVAH,02H
INT21H
INCDI
INCDI
LOOPA2
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
SHWORDPROCNEAR
MOVBL,AH
CALLSHOW
MOVBL,AL
CALLSHOW
RET
ENDP
SHOWPROCNEAR
PUSHAX
PUSHDX
MOVAL,BL
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
POPDX
POPAX
RET
ENDP
CODEENDS
ENDSTART
六.思考题:
十进制数的ASCII码如何转换为BCD码?
ASII码可以查表,对应的你可以读出你所需的字符所对应的二进制代码,当你把8位二进制代码写出时,我们就可以转换为BCD码了,具体方法是:
8,4,2,1。
实验三运算类指令编程实验
1、实验目的
1)掌握运算类指令编程及调试方法。
2)掌握运算类指令对各状态标志位的影响及测试方法。
2、实验设备
PC微机一台、TD-PIT++实验系统一套。
3、实验内容及说明
80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对表3-1所示的数据类型进行算术运算。
1.二进制双精度加法运算
本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。
实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。
2.十进制数的BCD码减法运算
本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,其中X=0400H,Y=0102H。
3.乘法运算
本实验要求实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后,将乘积在屏幕上显示。
4.用减奇数开平方运算80x86指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。
用减奇数法可求得近似平方根,获得平方根的整数部分。
我们知道,N个自然数中的奇数之和等于N2,即:
1+3+5=9=32
1+3+5+7=16=42
1+3+5+7+9+11+13+15=64=82
若要做S的开方运算,那麽就可以从S中逐次减去自然数中的奇数1,3,5,7…,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。
本实验要求利用减奇法计算0040H的开平方值,并将运算结果显示在屏幕上。
4、实验步骤
(1)运行Tdpit集成操作软件,按各实验要求编写实验程序。
(2)分别对实验程序进行编译、链接。
(3)使用运行功能运行程序,观察运行结果。
(4)使用调试功能调试程序,观察在调试过程中,各运算指令执行后,各寄存
器、标志位及数据区内容的变化。
(5)更改数据区中的数据,反复测试,验证程序功能。
5、实验代码及截图
二进制双精度加法运算
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
MES1DB'Theresultis:
$'
XLDW65A0H
XHDW0015H
YLDW0B79EH
YHDW0021H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES1
MOVAH,09H
INT21H
MOVAX,XL
ADDAX,YL
MOVBX,AX
MOVAX,XH
ADCAX,YH
PUSHBX
CALLSHWORD
POPBX
MOVAX,BX
CALLSHWORD
WAIT1:
MOVAH,1;判断是否有按键按下
INT16H
JZWAIT1;无按键则跳回继续等待,有则退出
MOVAX,4C00H
INT21H
SHWORDPROCNEAR
MOVBL,AH
CALLSHOW
MOVBL,AL
CALLSHOW
RET
ENDP
SHOWPROCNEAR
PUSHAX
PUSHDX
MOVAL,BL
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;show