微机原理实验报告.docx
- 文档编号:7167296
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:58
- 大小:268.27KB
微机原理实验报告.docx
《微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告.docx(58页珍藏版)》请在冰豆网上搜索。
微机原理实验报告
实验一显示程序实验
一、实验目的
1.掌握在PC机上以十六进制形式显示数据的方法;
2.掌握部分DOS功能调用使用方法;
3.熟悉Tddebug调试环境和TurboDebugger的使用。
二、实验所用设备
1.PC微机一台。
三、实验内容
一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
(1)显示单个字符输出
入口:
AH=02H
调用参数:
DL=输出字符
(2)显示字符串
入口:
AH=09H
调用参数:
DS:
DX=串地址,’$’为结束字符
(3)键盘输入并回显
入口:
AH=01H
返回参数:
AL=输出字符
(4)返回DOS系统
入口:
AH=4CH
调用参数:
AL=返回码
四、实验步骤
1.运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
图1-1显示程序实验流程图
五、参考程序清单
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
六、实验报告内容及要求
1.打开应用软件,参考实验程序。
2.保存程序,编译,链接,生成。
3.运行成功,在dos环境下显示为:
七、实验思考
对PC机上以十六进制形式显示数据的方法有一定了解,
了解了DOS功能调用使用,熟悉了调试环境和TurboDebugger的使用。
实验二数据传送实验
一、实验目的
1.熟悉Tddebug调试环境和TurboDebugger的使用;
2.掌握与数据有关的不同寻址方式。
二、实验所用设备
1.PC微机一台。
三、实验内容
将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参考实验程序:
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
将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示:
MOVBX,0
MOVCX,LEN
NEXT:
MOVAL,MSR[BX]
MOVES:
MSD[BX],AL
INCBX
LOOPNEXT
四、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
五、实验报告内容及要求
在应用环境下调试,链接,运行程序。
显示出的程序结果:
六、实验思考
进一步熟悉了Tddebug调试环境和TurboDebugger的使用,
了解和掌握与数据有关的不同寻址方式。
实验三数码转换程序实验
一、实验目的
掌握不同进制数及编码相互转换的程序设计方法。
二、实验所用设备
PC微机一台。
三、实验内容
计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。
计算机与外设间的数码转换关系如图3-1所示,数码对应关系如表3-1所示。
图3-1计算机与外设间的数码转换关系
1.将ASCII码表示的十进制数转换为二进制数
十进制数可以表示为:
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加次位的操作,依次类推,则可求出二进制数结果。
本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。
转换过程的参考流程如图3-2所示。
表3-1数码转换对应关系
2.将十进制数的ASCII码转换为BCD码
本实验要求将键盘输入的一个五位十进制数54321的ASCII码存放入数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。
若输入的不是十进制数的ASCII码,则输出“FF”。
提示:
一字节ASCII码取其低四位即变为BCD码。
转换部分的实验流程参见3-3。
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
五位十进制数可表示为:
ND=D4×104+D3×103+D2×102+D1×10+D0
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。
图3-2十进制ASCII转换为
二进制数参考流程
图3-3十进制ASCII转换为
BCD码参考流程
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。
转换部分的实验流程参见图3-4。
4.BCD码转换为二进制码
本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
转换部分的实验流程参见3-5。
四、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
图3-4将十六进制数的ASCII码转换为十进制数参考流程
图3-5BCD码转换为二进制码
参考流程
五、实验报告内容及要求
根据流程图编写程序并调试,写出程序调试过程及运行情况。
1.将ASCII码表示的十进制数转换为二进制数
程序:
DATASEGMENT
BUFFERDB'00012'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUFFER
MOVCX,5
MOVAL,0
BEGIN:
MOVDX,0AH
MOVBL,[SI]
SUBBL,30H
MULDX
ADDAL,BL
INCSI
LOOPBEGIN
MOVCX,8
MOVBL,AL
LOOP1:
ROLBL,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,02H
INT21H
LOOPLOOP1
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
程序结果为:
00001100
2.将十进制数的ASCII码转换为BCD码
DATASEGMENT
BUFFERDB5DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUFFER
MOVCX,5
MOVAH,1H
MOVBX,0FFH
LOOP1:
INT21H
MOV[SI],AL
INCSI
LOOPLOOP1
MOVAH,02H
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
MOVCX,5
LEASI,BUFFER
LOOP2:
MOVDI,4
MOVBL,[SI]
CMPBL,'0'
JBERROR
CMPBL,'9'
JAERROR
SUBBL,30H
ROLBL,4
LOOP4:
ROLBL,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,02H
INT21H
DECDI
JNZLOOP4
INCSI
LOOPLOOP2
JMPEND
ERROR:
ANDBL,0FH
ADDBL,'A'
MOVDL,BL
MOVAH,02H
INT21H
INT21H
END:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
程序结果:
010*********
3.将十六进制数的ASCII码转换为十进制数
DATASEGMENT
BUFFERDB000CH
RESDB5DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUFFER
MOVCX,4
MOVAX,0
MOVBX,0
BEGIN:
MOVDX,16
MOVBL,[SI]
CMPBX,'9'
JNAMARK1
SUBBX,'A'
ADDBX,10
JMPMARK2
MARK1:
SUBBX,'0'
MARK2:
MULDX
ADDAX,BX
INCSI
LOOPBEGIN
MOVBX,10
LEASI,RES+4
LOOP1:
DIVBX
ADDDL,'0'
MOV[SI],DL
DECSI
CMPAX,10
JAELOOP1
ADDAL,'0'
MOV[SI],AL
LEASI,RES
MOVCX,5
MOVAH,02H
LOOP2:
MOVDL,[SI]
INT21H
INCSI
LOOPLOOP2
CODEENDS
ENDSTART
程序结果:
12
4.BCD码转换为二进制码
DATASEGMENT
D1DB12H,34H,56H,78H
C1EQU$-D1
D2DBC1DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCH,C1
MOVCL,4
MOVSI,0
MOVBH,10
L1:
MOVAL,D1[SI]
MOVBL,AL
ANDBL,0FH
ANDAL,0F0H
SHRAL,CL
MULBH
ADDAL,BL
MOVD2[SI],AL
INCSI
DECCH
JNZL1
MOVSI,0
MOVCH,C1
L2:
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
MOVAL,D2[SI]
MOVDL,AL
ANDDL,0F0H
SHRDL,CL
ADDDL,30H
CMPDL,39H
JNAL3
ADDDL,7
L3:
PUSHAX
MOVAH,2
INT21H
POPAX
ANDAL,0FH
MOVDL,AL
ADDDL,30H
CMPDL,39H
JNAL4
ADDDL,7
L4:
MOVAH,2
INT21H
INCSI
DECCH
JNZL2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
程序结果为:
0000010011010010
六、实验思考
通过实验,对不同进制数及编码相互转换的程序设计方法有一定的了解和掌握。
实验四运算类程序实验
一、实验目的
1.掌握运算类指令编程及调试方法;
2.掌握运算类指令对各状态标志位的影响及测试方法。
二、实验所用设备
1.PC微机一台。
三、实验内容
80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对表4-1所示的数据类型进行算术运算。
表4-1数据类型算术运算表
1.二进制双精度加法运算
本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。
实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。
由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。
在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。
2.十进制数的BCD码减法运算
本实验要求计算X-Y=Z,其中,X、Y、Z为BCD码,其中X=0400H,Y=0102H。
3.乘法运算
本实验要求实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后,将乘积在屏幕上显示。
4.用减奇数开平方运算
80x86指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。
用减奇数法可求得近似平方根,获得平方根的整数部分。
我们知道,N个自然数中的奇数之和等于N2,即:
1+3+5=9=32
1+3+5+7=16=42
1+3+5+7+9+11+13+15=64=82
若要做S的开方运算,那麽就可以从S中逐次减去自然数中的奇数1,3,5,7…,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。
本实验要求利用减奇法计算0040H的开平方值,并将运算结果显示在屏幕上。
四、实验步骤
1.运行Tddebug软件,选择Edit菜单编写实验程序;
2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;
3.使用Rmrun菜单中的Run,运行程序,观察运行结果;
4.使用Rmrun菜单中的Debug,调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;
5.更改数据区中的数据,考察程序的正确性。
五、实验报告内容及要求
根据实验要求编写程序并调试,写出程序调试过程及运行情况。
1.二进制双精度加法运算
DATASEGMENT
XDW65A0H,0015H
YDW0B79EH,0021H
ZDW2DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,2
CLC
MOVSI,0
L1:
MOVAX,X[SI]
ADCAX,Y[SI]
MOVZ[SI],AX
INCSI
INCSI
LOOPL1
MOVBX,Z[2]
CALLLIST_BX
MOVBX,Z
CALLLIST_BX
MOVAH,4CH
INT21H
LIST_BXPROC
MOVCH,4
MOVCL,4
NEXT:
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,39H
JLEPRINT
ADDDL,7
PRINT:
MOVAH,2
INT21H
DECCH
JNZNEXT
RET
LIST_BXENDP
CODEENDS
ENDSTART
程序结果:
00371D3E
2.十进制数的BCD码减法运算
DATASEGMENT
XDW0400H
YDW0102H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,X
LEADI,Y
MOVDL,10D
MOVBL,[SI]
MOVAL,[SI+1]
MULDL
ADDBL,AL
MOVDL,10D
MOVCL,[DI]
MOVAL,[DI+1]
MULDL
ADDCL,AL
SUBBL,CL
MOVAL,BL
MOVBL,10D
DIVBL
MOVBH,AL
MOVBL,AH
MOVCX,4
MOVAH,02H
LOOP2:
ROLBX,4
MOVDL,BL
ANDDL,0FH
ADDDL,'0'
CMPDL,'9'
JBPRINT
ADDDL,'A'-('9'+1)
PRINT:
INT21H
LOOPLOOP2
CODEENDS
ENDSTART
程序结果:
0208
3.乘法运算
DATASEGMENT
XDD54320H
YDB03H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,X+2
MOVCX,3
MOVAX,0
LOOP1:
MOVDL,10D
MOVBL,[SI]
ROLBL,4
ANDBL,0FH
MULDX
ADDAX,BX
MOVDL,10D
MOVBL,[SI]
ANDBL,0FH
MULDX
ADDAX,BX
DECSI
LOOPLOOP1
LEADI,Y
MOVBL,[DI]
MULBX
MOVSI,4
MOVBX,AX
MOVCX,DX
MOVAH,02H
LOOP2:
ROLCX,4
MOVDL,CL
ANDDL,0FH
ADDDL,'0'
CMPDL,'9'
JBEPRINT1
ADDDL,'A'-('9'+1)
PRINT1:
INT21H
DECSI
JNZLOOP2
MOVSI,4
LOOP3:
ROLBX,4
MOVDL,BL
ANDDL,0FH
ADDDL,'0'
CMPDL,'9'
JBEPRINT2
ADDDL,'A'-('9'+1)
PRINT2:
INT21H
DECSI
JNZLOOP3
MOVDL,'H'
INT21H
CODEENDS
ENDSTART
程序结果:
00027C90H
4.用减奇数开平方运算
DATASEGMENT
RESDB5DUP('0')
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,0040H
MOVCX,1D
MOV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 报告