微机原理实验报告同济大学.docx
- 文档编号:10680195
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:43
- 大小:609.05KB
微机原理实验报告同济大学.docx
《微机原理实验报告同济大学.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告同济大学.docx(43页珍藏版)》请在冰点文库上搜索。
微机原理实验报告同济大学
同济大学电子与信息工程学院
信息与通信工程系实验报告
实验一显示程序实验
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机给实验系统分配的中断线,设计一个单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告 同济大学