微机原理实验报告同济大学.docx

上传人:b****2 文档编号:24419647 上传时间:2023-05-27 格式:DOCX 页数:43 大小:609.05KB
下载 相关 举报
微机原理实验报告同济大学.docx_第1页
第1页 / 共43页
微机原理实验报告同济大学.docx_第2页
第2页 / 共43页
微机原理实验报告同济大学.docx_第3页
第3页 / 共43页
微机原理实验报告同济大学.docx_第4页
第4页 / 共43页
微机原理实验报告同济大学.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

微机原理实验报告同济大学.docx

《微机原理实验报告同济大学.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告同济大学.docx(43页珍藏版)》请在冰豆网上搜索。

微机原理实验报告同济大学.docx

微机原理实验报告同济大学

同济大学电子与信息工程学院

信息与通信工程系实验报告

 

 

实验一显示程序实验

1.实验目的

(1)掌握在PC机上以十六进制形式显示数据的方法。

(2)掌握部分DOS功能调用使用方法。

(3)熟悉Tddebug调试环境和TurboDebugger的使用。

2.实验设备

PC微机一台。

3.实验内容及说明

一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。

本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。

实验中可使用DOS功能调用(INT21H)。

(1)显示单个字符输出

入口:

AH=02H调用参数:

DL=输出字符

(2)显示字符串

入口:

AH=09H调用参数:

DS:

DX=串地址,‘S’为结束字符

(3)键盘输入并回显

入口:

AH=01H返回参数:

AL=输出字符

(4)返回DOS系统

入口:

AH=4CH调用参数:

AL=返回码

4.实验步骤

(1)运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图2-1-1示。

(2)使用Compile菜单中的Compile和Link对实验程序进行汇编、连接。

(3)使用Rmrun菜单中的Run,运行程序,观察运行结果。

(4)使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容。

(5)更改数据区中的数据,考察程序的正确性。

图1显示程序实验流程图

5.实验程序

;显示程序实验

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENTUSE16

MESDB'Pressanykeytoexit!

',0AH,0DH,0AH,0DH,'$'

MES1DB'Showaashex:

',0AH,0DH,'$'

SDDB'a'

DATAENDS

CODESEGMENTUSE16

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMES;显示退出提示

MOVAH,09H

INT21H

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

KEY:

MOVAH,1;判断是否有按键按下?

INT16H

JZKEY

MOVAX,4C00H;gobacktodos

INT21H

CODEENDS

ENDSTART

6.实验结果:

a的十六进制数表示为3D。

7.实验小结

初步了解掌握部分DOS功能调用使用方法。

并且熟悉Tddebug调试环境和TurboDebugger的使用。

 

实验二数码转换程序实验

1.实验目的

掌握不同进制数及编码相互转换的程序设计方法。

2.实验设备

PC微机一台。

3.实验内容及说明

计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。

因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。

计算机与外设间的数码转换关系如图2-3-1所示,数码对应关系如表2-3-1所示。

图1计算机与外设间的数码转换关系

(1)将ASCII码表示的十进制数转换为二进制数

十进制数可以表示为:

其中Di代表十进制数1、2、3…9、0。

上式可转换为:

由上式可归纳十进制数转换为二进制的方法:

从十进制数的最高位Dn开始作乘10加次位的操作,依次迭代类推,则可求出二进制数结果。

本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。

转换过程的参考流程如图2所示。

表1数码转换对应关系

图2十进制ASCII转换为二进制数参考流程

;A2-1.asm

;将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](ADCAL,[SI+01]

SUBAL,30HJNCA2

ADDAH,01H

A2:

SUBAL,30H)

INCSI

LOOPA1

MOV[SI],AX

MOVDX,OFFSETMES1

MOVAH,09H

INT21H

INCSI;显示高字节

CALLSHOW

DECSI;显示低字节

CALLSHOW

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

(2)将十进制数的ASCII码转换为BCD码

本实验要求将键盘输入的一个五位十进制数54321的ASCⅡ码存放在数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。

若输入的不是十进制数的ASCⅡ码,则输出“FF”。

提示:

一字节ASCⅡ码取其低四位即变为BCD码。

转换部分的实验流程参见图3。

图3十进制ASCII转换为BCD码数参考流程

;A2-2.asm

;将十进制数的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

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

附:

括号内的为更改后的程序。

4.实验步骤

