微机原理与接口技术实验报告.docx
《微机原理与接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验报告.docx(37页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术实验报告
微机原理与接口技术
实验报告
学院:
自动化学院
班级:
电092班
姓名:
王蕾
学号:
40963006
2011年11月27日
第一部分32位微机原理实验
实验一显示程序实验
一、实验目的
1.掌握在PC机上以十六进制形式显示数据的方法;
2.掌握部分DOS功能调用使用方法;
3.熟悉轻松汇编的调试环境和使用。
二、实验设备
PC微机一台。
三、实验内容
一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
(1)显示单个字符输出
入口:
AH=02H
调用参数:
DL=输出字符
(2)显示字符串
入口:
AH=09H
调用参数:
DS:
DX=串地址,’$’为结束字符
(3)键盘输入并回显
入口:
AH=01H
返回参数:
AL=输出字符
(4)返回DOS系统
入口:
AH=4CH
调用参数:
AL=返回码
四、实验程序代码
DATASEGMENT
MESDB'VivalaVida!
',0AH,0DH,'$'
SDDB'b'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES;显示提示信息
MOVAH,09H
INT21H
MOVDI,OFFSETSD
MOVAL,DS:
[DI]
ANDAL,0F0H;取高四位
SHRAL,4
CMPAL,0AH;是否是A以上的数
JBL1
ADDAL,07H
L1:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAL,DS:
[DI]
ANDAL,0FH;取低四位
CMPAL,0AH
JBL2
ADDAL,07H
L2:
ADDAL,30H
MOVDL,AL;显示字符
MOVAH,02H
INT21H
MOVAX,4C00H;返回DOS
INT21H
CODEENDS
ENDSTART
五、实验调试运行步骤
1.运行轻松汇编软件,按实验流程图编写实验代码,保存并编译,对语法错误进行修改,直至显示“编译成功!
”。
2.单击“生成”按钮,显示“连接成功!
”。
3单击“运行”按钮,查看显示结果是否正确,如果不正确单击“调试”按钮,进行调试。
4.更改DB中的数据,观察程序的正确性(将“0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H”改为“0E3H,0CH,3AH,0F1H,0CDH,01H,4DH,0B6H”,截图见“六、实验运行结果”中所示)。
5.更改DB中的数据,观察程序的正确性(将“a”改为“f”,截图见“六、实验运行结果”中所示)。
六、实验运行结果
实验二数据传送实验
一、实验目的
1.熟悉轻松汇编的调试环境和使用;
2.掌握与数据有关的不同寻址方式。
二、实验设备
PC微机一台。
三、实验内容
将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
四、实验程序代码
DDATASEGMENT;定义原数据段
MSRDB'hello,word!
$'
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
MOVDI,OFFSETMSD
MOVCX,LEN
NEXT:
MOVAL,[SI];开始传送数据
MOVES:
[DI],AL
INCSI
INCDI
DECCX
JNZNEXT
PUSHES;将附加数据段的内容给数据段
POPDS
MOVDX,OFFSETMSD;显示字符串
MOVAH,9
INT21H;返回DOS
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、实验调试运行步骤
1.运行轻松汇编软件,按实验流程图编写实验代码,保存并编译,对语法错误进行修改,直至显示“编译成功!
”。
2.单击“生成”按钮,显示“连接成功!
”。
3单击“运行”按钮,查看显示结果是否正确,如果不正确单击“调试”按钮,进行调试。
4.更改DB中的数据,观察程序的正确性(将“hello,world!
”改为“Chinaisgreat!
”,截图见“六、实验运行结果”中所示)。
六、实验运行结果
实验三数码转换程序实验
一、实验目的
掌握不同进制数及编码相互转换的程序设计方法。
二、实验设备
PC微机一台。
三、实验内容
计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。
计算机与外设间的数码转换关系如下图所示:
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码转换成二进制数,并将转换结果按位显示在屏幕上。
2.将十进制数的ASCII码转换为BCD码
本实验要求将键盘输入的一个五位十进制数54321的ASCII码存放入数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。
若输入的不是十进制数的ASCII码,则输出“FF”。
提示:
一字节ASCII码取其低四位即变为BCD码。
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
五位十进制数可表示为:
ND=D4×104+D3×103+D2×102+D1×10+D0
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。
4.BCD码转换为二进制码
本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
四、实验程序代码
1.将ASCII码表示的十进制数转换为二进制数
DATASSEGMENT
MAXDB11
LENDB?
STRIDB11DUP(?
)
DATASENDS
EXTRASEGMENT
NUMDB11DUP(?
)
EXTRAENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,ES:
EXTRA
START:
MOVAX,DATAS;装载数据段寄存器
MOVDS,AX
MOVAX,EXTRA;装载附加段寄存器
MOVES,AX
LEADX,MAX;从键盘上输入字符串
MOVAH,0AH
INT21H
MOVCH,0
MOVCL,LEN;字符串长度给CL
LEASI,STRI;字符串开始偏移地址给SI
XORAX,AX
LEADI,NUM
MOVBL,0FFH
NEXT:
MOVAL,[SI];将字符串的十进制ASCII码转换二进制数存到附加数据段
CMPAL,30H
JBSAVE_TO_ES
CMPAL,39H
JASAVE_TO_ES
SUBAL,30H
MOVBL,AL
SAVE_TO_ES:
MOVES:
[DI],BL
INCDI
INCSI
LOOPNEXT
CALLDISPLAY_FUN
MOVAH,4CH
INT21H
DISPLAY_FUNPROC;将二进制数显示
XORCX,CX
XORAX,AX
LEADI,NUM
MOVCX,05H
X:
XORBX,BX
MOVBL,ES:
[DI]
CMPBL,0FFH
JZDISPLAY_FF
MOVAL,04H
DISPLAY_NORMAL:
SHLBL,1
TESTBL,10H
JNZDISPLAY_IT
MOVDL,30H
JMPDISPLAY_NOW
DISPLAY_IT:
MOVDL,31H
DISPLAY_NOW:
PUSHAX
MOVAH,02H
INT21H
POPAX
DECAL
JNZDISPLAY_NORMAL
JMPDISPLAY_END
DISPLAY_FF:
MOVDH,2
DISPLAY_FF_LOOP:
MOVDL,46H
MOVAH,02H
INT21H
DECDH
JNZDISPLAY_FF_LOOP
DISPLAY_END:
INCDI
LOOPX
RET
DISPLAY_FUNENDP
CODESENDS
ENDSTART
2.将十进制数的ASCII码转换为BCD码
DATASEGMENT
STRINGDB'INPUT:
','$'
STRING1DB'OUTPUT:
','$'
MSRDB6,?
6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,STRING
MOVAH,09H
INT21H
MOVDX,OFFSETMSR
MOVAH,0AH
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
LEADX,STRING1
MOVAH,09H
INT21H
MOVCL,[MSR+1]
MOVSI,0002H
MOVBX,OFFSETMSR
A1:
MOVAL,[BX+SI]
CMPAL,40H
JNCB1
SUBAL,30H
MOVCH,0
PUSHCX
MOVCL,4
MOVDH,AL
SHLDH,CL
A2:
ROLDH,1
MOVDL,DH
ANDDL,01H
ADDDL,30H
MOVAH,02H
INT21H
DECCL
JNZA2
POPCX
INCSI
DECCL
JNZA1
B1:
JZB2
MOVDL,46H
MOVAH,02H
INT21H
INCSI
DECCL
JNZA1
B2:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
3.将十六进制数的ASCII码转换为十进制数
DATASSEGMENT
STRIDB'FFFF'
MEMDB25DUP(?
)
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,STRI
LEADI,MEM
MOVCX,4
XORAX,AX
GET_STR:
;将数据以二进制形式保存到MEM中
MOVAL,[SI];取一个字节
CMPAL,39H
JAABOVE;如果为十以上的数字,跳转到ABOVE
SUBAL,30H
JMPINC_REG
ABOVE:
SUBAL,37H
INC_REG:
MOV[DI],AL
INCSI
INCDI
LOOPGET_STR
MOVCX,3;将mem中的数据每位的ASCII码保存
LEADI,MEM
MOVAL,[DI]
MOVAH,0
MOVBX,10H
MUL_10H:
MULBX
INCDI
ADDAL,[DI]
ADCAH,0
LOOPMUL_10H
LEADI,MEM
;/10000
XORDX,DX
MOVBX,10000
DIVBX
ADDAX,30H
MOV[DI+5],AL
MOVAX,DX
;/1000
XORDX,DX
MOVBX,1000
DIVBX
ADDAX,30H
MOV[DI+6],AL
MOVAX,DX
;/100
XORDX,DX
MOVBX,100
DIVBX
ADDAX,30H
MOV[DI+7],AL
MOVAX,DX
;/10
XORDX,DX
MOVBX,10
DIVBX
ADDAX,30H
MOV[DI+8],AL
;/1
ADDDX,30H
MOV[DI+9],DL
;DISPLAY
MOVCX,5
PLAY_LOOP:
;显示
MOVDL,[DI+5]
MOVAH,02H
INT21H
INCDI
LOOPPLAY_LOOP
MOVAH,4CH;返回DOS
INT21H
CODESENDS
ENDSTART
4.BCD码转换为二进制码
DATASSEGMENT
STRIDB13H,21H,18H,31H;分别对应十进制数13?
21,18?
31的BCD码
MEMDB20DUP(?
)
DATASENDS
;STACKSSEGMENT
;STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS;,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,STRI
LEADI,MEM
XORAX,AX
MOVBX,04H
ZHUANHUAN:
MOVCX,2
MOVAL,[SI];取一个字节
C1:
ROLAL,4;每次循环四位,求对应的ASCII码,保存到MEM单元
MOVDH,AL
ANDDH,0FH
ADDDH,30H
MOV[DI],DH
INCDI
LOOPC1
INCSI
DECBX
JNZZHUANHUAN
MOVCX,8;送屏幕显示
LEADI,MEM
XIANSHI:
MOVBX,2
C2:
MOVDL,[DI]
MOVAH,02H
INT21H
INCDI
DECBX
JNZC2
MOVDL,0AH;显示空格
MOVAH,02H
INT21H
LOOPXIANSHI
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
五、实验调试运行步骤
1.运行轻松汇编软件,按实验流程图编写实验代码,保存并编译,对语法错误进行修改,直至显示“编译成功!
”。
2.单击“生成”按钮,显示“连接成功!
”。
3单击“运行”按钮,查看显示结果是否正确,如果不正确单击“调试”按钮,进行调试。
4.更改DB中的数据,观察程序的正确性,截图见“六、实验运行结果”中所示
六、实验运行结果
1.将ASCII码表示的十进制数转换为二进制数
2.将十进制数的ASCII码转换为BCD码
3.将十六进制数的ASCII码转换为十进制数
4.BCD码转换为二进制码
实验四运算类程序实验
一、实验目的
1.掌握运算类指令编程及调试方法;
2.掌握运算类指令对各状态标志位的影响及测试方法。
二、实验设备
PC微机一台。
三、实验内容
80x86指令系统提供了实现加、减、乘、除运算的基本指令,可对下表所示的数据类型进行算术运算。
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。
四、实验程序代码
二进制双精度加法运算
DATASSEGMENT
STRIDB13H,21H,18H,31H;分别对应十进制数13?
21,18?
31的BCD码
MEMDB20DUP(?
)
DATASENDS
;STACKSSEGMENT
;STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS;,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEASI,STRI
LEADI,MEM
XORAX,AX
MOVBX,04H
ZHUANHUAN:
MOVCX,2
MOVAL,[SI];取一个字节
C1:
ROLAL,4;每次循环四位,求对应的ASCII码,保存到MEM单元
MOVDH,AL
ANDDH,0FH
ADDDH,30H
MOV[DI],DH
INCDI
LOOPC1
INCSI
DECBX
JNZZHUANHUAN
MOVCX,8;送屏幕显示
LEADI,MEM
XIANSHI:
MOVBX,2
C2:
MOVDL,[DI]
MOVAH,02H
INT21H
INCDI
DECBX
JNZC2
MOVDL,0AH;显示空格
MOVAH,02H
INT21H
LOOPXIANSHI
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
十进制数的BCD码减法运算
STACKSSEGMENTSTACK;堆栈段
DW128DUP(?
);注意这里只有128个字节
STACKSENDS
DATASSEGMENT;数据段
;请在这里定义您的数据
XDW0400H
YDW0102H
ZDW?
DATASENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS;初始化
MOVDS,AX
;请在这里添加您的代码
LEASI,X
LEADI,Y
LEABX,Z
CLC
MOVCX,2
L1:
MOVAL,BYTEPTR[SI]
SBBAL,BYTEPTR[DI]
AAS
MOVBYTEPTR[BX],AL
INCSI
INCDI
INCBX
DECCX
JNZL1
MOVBX,Z
CALLDISPLAY1
MOVAX,4C00H;退出程序
INT21H
DISPLAY1PROC
MOVCX,16
C2:
ROLBX,1
MOVDL,BL
ANDDL,01H
ADDDL,30H
MOVAH,02H
INT21H
LOOPC2
RET
DISPLAY1ENDP
CODESENDS
ENDSTART
五、实验调试运行步骤
1.运行轻松汇编软件,按实验流程图编写实验代码,保存并编译,对语法错误进行修改,直至显示“编译成功!
”。
2.单击“生成”按钮,显示“连接成功!
”。
3单击“运行”按钮,查看显示结果是否正确,如果不正确单击“调试”按钮,进行调试。
4.更改DB中的数据,观察程序的正确性,截图见“六、实验运行结果”中所示。
六、实验运行结果
实验五分支程序设计实验
一、实验目的
掌握分支程序的设计方法。
二、实验设备
PC微机一台。
三、实验内容
程序有顺序、循环、分支和子程序四种结构形式,分支结构的示意图如下图所示。
本实验要求通过求无符号字节序列中的最大值和最小值来反映分支程序的结构形式。
实验可以使用BH,BL作为暂存现行的最大值和最小值,且在程序的初始,将BH和BL初始化为首字节的内容,然后进入循环操作。
在循环操作中,依次从字节序列中逐个取出一个字节的内容与BH,BL进行比较,若取出的字节内容比BH的内容大或比BL中的内容小,则修改之。
当循环结束操作时,将BH,BL分别送屏幕显示。
参考实验流程如下图所示。
四、实验程序代码
DATASEGMENT
MESDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETMES
MOVCX,7;将缓存区的变量最大值放入AH,最小值放入AL
MOVBL,