微机原理实验报告.docx
- 文档编号:3978483
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:64
- 大小:808.67KB
微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(64页珍藏版)》请在冰豆网上搜索。
微机原理实验报告
微机原理实验报告
第一部32位微机原理实验
实验一显示程序实验
一、实验步骤
1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
二、实验程序
实验程序如下:
DATASEGMENT
MESDB'Showaashex:
',0AH,0DH,'$'
SDDB'a'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES;显示提示信息
MOVAH,09H
INT21H
MOVDI,OFFSETSD
MOVAL,DS:
[DI]
ANDAL,0F0H;取高4位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAL,DS:
[DI]
ANDAL,0FH;取低4位
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAX,4C00H;返回DOS
INT21H
CODEENDS
ENDSTART
三、实验结果
程序运行结果为:
本程序既是把字符“a”转化为其ASCII码并以10进制数的形式显示在屏幕上。
实验二数据传送实验
一、实验步骤
1.运行Tddebug软件,选择Edit菜单;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
二、实验程序
DDATASEGMENT;定义源数据段
MSRDB"HELLO,WORLD!
$"
LENEQU$-MSR
DDATAENDS
EXDASEGMENT;定义附加数据段
MSDDBLENDUP(?
)
EXDAENDS
MYSTACKSEGMENTSTACK;定义堆栈段
DW20DUP(?
)
MYSTACKENDS
CODESEGMENT;定义代码段
ASSUMECS:
CODE,DS:
DDATA,ES:
EXDA
START:
MOVAX,DDATA
MOVDS,AX;装载数据段寄存器
MOVAX,EXDA
MOVES,AX;装载附加数据段寄存器
MOVSI,OFFSETMSR;设置SI
MOVDI,OFFSETMSD;设置DI
MOVCX,LEN
NEXT:
MOVAL,[SI];开始传输数据
MOVES:
[DI],AL
INCSI
INCDI
DECCX
JNZNEXT
PUSHES
POPDS;将附加段寄存器的段值赋给数据段寄存器
MOVDX,OFFSETMSD
MOVAH,9
INT21H
MOVAX,4C00H;利用DOS功能调用返回DOS状态
INT21H
CODEENDS
ENDSTART
三、实验结果
程序运行结果为:
本程序将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
实验三数码转换程序实验
一、将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加次位的操作,依次类推,则可求出二进制数结果。
根据上面的原理,采取十进制数外部输入的方式储存在缓冲区中,调用缓冲区中的储存数将之转化为二进制数显示在屏幕上,转换过程的流程图下图所示。
CALLINPUT
显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中
CALLDISPP
回车换行
CALLCHANGE
将数据串转化为相应的数值存放在BX中
CALLLIST_BX
将BX中的内容以二进制的形式显示在屏幕上
返回DOS
显示的二进制位数为CX=16
将BX左移一位
将BX的最低位值赋给DL
将DL中的数值转化为其ASCII码
将DL中的ASCII码送往屏幕显示
RET返回
LIST_BX子程序流程图
(2)实验程序
DATASEGMENT
STRINGDB'Input:
','$'
NUMDB6,?
6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLINPUT;调用显示输入子程
CALLDISPP;回车换行
CALLCHANGE;调用将输入字符串转化为相应的十进制数值子程
CALLLIST_BX;调用将十进制数转化为二进制数并输出子程
MOVAH,4CH
INT21H
INPUTPROC
LEADX,STRING
MOVAH,09H
INT21H
LEADX,NUM
MOVAH,0AH
INT21H
RET
INPUTENDP
CHANGEPROC
LEASI,NUM+2
MOVCL,NUM+1
MOVCH,0
MOVAX,0
MOVDI,10
NEXT:
MULDI
MOVBH,0
MOVBL,[SI]
ANDBL,0FH
ADDAX,BX
INCSI
LOOPNEXT
ZERO:
MOVBX,AX
RET
CHANGEENDP
LIST_BXPROC
MOVCX,16;规定输出二进制位数为16位
ROTATE:
ROLBX,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,2H
INT21H
LOOPROTATE
RET
LIST_BXENDP
DISPPPROC
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
RET
DISPPENDP
CODEENDS
ENDSTART
(3)实验结果
当输入为五位十进制数00012时,输出结果如下:
二、将十进制数的ASCII码转化为BCD码
(1)实验思路
十进制数与BCD码之间的转化只是将每一位的十进制数转化为四位的二进制数,按位显示即可,而在内存中的十进制数是以其ASCII码的形式存储,要将内存中的十进制数转化为BCD码要先将每一位的ASCII重新转化为十进制数,再转化为BCD码显示。
本实验要求输入不是十进制数的ASCII码时要输出“FF”,通过先将输入的十进制数存放在内存中先判定是否存在非十进制数的ASCII码,如果有则输出‘FF“,如果没有则将输入的十进制数转化为BCD码输出。
设计的程序流程图如下:
CALLINPUT
显示输入提示,等待从键盘输入十进制数字符串,并将之储存在内存中
CALLDISPP
回车换行
CALLCHANGE
判定输入的数据串中是否有非十进制数,通过判断进行输出“FF”或BCD码
返回DOS
主程序流程图
BLSI指针所指的地址里储存的字符ASCII码
将BL中的ASCII码与39H进行比较
N
Y
BL≦39H
LOOP2
CALLSTARTA子程序
LOOP1
地址指针SI加一,CH减一
N
CH=0?
RET返回
Y
CALLDISPA子程序
RET返回
CHANGE子程序流程图
DXSTRINGA字符串的有效地址
9号功能调用,显示字符串“FF!
”
RET返回
STARTA子程序流程图
NEXT
DH
4
BL
SI中存储的字符的ASCII码
地址指针SI加一
BL
BL-30H
BL左移4位
BL左移1位
DL
BL
取DL的最低位转化为其ASCII码并显示
DH减一
N
DH=0?
Y
CH减一
CH=0?
N
Y
RET返回
DISPA子程序流程图
(2)实验程序
DATASEGMENT
STRINGDB'Input:
','$'
STRINGADB'FF!
','$'
NUMDB6,?
6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
START:
MOVAX,DATA
MOVDS,AX
CALLINPUT;调用输入显示子程序
CALLDISP;调用回车换行子程序
CALLCHANGE;调用字符串判定及转化显示程序
MOVAH,4CH
INT21H
RET
MAINENDP
DISPPROC
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
RET
DISPENDP
INPUTPROC
LEADX,STRING
MOVAH,09H
INT21H
LEADX,NUM
MOVAH,0AH
INT21H
RET
INPUTENDP
CHANGEPROC
LEASI,NUM+2
MOVCH,NUM+1
NEXT:
MOVBL,[SI]
CMPBL,39H
JLELOOP1
JMPLOOP2
LOOP1:
INCSI
DECCH
JNZNEXT
CALLDISPA;调用BCD码转换显示子程序
RET
LOOP2:
CALLSTARTA;调用“FF“显示程序
RET
DISPAPROC
LEASI,NUM+2
MOVCH,NUM+1
NEXTA:
MOVDH,4
MOVBL,[SI]
INCSI
SUBBL,30H
MOVCL,4
ROLBL,CL
ROTATE:
ROLBL,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,2H
INT21H
DECDH
JNZROTATE
DECCH
JNZNEXTA
RET
DISPAENDP
STARTAPROC
LEADX,STRINGA
MOVAH,09H
INT21H
RET
STARTAENDP
CHANGEENDP
CODEENDS
ENDSTART
(3)实验结果
1)从键盘输入54321时输出如下:
2)从键盘输入5432a时输出如下:
三、将十六进制数的ASCII码转化为十进制数
(1)实验思路
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
五位十进制数可表示为:
ND=D4×
+D3×10³+D2×10²+D1×10+D0
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。
程序流程图如下:
AX内存存放的十六进制数
BX
10000D
DX
0
DX:
AX除以BX
DI
DX
CALLDISPB调用显示子程序
AX
DI
DX
0
BX
1000D
DX:
AX除以BX
CALLDISPB调用显示子程序
DI
DX
DI
DX
DX:
AX除以BX
AX
DI
DX
0
BX
100D
CALLDISPB调用显示子程序
AX
DI
DX
0
BL
10
AX除以BL
DH
AH
CALLDISPB调用显示子程序
DL
DH
DL高四位值0,并将DL中的字符转化为其ASCII码
2号功能调用
返回DOS
主程序流程图
DL
AL
返回RET
2号功能调用
DL高四位值0,并将DL中的字符转化为其ASCII码
DISPB子程序流程图
(2)实验程序
DATASEGMENT
NDW000CH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,N;十六进制数除以10000D
MOVBX,10000D
MOVDX,0
DIVBX
MOVDI,DX
CALLDISPB
MOVAX,DI;余数除以1000D
MOVDX,0
MOVBX,1000D
DIVBX
MOVDI,DX
CALLDISPB
MOVAX,DI;余数除以100
MOVDX,0
MOVBH,0
MOVBL,100D
DIVBX
MOVDI,DX
CALLDISPB
MOVAX,DI;余数除以10
MOVDX,0
MOVBL,10
DIVBL
MOVDH,AH
CALLDISPB
MOVDL,DH;余数显示
ANDDL,0FH
ADDDL,30H
MOVAH,2H
INT21H
MOVAH,4CH
INT21H
DISPBPROC;显示子程序
MOVDL,AL
ANDDL,0FH
ADDDL,30H
MOVAH,2H
INT21H
RET
DISPBENDP
CODEENDS
ENDSTART
(3)实验结果
程序运行结果如下:
四、BCD码转换为二进制码
(1)实验思路
先定义一个4Byte的空内存空间,将存储在内存空间中的四个二位十进制数的BCD码的转化为四个二位十进制数依次存储在定义的4Byte的空间中,然后从定义的空间中依次提取十进制数并转化为压缩BCD码送往屏幕输出,程序的流程图如下:
SINUM的有效地址
BH
4
CL
4
AL
[SI]
AL左移4位,然后将高四位值零
AL
AL*10
BL
[SI]
将BL高四位值零
AL
BL+AL
将AL中的十进制数存入M中
DI
M的有效地址
BL
[DI]
DI加一
CX
8
将BL中的十进制数以八位二进制数显示在屏幕上
回车换行
地址指针SI加一,BH减一
N
BH=0?
Y
返回DOS
主程序流程图
(2)实验程序
DATASEGMENT
NUMDB11H,22H,33H,44H
MDB4DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,NUM
MOVBH,4
NEXTA:
MOVCL,4;将BCD码转化为十进制数
MOVAL,[SI]
ROLAL,CL
ANDAL,0FH
MOVBL,10
MULBL
MOVBL,[SI]
ANDBL,0FH
ADDAL,BL
LEADI,M;将转化为的十进制数存进M中
MOV[DI],AL
LEADI,M;调用M中的十进制数并以八位二进制数的形式显示
MOVBL,[DI]
INCDI
MOVCX,8
NEXT:
ROLBL,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,2H
INT21H
LOOPNEXT
CALLDISP
INCSI
DECBH
JNZNEXTA
MOVAH,4CH
INT21H
DISPPROC
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
RET
DISPENDP
CODEENDS
ENDSTART
(3)实验结果
程序运行结果如下:
实验四运算类程序实验
一、实验思路
实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
然后将存储在内存空间中的和值显示为十六进制数在屏幕上。
程序流程图如下:
将X的低十六位按位权赋给AX
将Y的低十六位按位权赋给BX
CF清零
AXAX+BX+CF
Z的低两个字节
AX
将X的高十六位按位权赋给AX
将Y的高十六位按位权赋给BX
AX
AX+BX+CF
Z的高两个字节
AX
SI
Z的高两位有效地址
CALLDISP调用子程序
SI
Z的低两位有效地址
CALLDISP调用子程序
返回DOS
主程序流程图
BL
SI中的字符
地址指针SI加一
BH
SI中的字符
二、实验程序
DATASEGMENT
XDD001565A0H
YDD0021B79EH
ZDB4DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
START:
MOVAX,DATA;将X的低十六位和Y的低十六位相加
MOVDS,AX
LEASI,X
MOVAL,[SI]
INCSI
MOVAH,[SI]
LEADI,Y
MOVBL,[DI]
INCDI
MOVBH,[DI]
CLC
ADCAX,BX
LEASI,Z;将相加之和存入Z的低两个字节
MOV[SI],AX
LEASI,X+2;将X的高十六位和Y的高十六位相加
MOVAL,[SI]
INCSI
MOVAH,[SI]
LEADI,Y+2
MOVBL,[DI]
INCDI
MOVBH,[DI]
ADCAX,BX
LEASI,Z+2;将相加之和存入Z的高两个字节
MOV[SI],AX
LEASI,Z+2
CALLDISP;调用子程序以16进制显示Z的高两个字节
LEASI,Z
CALLDISP;调用子程序以16进制显示Z的低两个字节
MOVAH,4CH
INT21H
RET
MAINENDP
DISPPROC;以16进制数显示子程序
MOVBL,[SI]
INCSI
MOVBH,[SI]
MOVCH,4
MOVCL,4
NEXT:
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JLEPRINT
ADDDL,07H
PRINT:
MOVAH,2H
INT21H
DECCH
JNZNEXT
RET
DISPENDP
CODEENDS
ENDSTART
三、实验结果
程序运行结果如下:
实验五分支程序设计实验
一、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序,提供8字
节的数据:
0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、
连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.更改数据区中的数据,考察程序的正确性。
实验程序流程图如下:
BHN中的第一个数
SI
N的有效地址
CX
7
地址指针SI加一
BH与[SI]比较
Y
BH≧[SI]?
N
BH与[SI]交换
CX减一
N
CX=0?
Y
DXMAX的有效地址
9号功能调用
AH
BH
CALLDISP调用子程序
回车换行
BL
N中的第一个数
SI
N的有效地址
CX
7
BL≦[SI]?
BL与[SI]比较
地址指针SI加一
Y
N
N
Y
CX=0?
CX减一
BL与[SI]交换
BH
BL
DX
MIN的有效地址
9号功能调用
CALLDISP调用子程序
回车换行
返回DOS
主程序流程图
二、实验程序
DATASEGMENT
NDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
MAXDB'TheMaximumis:
$'
MINDB'Theminimumis:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBH,N;比较得最大值
LEASI,N
MOVCX,7
LOOP1:
INCSI
CMPBH,[SI]
JAELOOP2
XCHGBH,[SI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告