好好学习,天天向上,学科吧欢迎您!
当前位置:首页 >> 最新范文 内容页

微机原理实验报告

微机原理实验报告 本文关键词:微机,原理,实验,报告

微机原理实验报告 本文简介:微机原理实验报告目录微机原理实验报告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

PRINT

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

PRINT

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左移

TAG标签: