微机原理实验42603.docx
《微机原理实验42603.docx》由会员分享,可在线阅读,更多相关《微机原理实验42603.docx(50页珍藏版)》请在冰豆网上搜索。
微机原理实验42603
微型计算机原理实验报告
学号40953055
姓名海米提。
热合木江
班级测控0902班
实验一显示程序实验
一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT21H)。
流程图
2.试验程序
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
SHRAL,4
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,DS:
[DI]
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
实验二数据传送实验
三、实验内容
将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上
1.试验程序
DATASEGMENT
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
MOVDI,OFFSETMSD
MOVCX,LEN
NEXT:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
DECCX
JNZNEXT
PUSHES
POPDS
MOVDX,OFFSETMSD
MOVAH,9
INT21H
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
MOVBX,0
MOVCX,LEN
NEXT:
MOVAL,MSR[BX]
MOVES:
MSD[BX],AL
INCBX
LOOPNEXT
2.实验结果
实验三数码转换程序实验
1.将ASCII码表示的十进制数转换为二进制数
1.流程图
2.试验程序
DATASSEGMENT
NUMBERDB'00012'
DATASENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVCX,4
MOVSI,OFFSETNUMBER
MOVAL,[SI]
SUBAL,30H
MOVAH,00H
MOVBL,10
L1:
MULBL
ADDAL,[SI+1]
SUBAL,30H
INCSI
DECCX
JNZL1
MOVCX,8
MOVBL,AL
NEXT:
SHLBL,1
JCONE
MOVDL,30H
JMPEXIT
ONE:
MOVDL,31H
EXIT:
MOVAH,02H
INT21H
DECCX
JNZNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.实验结果
2.将十进制数的ASCII码转换为BCD码
本实验要求将键盘输入的一个五位十进制数54321的ASCII码存放入数据区中,转换为BCD码后,并将转换结果按位分别显示于屏幕上。
若输入的不是十进制数的ASCII码,则输出“FF”。
提示:
一字节ASCII码取其低四位即变为BCD码
1.实验流程图
2.实验程序
DATASSEGMENT
BUFDB6
DB?
DB6DUP(?
)
BUFEDB'FF$'
DATASENDS
CODESEGMENT
ASSUMEDS:
DATAS,CS:
CODE
START:
MOVAX,DATAS
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,10
INT21H
MOVCH,5
MOVSI,DX
L2:
MOVBL,[SI+2]
INCSI
CMPBL,39H
JAL1
SUBBL,30H
ANDBL,0FH
MOVDH,4
MOVCL,4
;SHLAL,CL
ROLBL,CL
NEXT:
SHLBL,1
JCONE
MOVDL,30H
JMPEXIT
ONE:
MOVDL,31H
EXIT:
MOVAH,2
INT21H
DECDH
JNZNEXT
DECCH
JNZL2
JMPL3
L1:
MOVDX,OFFSETBUFE
MOVAH,9
INT21H
L3:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.实验结果
3.将十六进制数的ASCII码转换为十进制数
十六位二进制数的值域为0-65535,最大可转换为五位十进制数。
五位十进制数可表示为:
ND=D4×104+D3×103+D2×102+D1×10+D0
因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。
本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转结果显示在屏幕
1.实验流程图
2.实验程序
DATASEGMENT
BUFDB5
DB?
DB5DUP(?
)
HEXDB4DUP(?
)
DECIDB5DUP(0),'$'
S1DB'16JINZHI:
$'
S2DB0AH,0DH,'10JINZHI:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,S1
MOVAH,9
INT21H
LEADX,BUF
MOVAH,10
INT21H
MOVSI,2
MOVDI,0
CHECK:
MOVAL,[SI][BUF]
CMPAL,40H
JSNUM
CMPAL,47H
JSCAPITAL
SUBAL,57H
JMPSTORE
NUM:
SUBAL,30H
JMPSTORE
CAPITAL:
SUBAL,37H
JMPSTORE
STORE:
MOVHEX[DI],AL
INCDI
INCSI
CMPDI,4
JNZCHECK
LEADX,S2
MOVAH,9
INT21H
MOVAX,WORDPTRHEX
SHLAL,4
ADDAH,AL
MOVCH,AH
MOVAX,WORDPTR2[HEX]
SHLAL,4
ADDAL,AH
MOVAH,CH
MOVSI,5
MOVBX,10
MOVDX,0
CMPAX,0
JNSCONV
NEGAX
PUSHAX
PUSHDX
MOVDL,2DH
MOVAH,2
INT21H
POPDX
POPAX
CONV:
DECSI
DIVBX
ADDDX,30H
MOVDECI[SI],DL
XORDX,DX
CMPAX,0
JNZCONV
LEADX,DECI
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.实验结果
4.BCD码转换为二进制码
本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。
1.实验流程图
2.实验程序
DATASEGMENT
DASCDB3
DB?
DB3DUP(?
)
S1DB0AH,0AH,0DH,'10JINZHIMA:
$'
S2DB0AH,0DH,'BCDMA:
$'
S3DB0AH,0DH,'2JINZHIMA:
$'
STODB8DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,0
MOVSI,4
LOOPER:
CALLWHOLE
DECSI
JNZLOOPER
JMPEXIT
WHOLE:
LEADX,S1
MOVAH,9
INT21H
LEADX,DASC
MOVAH,10
INT21H
LEADX,S2
MOVAH,9
INT21H
MOVAX,WORDPTR2[DASC]
SUBAX,3030H
SHLAL,4
ADDAL,AH
MOV[DI][STO],AL
MOVCH,2
MOVCL,4
PRE1:
MOVDX,30H
ROLAL,1
JNCDISP1
ADDDX,01H
DISP1:
PUSHAX
MOVAH,02
INT21H
POPAX
DECCL
JNZPRE1
PUSHAX
MOVDL,20H
MOVAH,2
INT21H
POPAX
DECCH
MOVCL,4
JNZPRE1
LEADX,S3
MOVAH,9
INT21H
MOVAL,[DI][STO]
MOVBL,AL
ANDBL,0FH
SHRAL,4
MOVCL,10
MULCL
ADDAL,BL
INCDI
MOV[DI][STO],AL
INCDI
MO