(1)运行Tddebug软件,选择Edit菜单,根据实验内容描述的数码转换内容分别编写实验程序。

(2)利用Compile菜单中的Compile和Link对实验程序进行汇编、连接。

(3)利用Rmrun菜单中的Run,运行程序,观察运行结果。

(4)使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容。

更改数据区中的数据,考察程序的正确性。

5.实验结果

(1)30H,30H,30H,31H,32H——000C

30H,30H,30H,31H,32H——00FF

30H,30H,30H,31H,32H——0100

(2)0102030405

6.实验小结

本次实验使我对编码转换的程序有了进一步的掌握。

实验三循环程序设计实验

1.实验目的

掌握循环程序的设计方法。

2.实验设备

PC微机一台。

3.实验内容及说明

一个循环程序通常由以下几个部分组成:

1)循环初始化部分:

用于对相关内存单元及寄存器设置初始值,

如设置地址指针、循环次数、某些标志位等。

只有正确地进行了初始化设置,循环程序才能正确运行并及时停止。

2)循环体:

对要求重复执行的程序段部分,对应于要求重复执行

的操作。

3)循环控制部分:

为下一轮处理修正地址指针及循环次数等,并

判断循环结束的条件是否满足,若满足则退出循环。

4)循环结束部分:

用于保存循环运行的结果等。

(1)编写程序完成对10个数的求和

分析:

需分配空间保存和数(SUM),在循环体中进行求和操作。

4.实验程序:

DATASEGMENT

BUFFERDW1,2,3,4,5,6,7,8,9,10;(10,20,30,40,50,60,70,80,90,100)原始10个数据

SUMDW?

;存放和数

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,0;AX中为和数,初始为0

MOVDI,OFFSETSUM;存放结果地址送DI

MOVBX,OFFSETBUFFER;数据缓冲区首地址

;送BX

MOVCX,10;循环次数送CX

LOOP1:

ADDAX,[BX];累加

INCBX;修改数据缓冲区地址

INCBX

DECCX;次数减1

JNZLOOP1;到10次了吗?

不到,

;转LOOP1

MOV[DI],AX;到10次,存放结果

CALLSHOW

MOVAX,4C00H;返回DOS

INT21H

SHOWPROCNEAR

MOVAL,DS:

[DI]MOVAX,DS:

[DI]

ANDAL,0F0HANDAX,0F00H

SHRAL,4SHRAX,8

CMPAL,0AHCMPAL,0AH

JBC2JBC1

ADDAL,07H

C1:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

MOVAL,DS:

[DI]

ANDAL,0F0H

SHRAL,4

CMPAL,0AH

JBC2

ADDAL,07H)

C2:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

MOVAL,DS:

[DI]

ANDAL,0FH

CMPAL,0AH

JBC3

ADDAL,07H

C3:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H

RET

ENDP

CODEENDS

ENDSTART

(2)给定一串16位数,找出其中大于零、等于零和小于零的个数。

分析:

这是一个统计问题,需设置三个计数器分别统计三种情况下的结果。

参考程序清单:

DATASEGMENT

BUFFDW22H,31H,43H,990H,00H,8990H;原始16个数据

COUNTEQU$-BUFF;COUNT的值为BUFF所

;占的字节数

PLUSDB?

;大于零的个数

ZERODB?

;等于零的个数

MINUSDB?

;小于零的个数

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVCX,COUNT

SHRCX,1;相当于除2,正好为BUFF

;中的数据个数

MOVDX,0;设定初值:

DH及DL分别为

;等于、大于零的个数

MOVAH,0;设定初值:

AH为小于零的个数

LEABX,BUFF

AGAIN:

CMPWORDPTR[BX],0

JGEPLU;大于等于零时转PIU

INCAH;统计小于零的个数

JMPNEXT

PLU:

JZZER;等于零时转ZER

INCDL;统计大于零的个数

JMPNEXT

ZER:

INCDH;统计等于零的个数

NEXT:

INCBX;修改地址指针

INCBX

LOOPAGAIN

PUSHDX

PUSHAX

PUSHAX

MOV[BX],DL

CALLSHOW

MOV[BX],DH

CALLSHOW

POPAX

MOV[BX],AH

CALLSHOW

POPAX

MOVMINUS,AH

POPDX

MOVPLUS,DL

MOVZERO,DH

MOVAX,4C00H

INT21H

