微机原理实验.docx
《微机原理实验.docx》由会员分享,可在线阅读,更多相关《微机原理实验.docx(13页珍藏版)》请在冰豆网上搜索。
![微机原理实验.docx](https://file1.bdocx.com/fileroot1/2023-1/4/7e9f193f-072c-4471-9452-fd16d92778eb/7e9f193f-072c-4471-9452-fd16d92778eb1.gif)
微机原理实验
微机实验报告
信息82
陈赞
08055087
一、显示程序实验
1.1实验目的
(1)掌握在PC机上以十六进制数形式显示数据的方法。
掌握部分DOS功能调用的使
用方法。
(2)掌握分支程序及子程序的设计方法。
1.2实验设备
PC机一台。
1.3实验内容及说明
计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般
均用二进制数进行计算或用其他信息进行处理,处理结果又必须依照外设的要求变为
ASCII码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换和代码的转换
是必不可少的。
1.4实验步骤
(1)运行QTHPCI软件,根据实验内容编写程序。
(2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。
(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输
指令执行后各寄存器及数据区的内容。
按F9连续运行。
(4)更改数据区的数据,考察程序的正确性。
1.5程序原代码
DATASEGMENT
MESDB'Showaashex:
',0AH,0DH,'$'
SDDB'a'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
start:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES;showmessage
MOVAH,09H
INT21H
MOVSI,OFFSETSD
MOVAL,DS:
[SI]
ANDAL,0F0H;取高4位
MOVCL,4
SHRAL,CL
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
MOVAX,4C00H;gobacktodos
INT21H
CODEENDS
endstart
1.6试验结果附图
1.7显示程序流程
二、求和程序设计实验
2.1实验目的
(1)掌握使用运算类指令编程及调试方法。
(2)掌握运算类指令对各状态标志位的影响及其测试方法。
2.2实验设备
PC机一台。
2.3实验内容及说明
二进制双精度加法运算.计算Z=X+Y。
按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
修改X、Y的值,可
得到不同的结果。
2.4实验步骤
(1)运行QTHPCI软件,根据实验内容编写程序。
(2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连
接。
(3)“调试”菜单中的“进入调试器”命令进入Debug调试,F9运行程序。
(4)按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
修改X、Y的值,
可得到不同的结果。
2.5实验程序
*---------------------------------------------------------------*
*运算类指令编程实验*
*按提示输入数据*
*运行程序,在屏幕显示的运行结果中查看求和结果是否正确*
*因为用到键盘输入,不要在此窗口直接运行,而是到TD调试器里运行*
*---------------------------------------------------------------*
STACK1SEGMENTSTACK
DW64DUP(?
)
STACK1ENDS
DATASEGMENT
XLDW?
;请在此处给X低位赋值
XHDW?
;请在此处给X高位赋值
YLDW?
;请在此处给Y低位赋值
YHDW?
;请在此处给Y高位赋值
ZLDD?
ZHDD?
SIGNDB0;是否结束输入数据处理标记
sign0DB0;是否出错
BUFDB100;字符缓冲区
DB?
DB100DUP(0)
ARRDD2DUP(0)
inputDB0ah,0dh,'computeZ=X+Y,thenoutputtheresult'
DB0AH,0DH,'ifyouwanttoquitpleasepress...q/Q...'
dB0ah,0dh,'pressotherkeytoinputx,y',0ah,0dh,'$'
outputdb0ah,0dh,'z=x+y=$'
BUF1DB10DUP(0)
BUF0DB10DUP(0)
overdb'overflowerror!
$'
datdw0ah
ERROR_MESSDB'INPUTERROR,PLEASEINPUTAGAIN',0AH,0DH,'$'
input1db'pleaseinputx,y(0~65535)',0ah,0dh,'X=$'
input2db0AH,0DH,'y=$'
ndb?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
L0:
LEADX,INPUT;输入提示
MOVAH,9
INT21H
MOVAH,08h
INT21h
CMPAL,'Q'
JEexit
CMPAL,'q'
JEexit
LEABX,WORDPTRxl
MOVSIGN,0
MOVSIGN0,0
LEADX,input1
MOVAH,9
INT21h
reinput:
LEADX,BUF
MOVAH,10
INT21H
LEADI,BUF+2;开始处理输入的数据
L1:
LEASI,BUF0
MOVCX,0
L2:
MOVDL,[DI]
INCDI
CMPDL,0DH
JNEAA
ADDSIGN,1
JMPA0
AA:
MOV[SI],DL
INCSI
INCCX
JMPL2
A0:
LEASI,BUF0
MOVBP,CX
CALLF10T2
CMPsign0,-1
JEet
MOV[BX],AX
ADDBX,2
MOV[BX],DX
ADDBX,2
a1:
CMPsign,2
JEend0
LEADX,input2
MOVAH,9
INT21h
JMPreinput
exit:
MOVAH,4CH
INT21H
et:
LEADX,error_mess;出错提示
MOVAH,9
INT21h
JMPL0
END0:
MOVAX,XL;X的低位送AX
ADDAX,YL;X的低位加Y的低位
MOVZL,AX;存低位和
MOVAX,XH;X的高位送AX
ADCAX,YH;X的高位加Y的高位,同时加上CF
JNCNEXT1
LEADX,OVER
MOVAH,9
INT21H
JMPL0
NEXT1:
LEADX,OUTPUT;输出结果
MOVAH,9
INT21H
MOVAX,zh
ORAX,AX
JNZet
MOVAX,zl
CALLF2T10
JMPL0
*************************************
十进制转化为二进制子程序*
入口参数SI--要转化的字符串首址*
CX--十进制位数*
出口参数AL--转化为的二进制数*
************************************
F10T2PROC
PUSHBX
MOVAx,0
MOVSIGN0,0
MOVBL,[SI]
CMPBL,'+'
JZm
CMPBL,'-'
JNZNEXT3
MOVSIGN0,1
m:
DECCX
NEXT4:
INCSI
MOVBL,[SI]
NEXT3:
CMPBL,30H
JBD1
CMPbl,39h
JAd1
SUBbl,30h
MOVbh,BYTEPTR0
muldat
ADDAL,bl
JCd1
DECcx
JNEnext4
CMPsign0,1
JNEqq
NEGax
QQ:
CWD
POPbx
RET
d1:
MOVsign,-1
JMPqq
f10t2ENDP
*************************************
二进制转化为十进制子程序*
入口参数AL--要转化的二进制数据*
*
出口参数BUF--存放转化为的*
十进制字符串*
*************************************
F2T10PROC
PUSHBX
PUSHDX
PUSHSI
PUSHAX
LEASI,BUF
ORAL,AL
JNSPLUS
NEGAL
MOV[SI],BYTEPTR'-'
INCSI
PLUS:
MOVAH,0
MOVBX,10
CALLRADIX1
MOV[SI],BYTEPTR'$'
MOVDX,OFFSETBUF
MOVAH,9
INT21H
POPAX
POPSI
POPDX
POPBX
RET
F2T10ENDP
*************************************
进制转换处理程序*
入口参数AX--要转化的二进制数据*
BX--要转换成BX进制的数据*
出口参数*
*
*************************************
RADIX1PROC
PUSHCX
PUSHDX
MOVCX,0
LOP1:
MOVDX,0
DIVBX
PUSHDX
INCCX
ORAX,AX
JNELOP1
LOP2:
POPAX
CMPAL,10
JBL11
ADDAL,7
L11:
ADDAL,30H
MOV[SI],AL
INCSI
DECCX
JNELOP2
POPDX
POPCX
RET
RADIX1ENDP
CODEENDS
ENDSTART
2.6试验结果附图
2.7求和程序设计实验主程序流程图
三、实验总结
第一个试验只须改动预先设置的数据区的数据即可。
第二个加法器的实验,原程序只能实现8位加法,结果范围只能在-128到127之间;需要将结果范围修正到-32768~32767。
因此需要修改数据范围,此外,将F2T10子程序中的AL修改为AX,从而避免溢出,造成错误的结果。