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