SHOWPROCNEAR

MOVAL,DS:

[BX]

ANDAL,0F0H;取高4位

SHRAL,4

CMPAL,0AH;是否是A以上的数

JBC2

ADDAL,07H

C2:

ADDAL,30H

MOVDL,AL;showcharacter

MOVAH,02H

INT21H

MOVAL,DS:

[BX]

ANDAL,0FH;取低4位

CMPAL,0AH

JBC3

ADDAL,07H

C3:

ADDAL,30H

MOVDL,AL;showcharacter

MOVAH,02H

INT21H

RET

ENDP

CODEENDS

ENDBEGIN

附:

括号内的为更改后的程序。

5.实验结果

(1)37;226

(2)040101

6.实验小结

本次实验使我对微机小程序的编写有了进一步的掌握。

 

实验四子程序设计实验

1.实验目的

(1)掌握子程序的定义调用方法。

(2)掌握系统功能调用程序的使用和编写方法。

2.实验设备

PC微机一台。

3.实验内容及说明

(1)将内存中的一串1位十六进制数转换为其对应的ASCII码。

如:

十六进制2所对应的ASCII码为32H,而十六进制数C所对应ASCII码为‘C’(即43H)。

分析:

将一个十六进制数转化为其对应的ASCII码的功能设计为

子程序。

主程序分若干次调用该子程序,但每次调用的参数为不同的待转换的十六进制数。

4.实验程序:

DATASEGMENT

HEXBUFDB02H,08H,0AH,09H,0FH;待转换的一串1位

;十六进制数

COUNTEQU$-HEXBUF;COUNT的值为这一

;串十六进制数的个数

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

;子程序HEXD:

将1位十六进制数转换为其对应的ASCII码

;入口参数:

AL含待转换的1位十六进制数

;出口参数:

AL含转换完的结果(ASCII码)

HEXDPROCNEAR

CMPAL,0AH

JLADDZ

ADDAL,07H

ADDZ:

ADDAL,30H

(MOVDS,AX

MOVAH,0A

INT21H)

RET

HEXDENDP

;以下为主程序

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETHEXBUF

MOVCX,COUNT

REPEAT0:

MOVAL,[BX]

CALLHEXD

MOV[BX],AL

INCBX

LOOPREPEAT0

MOVAX,4C00H

INT21H

CODEENDS

ENDBEGIN

(2)编写程序计算数N的阶乘N!

分析:

阶乘有递归定义式:

,其中

可采用子程序的递归调用形式。

参考程序清单:

;计算N!

,结果放在RESULT中

DATASEGMENT

NDW5

RESULTDW?

DATAENDS

STACKSEGMENTSTACK‘STACK’

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

;主程序部分

MOVBX,N

PUSHBX;N压入堆栈

CALLFACT;调用求N!

子程序

POPRESULT;结果放在RESULT中

(MOVAL,:

DL

ANDAL,0FH

CMPAL,0AH

JBC4

ADDAL,07H

C4:

ADDAL,30H

MOVDL,AL

MOVAH,02H

INT21H)

 

MOVSI,OFFSETRESULT;输出结果

INCSI

CALLSHOW

DECSI

CALLSHOW

MOVAX,4C00H

INT21H

;求N!

的子程序,注意入、出口参数。

FACTPROCNEAR

PUSHAX

PUSHBP

MOVBP,SP

MOVAX,[BP+6];取N

CMPAX,0

JNEFACT1;AX不等于零,转FACT1

INCAX;0!

=1

JMPEXIT

FACT1:

DECAX;AX=N-1

PUSHAX

CALLFACT;递归调用求(N-1)!

POPAX;AX=(N-1)!

MULWORDPTR[BP+6];求(N-1)!

*N

EXIT:

MOV[BP+6],AX

POPBP

POPAX

RET

FACTENDP

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

附:

括号内的为更改后的程序。

5.实验结果

28A9F

8!

=9D80H;9!

=58980H

6.实验小结

本次实验使我对关于代码转换和小程序实现的微机编程有了进一步的了解和掌握。

 

实验五8259中断控制器应用实验

1.实验目的

(1)学习中断控制器8259的工作原理。

(2)掌握可编程控制器8259的应用编程方法。

2.实验设备

PC微机一台、TD-PIT+实验系统一套。

3.实验内容

(1)利用PC机给实验系统分配的中断线,设计一个单

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1