微机原理实验报告 本文关键词:微机,原理,实验,报告
微机原理实验报告 本文简介:微机原理实验报告目录微机原理实验报告1目录2第一部32位微机原理实验4实验一显示程序实验4一、实验步骤4二、实验程序5三、实验结果5实验二数据传送实验6一、实验步骤6二、实验程序6三、实验结果7实验三数码转换程序实验8一、将ASCII码表示的十进制数转换为二进制数8二、将十进制数的ASCII码转化为
微机原理实验报告 本文内容:
微机原理实验报告
目录
微机原理实验报告1
目录2
第一部32位微机原理实验4
实验一
显示程序实验4
一、实验步骤4
二、实验程序5
三、实验结果5
实验二
数据传送实验6
一、实验步骤6
二、实验程序6
三、实验结果7
实验三
数码转换程序实验8
一、将ASCII码表示的十进制数转换为二进制数8
二、将十进制数的ASCII码转化为BCD码12
三、将十六进制数的ASCII码转化为十进制数19
四、BCD码转换为二进制码23
实验四
运算类程序实验26
一、实验思路26
二、实验程序28
三、实验结果29
实验五
分支程序设计实验30
一、实验步骤30
二、实验程序33
三、实验结果34
实验六
循环程序设计实验35
一、实验步骤35
二、实验程序37
三、实验结果38
汇编语言部分实验总结39
第二部分32位微机接口技术实验40
实验一
8259中断控制器应用实验40
一、实验内容40
二、实验步骤40
三、实验思考题及所填空缺的数据的分析47
四、实验结果48
实验二
8255并口控制器应用实验49
一、实验内容49
二,实验步骤50
三、实验思考题及所填空缺的数据的分析53
四、实验结果54
实验三
8254定时/计数器应用实验56
一、实验内容56
二、实验步骤56
三、实验思考题及所填空缺的数据的分析60
四、实验结果62
接口部分实验总结63
第一部
32位微机原理实验
实验一
显示程序实验
一、
实验步骤
1.
运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;
2.
使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.
使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.
使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.
更改数据区中的数据,考察程序的正确性。
二、
实验程序
实验程序如下:
DATA
SEGMENT
MES
DB
Show
a
as
hex:,0AH,0DH,$
SD
DB
a
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
DX,OFFSET
MES
;显示提示信息
MOV
AH,09H
INT
21H
MOV
DI,OFFSET
SD
MOV
AL,DS:[DI]
AND
AL,0F0H
;取高4位
SHR
AL,4
CMP
AL,0AH
;是否是A以上的数
JB
C2
ADD
AL,07H
C2:
ADD
AL,30H
MOV
DL,AL
;显示字符
MOV
AH,02H
INT
21H
MOV
AL,DS:[DI]
AND
AL,0FH
;取低4位
CMP
AL,0AH
JB
C3
ADD
AL,07H
C3:
ADD
AL,30H
MOV
DL,AL
;显示字符
MOV
AH,02H
INT
21H
MOV
AX,4C00H
;返回DOS
INT
21H
CODE
ENDS
END
START
三、实验结果
程序运行结果为:
本程序既是把字符“a”转化为其ASCII码并以10进制数的形式显示在屏幕上。
实验二
数据传送实验
一、实验步骤
1.
运行Tddebug软件,选择Edit菜单;
2.
使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.
使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.
使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.
更改数据区中的数据,考察程序的正确性。
二、实验程序
DDATA
SEGMENT
;定义源数据段
MSR
DB
“HELLO,WORLD!$“LEN
EQU
$-
MSR
DDATA
ENDS
EXDA
SEGMENT
;定义附加数据段
MSD
DB
LEN
DUP(?)
EXDA
ENDS
MYSTACK
SEGMENT
STACK
;定义堆栈段
DW
20
DUP(?)
MYSTACK
ENDS
CODE
SEGMENT
;定义代码段
ASSUME
CS:CODE,DS:DDATA,ES:EXDA
START:
MOV
AX,DDATA
MOV
DS,AX
;装载数据段寄存器
MOV
AX,EXDA
MOV
ES,AX
;装载附加数据段寄存器
MOV
SI,OFFSET
MSR
;设置SI
MOV
DI,OFFSET
MSD
;设置DI
MOV
CX,LEN
NEXT:
MOV
AL,[SI]
;开始传输数据
MOV
ES:[DI],AL
INC
SI
INC
DI
DEC
CX
JNZ
NEXT
PUSH
ES
POP
DS
;将附加段寄存器的段值赋给数据段寄存器
MOV
DX,OFFSET
MSD
MOV
AH,9
INT
21H
MOV
AX,4C00H
;利用DOS功能调用返回DOS状态
INT
21H
CODE
ENDS
END
START
三、实验结果
程序运行结果为:
本程序将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
实验三
数码转换程序实验
一、将ASCII码表示的十进制数转换为二进制数
(1)实验思路
十进制数可以表示为: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加次位的操作,依次类推,则可求出二进制数结果。
根据上面的原理,采取十进制数外部输入的方式储存在缓冲区中,调用缓冲区中的储存数将之转化为二进制数显示在屏幕上,转换过程的流程图下图所示。
CALL
INPUT
显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中
CALL
DISPP
回车换行
CALL
CHANGE
将数据串转化为相应的数值存放在BX中
CALL
LIST_BX
将BX中的内容以二进制的形式显示在屏幕上
返回DOS
显示的二进制位数为CX=16
将BX左移一位
将BX的最低位值赋给DL
将DL中的数值转化为其ASCII码
将DL中的ASCII码送往屏幕显示
RET返回
LIST_BX子程序流程图
(2)实验程序
DATA
SEGMENT
STRING
DB
Input:,$
NUM
DB
6,?,6
DUP(?)
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
CALL
INPUT
;调用显示输入子程
CALL
DISPP
;回车换行
CALL
CHANGE
;调用将输入字符串转化为相应的十进制数值子程
CALL
LIST_BX
;
调用将十进制数转化为二进制数并输出子程
MOV
AH,4CH
INT
21H
INPUT
PROC
LEA
DX,STRING
MOV
AH,09H
INT
21H
LEA
DX,NUM
MOV
AH,0AH
INT
21H
RET
INPUT
ENDP
CHANGE
PROC
LEA
SI,NUM+2
MOV
CL,NUM+1
MOV
CH,0
MOV
AX,0
MOV
DI,10
NEXT:
MUL
DI
MOV
BH,0
MOV
BL,[SI]
AND
BL,0FH
ADD
AX,BX
INC
SI
LOOP
NEXT
ZERO:
MOV
BX,AX
RET
CHANGE
ENDP
LIST_BX
PROC
MOV
CX,16
;规定输出二进制位数为16位
ROTATE:
ROL
BX,1
MOV
DL,BL
AND
DL,01H
ADD
DL,30H
MOV
AH,2H
INT
21H
LOOP
ROTATE
RET
LIST_BX
ENDP
DISPP
PROC
MOV
DL,0DH
MOV
AH,02H
INT
21H
MOV
DL,0AH
MOV
AH,02H
INT
21H
RET
DISPP
ENDP
CODE
ENDS
END
START
(3)实验结果
当输入为五位十进制数00012时,输出结果如下:
二、将十进制数的ASCII码转化为BCD码
(1)实验思路
十进制数与BCD码之间的转化只是将每一位的十进制数转化为四位的二进制数,按位显示即可,而在内存中的十进制数是以其ASCII码的形式存储,要将内存中的十进制数转化为BCD码要先将每一位的ASCII重新转化为十进制数,再转化为BCD码显示。本实验要求输入不是十进制数的ASCII码时要输出“FF”,通过先将输入的十进制数存放在内存中先判定是否存在非十进制数的ASCII码,如果有则输出‘FF“,如果没有则将输入的十进制数转化为BCD码输出。设计的程序流程图如下:
CALL
INPUT
显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中
CALL
DISPP
回车换行
CALL
CHANGE
判定输入的数据串中是否有非十进制数,通过判断进行输出“FF”或BCD码
返回DOS
主程序流程图
BL
SI指针所指的地址里储存的字符ASCII码
将BL中的ASCII码与39H进行比较
N
Y
BL≦39H
LOOP2
CALL
STARTA
子程序
LOOP1
地址指针SI加一,CH减一
N
CH=0?
RET
返回
Y
CALL
DISPA子程序
RET
返回
CHANGE
子程序流程图
DX
STRINGA字符串的有效地址
9号功能调用,显示字符串“FF!”
RET
返回
STARTA子程序流程图
NEXT
DH4
BLSI中存储的字符的ASCII码
地址指针SI加一
BLBL-30H
BL左移4位
BL左移1位
DLBL
取DL的最低位转化为其ASCII码并显示
DH减一
N
DH=0?
Y
CH减一
CH=0?
N
Y
RET
返回
DISPA子程序流程图
(2)实验程序
DATA
SEGMENT
STRING
DB
Input:,$
STRINGA
DB
FF!,$
NUM
DB
6,?,6
DUP(?)
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
MAIN
PROC
FAR
START:
MOV
AX,DATA
MOV
DS,AX
CALL
INPUT
;
调用输入显示子程序
CALL
DISP
;
调用回车换行子程序
CALL
CHANGE
;
调用字符串判定及转化显示程序
MOV
AH,4CH
INT
21H
RET
MAIN
ENDP
DISP
PROC
MOV
DL,0DH
MOV
AH,02H
INT
21H
MOV
DL,0AH
MOV
AH,02H
INT
21H
RET
DISP
ENDP
INPUT
PROC
LEA
DX,STRING
MOV
AH,09H
INT
21H
LEA
DX,NUM
MOV
AH,0AH
INT
21H
RET
INPUT
ENDP
CHANGE
PROC
LEA
SI,NUM+2
MOV
CH,NUM+1
NEXT:
MOV
BL,[SI]
CMP
BL,39H
JLE
LOOP1
JMP
LOOP2
LOOP1:
INC
SI
DEC
CH
JNZ
NEXT
CALL
DISPA
;
调用BCD码转换显示子程序
RET
LOOP2:
CALL
STARTA
;
调用“FF“显示程序
RET
DISPA
PROC
LEA
SI,NUM+2
MOV
CH,NUM+1
NEXTA:
MOV
DH,4
MOV
BL,[SI]
INC
SI
SUB
BL,30H
MOV
CL,4
ROL
BL,CL
ROTATE:
ROL
BL,1
MOV
DL,BL
AND
DL,01H
ADD
DL,30H
MOV
AH,2H
INT
21H
DEC
DH
JNZ
ROTATE
DEC
CH
JNZ
NEXTA
RET
DISPA
ENDP
STARTA
PROC
LEA
DX,STRINGA
MOV
AH,09H
INT
21H
RET
STARTA
ENDP
CHANGE
ENDP
CODE
ENDS
END
START
(3)实验结果
1)从键盘输入54321时输出如下:
2)从键盘输入5432a时输出如下:
三、将十六进制数的ASCII码转化为十进制数
(1)实验思路
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。五位十进制数可表示为:
ND=D4×+D3×103+D2×102+D1×10+D0
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。程序流程图如下:
AX
内存存放的十六进制数
BX10000D
DX0
DX:AX除以BX
DI
DX
CALL
DISPB调用显示子程序
AX
DI
DX0
BX1000D
DX:AX除以BX
CALL
DISPB调用显示子程序
DI
DX
DI
DX
DX:AX除以BX
AX
DI
DX0
BX100D
CALL
DISPB调用显示子程序
AX
DI
DX0
BL10
AX除以BL
DH
AH
CALL
DISPB调用显示子程序
DL
DH
DL高四位值0,并将DL中的字符转化为其ASCII码
2号功能调用
返回DOS
主程序流程图
DL
AL
返回RET
2号功能调用
DL高四位值0,并将DL中的字符转化为其ASCII码
DISPB子程序流程图
(2)实验程序
DATA
SEGMENT
N
DW
000CH
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
AX,N
;十六进制数除以10000D
MOV
BX,10000D
MOV
DX,0
DIV
BX
MOV
DI,DX
CALL
DISPB
MOV
AX,DI
;余数除以1000D
MOV
DX,0
MOV
BX,1000D
DIV
BX
MOV
DI,DX
CALL
DISPB
MOV
AX,DI
;余数除以100
MOV
DX,0
MOV
BH,0
MOV
BL,100D
DIV
BX
MOV
DI,DX
CALL
DISPB
MOV
AX,DI
;余数除以10
MOV
DX,0
MOV
BL,10
DIV
BL
MOV
DH,AH
CALL
DISPB
MOV
DL,DH
;余数显示
AND
DL,0FH
ADD
DL,30H
MOV
AH,2H
INT
21H
MOV
AH,4CH
INT
21H
DISPB
PROC
;显示子程序
MOV
DL,AL
AND
DL,0FH
ADD
DL,30H
MOV
AH,2H
INT
21H
RET
DISPB
ENDP
CODE
ENDS
END
START
(3)实验结果
程序运行结果如下:
四、BCD码转换为二进制码
(1)实验思路
先定义一个4Byte的空内存空间,将存储在内存空间中的四个二位十进制数的BCD码的转化为四个二位十进制数依次存储在定义的4Byte的空间中,然后从定义的空间中依次提取十进制数并转化为压缩BCD码送往屏幕输出,程序的流程图如下:
SI
NUM的有效地址
BH4
CL4
AL[SI]
AL左移4位,然后将高四位值零
ALAL*10
BL[SI]
将BL高四位值零
ALBL+AL
将AL中的十进制数存入M中
DI
M的有效地址
BL[DI]
DI加一
CX8
将BL中的十进制数以八位二进制数显示在屏幕上
回车换行
地址指针SI加一,BH减一
N
BH=0?
Y
返回DOS
主程序流程图
(2)实验程序
DATA
SEGMENT
NUM
DB
11H,22H,33H,44H
M
DB
4
DUP(?)
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
LEA
SI,NUM
MOV
BH,4
NEXTA:
MOV
CL,4
;将BCD码转化为十进制数
MOV
AL,[SI]
ROL
AL,CL
AND
AL,0FH
MOV
BL,10
MUL
BL
MOV
BL,[SI]
AND
BL,0FH
ADD
AL,BL
LEA
DI,M
;将转化为的十进制数存进M中
MOV
[DI],AL
LEA
DI,M
;调用M中的十进制数并以八位二进制数的形式显示
MOV
BL,[DI]
INC
DI
MOV
CX,8
NEXT:
ROL
BL,1
MOV
DL,BL
AND
DL,01H
ADD
DL,30H
MOV
AH,2H
INT
21H
LOOP
NEXT
CALL
DISP
INC
SI
DEC
BH
JNZ
NEXTA
MOV
AH,4CH
INT
21H
DISP
PROC
MOV
DL,0DH
MOV
AH,02H
INT
21H
MOV
DL,0AH
MOV
AH,02H
INT
21H
RET
DISP
ENDP
CODE
ENDS
END
START
(3)实验结果
程序运行结果如下:
实验四
运算类程序实验
一、实验思路
实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。然后将存储在内存空间中的和值显示为十六进制数在屏幕上。程序流程图如下:
将X的低十六位按位权赋给AX
将Y的低十六位按位权赋给BX
CF清零
AX
AX+BX+CF
Z的低两个字节AX
将X的高十六位按位权赋给AX
将Y的高十六位按位权赋给BX
AX
AX+BX+CF
Z的高两个字节AX
SIZ的高两位有效地址
CALL
DISP调用子程序
SIZ的低两位有效地址
CALL
DISP调用子程序
返回DOS
主程序流程图
BLSI中的字符
地址指针SI加一
BHSI中的字符
二、实验程序
DATA
SEGMENT
X
DD
001565A0H
Y
DD
0021B79EH
Z
DB
4
DUP(?)
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
MAIN
PROC
FAR
START:
MOV
AX,DATA
;
将X的低十六位和Y的低十六位相加
MOV
DS,AX
LEA
SI,X
MOV
AL,[SI]
INC
SI
MOV
AH,[SI]
LEA
DI,Y
MOV
BL,[DI]
INC
DI
MOV
BH,[DI]
CLC
ADC
AX,BX
LEA
SI,Z
;
将相加之和存入Z的低两个字节
MOV
[SI],AX
LEA
SI,X+2
;
将X的高十六位和Y的高十六位相加
MOV
AL,[SI]
INC
SI
MOV
AH,[SI]
LEA
DI,Y+2
MOV
BL,[DI]
INC
DI
MOV
BH,[DI]
ADC
AX,BX
LEA
SI,Z+2
;
将相加之和存入Z的高两个字节
MOV
[SI],AX
LEA
SI,Z+2
CALL
DISP
;
调用子程序以16进制显示Z的高两个字节
LEA
SI,Z
CALL
DISP
;
调用子程序以16进制显示Z的低两个字节
MOV
AH,4CH
INT
21H
RET
MAIN
ENDP
DISP
PROC
;
以16进制数显示子程序
MOV
BL,[SI]
INC
SI
MOV
BH,[SI]
MOV
CH,4
MOV
CL,4
NEXT:
ROL
BX,CL
MOV
DL,BL
AND
DL,0FH
ADD
DL,30H
CMP
DL,39H
JLE
ADD
DL,07H
PRINT:
MOV
AH,2H
INT
21H
DEC
CH
JNZ
NEXT
RET
DISP
ENDP
CODE
ENDS
END
START
三、实验结果
程序运行结果如下:
实验五
分支程序设计实验
一、实验步骤
1.
运行
Tddebug软件,选择
Edit菜单编写实验程序,提供
8字
节的数据:0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;
2.
使用Compile菜单中的Compile和Link对实验程序进行汇编、
连接;
3.
使用Rmrun菜单中的
Run,运行程序,观察运行结果;
4.
更改数据区中的数据,考察程序的正确性。
实验程序流程图如下:
BH
N中的第一个数
SIN的有效地址
CX7
地址指针SI加一
BH与[SI]比较
Y
BH≧[SI]?
N
BH与[SI]交换
CX减一
N
CX=0?
Y
DX
MAX
的有效地址
9号功能调用
AHBH
CALL
DISP调用子程序
回车换行
BLN中的第一个数
SIN的有效地址
CX7
BL≦[SI]?
BL与[SI]比较
地址指针SI加一
Y
N
N
Y
CX=0?
CX减一
BL与[SI]交换
BHBL
DX
MIN的有效地址
9号功能调用
CALL
DISP调用子程序
回车换行
返回DOS
主程序流程图
二、实验程序
DATA
SEGMENT
N
DB
0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
MAX
DB
The
Maximum
is:$
MIN
DB
The
minimum
is:$
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
BH,N
;
比较得最大值
LEA
SI,N
MOV
CX,7
LOOP1:
INC
SI
CMP
BH,[SI]
JAE
LOOP2
XCHG
BH,[SI]
LOOP2:
DEC
CX
JNZ
LOOP1
LEA
DX,MAX
CALL
DISP1
;
九号功能调用
MOV
AH,BH
CALL
DISP
;
以16进制数的形式显示最大值
CALL
DISP2
;
回车换行
MOV
BL,N
;
比较得最小值
LEA
SI,N
MOV
CX,7
LOOP3:
INC
SI
CMP
BL,[SI]
JBE
LOOP4
XCHG
BL,[SI]
LOOP4:
DEC
CX
JNZ
LOOP3
LEA
DX,MIN
CALL
DISP1
;
九号功能调用
MOV
BH,BL
CALL
DISP
;
以16进制数的形式显示最小值
CALL
DISP2
;
回车换行
MOV
AH,4CH
INT
21H
DISP
PROC
MOV
CH,2
MOV
CL,4
NEXT:
MOV
AX,BX
ROL
AX,CL
MOV
BX,AX
MOV
DL,AL
AND
DL,0FH
ADD
DL,30H
CMP
DL,39H
JLE
ADD
DL,07H
PRINT:
MOV
AH,2H
INT
21H
DEC
CH
JNZ
NEXT
RET
DISP
ENDP
DISP1
PROC
MOV
AH,09H
INT
21H
RET
DISP1
ENDP
DISP2
PROC
MOV
DL,0DH
MOV
AH,02H
INT
21H
MOV
DL,0AH
MOV
AH,02H
INT
21H
RET
DISP2
ENDP
CODE
ENDS
END
START
三、实验结果
程序运行结果如下:
实验六
循环程序设计实验
一、实验步骤
1.
运行
Tddebug
软件,选择
Edit
菜单编写实验程序,提供
10
字节的数据:12H,88H,82H,89H,33H,90H,01H,10H,
0BDH,01H;
2.
使用Compile菜单中的Compile和Link对实验程序进行汇编、
连接;
3.
使用Rmrun菜单中的
Run,运行程序,观察运行结果;
4.
更改数据区中的数据,考察程序的正确性。
实验程序流程图如下:
SI
N的有效地址
DH0
BH[SI],地址指针SI加一
BH左移