微型计算机原理实验.docx
《微型计算机原理实验.docx》由会员分享,可在线阅读,更多相关《微型计算机原理实验.docx(16页珍藏版)》请在冰豆网上搜索。
微型计算机原理实验
实验一:
输出字符‘A’的源程序如下:
PROGSEGMENT
ASSUMECS:
PROG
START:
MOVDL,'A'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
PROGENDS
ENDSTART
实验二:
1.把BX中的二进制数转换成十进制数,在屏幕上显示出来,只考虑无符号数。
程序如下:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVBX,0FFFH
MOVCX,10000
CALLDEC_DIV
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVAH,4CH
INT21H
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
2.把BX中的带符号数转换成十进制数,在屏幕上显示出来。
程序如下:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVBX,8001H
MOVAX,8000H
ANDAX,BX
JNZMINUS
JMPDISP
MINUS:
MOVDL,'-'
MOVAH,2
INT21H
NEGBX
JMPDISP
DISP:
MOVCX,10000
CALLDEC_DIV
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVAH,4CH
INT21H
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
3.求一个数据块(由10个单字节的无符号数组成)中的最大元素,并将结果在屏幕上显示出来,程序如下:
DATASEGMENT
BLOCKDB1,0,5,7,10,30,100,127,90,80
RESULTDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGINPROCFAR
MOVAX,DATA
MOVDS,AX
MOVCX,9
LEASI,BLOCK
MOVAL,[SI]
X1:
INCSI
CMPAL,[SI]
JAEX2
MOVAL,[SI]
X2:
LOOPX1
MOVRESULT,AL
MOVAH,0
MOVBX,AX
CALLXIANSHI
MOVAH,4CH
INT21H
BEGINENDP
XIANSHIPROCNEAR
MOVAL,80H
ANDAL,BL
JNZMINUS
JMPDISP
MINUS:
MOVDL,'-'
MOVAH,2
INT21H
NEGBL
JMPDISP
DISP:
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
MOVAH,4CH
INT21H
XIANSHIENDP
DEC_DIVPROCNEAR
MOVAX,BX
MOVDL,0
DIVCL
MOVBL,AH
MOVBH,0
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDBEGIN
4.求一个数据块(由20个单字节的带符号数组成)中的正数和(≤字)和负数和(≤字),并在屏幕上用十进制的形式显示出两个和。
程序如下:
DATASEGMENT
BLOCKDW-100,100,200,-200,5,6,7,8,9,10
DW11,12,13,14,15,50,-50,150,-150,-200
POSITDW?
NEGATDW?
ST1DB'Thesumofallthepositivenumbers:
$'
ST2DB'Thesumofthenegativenumbers:
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROC
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETBLOCK
MOVSI,0
MOVDI,0
MOVCX,20
X1:
MOVAX,[BX]
CMPAX,0
JGEX3
ADDDI,AX
JMPX2
X3:
ADDSI,AX
X2:
ADDBX,2
LOOPX1
MOVPOSIT,SI
MOVNEGAT,DI
MOVBX,SI
MOVDX,OFFSETST1
MOVAH,9
INT21H
CALLXIANSHI
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
MOVBX,NEGAT
NEGBX
ANDBX,7FFFH
MOVDX,OFFSETST2
MOVAH,9
INT21H
MOVDL,'-'
MOVAH,2
INT21H
CALLXIANSHI
MOVAH,4CH
INT21H
STARTENDP
XIANSHIPROCNEAR
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
RET
XIANSHIENDP
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
5.将寄存器BX中的二进制数转换成十六进制数并在屏幕上显示出来。
程序如下:
CODESEGMENT
ASSUMECS:
CODE
BINHEXPROCFAR
MOVCH,4
MOVBX,1000
ROTATE:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,3AH
JLOUTPUT
ADDDL,7
OUTPUT:
MOVAH,2
INT21H
DECCH
JNEROTATE
MOVDL,'H'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
BINHEXENDP
CODEENDS
ENDBINHEX
实验三:
1.从键盘上输入一个十进制数(0~65535),转换成二进制数并放入寄存器BX中,其程序框图如下:
程序如下:
CODESEGMENT
ASSUMECS:
CODE
STARTPROC
CALLDECBIN
CALLXIANSHI
MOVAH,4CH
INT21H
STARTENDP
DECBINPROCNEAR
MOVCX,10
MOVBX,0
LOP1:
MOVAH,1
INT21H
CMPAL,30H
JLEXIT
CMPAL,39H
JGEXIT
SUBAL,30H
MOVAH,00H
XCHGAX,BX
MULCX
ADDBX,AX
JMPLOP1
EXIT:
RET
DECBINENDP
XIANSHIPROCNEAR
LP1:
MOVCX,10000
CALLDEC_DIV
MOVCX,1000
CALLDEC_DIV
MOVCX,100
CALLDEC_DIV
MOVCX,10
CALLDEC_DIV
MOVCX,1
CALLDEC_DIV
RET
XIANSHIENDP
DEC_DIVPROCNEAR
MOVAX,BX
MOVDX,0
DIVCX
MOVBX,DX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
RET
DEC_DIVENDP
CODEENDS
ENDSTART
2.从键盘上输入0~65535范围的一个十进制数,在屏幕上显示出相应的十六进制数。
程序如下:
CODESEGMENT
ASSUMECS:
CODE
STARTPROC
CALLDECBIN
MOVCH,4
CALLROTATE
MOVAH,4CH
INT21H
STARTENDP
DECBINPROCNEAR
MOVCX,10
MOVBX,0
LOP1:
MOVAH,1
INT21H
CMPAL,30H
JLEXIT
CMPAL,39H
JGEXIT
SUBAL,30H
MOVAH,00H
XCHGAX,BX
MULCX
ADDBX,AX
JMPLOP1
EXIT:
RET
DECBINENDP
ROTATEPROC
LOP2:
MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,3AH
JLOUTPUT
ADDDL,7
OUTPUT:
MOVAH,2
INT21H
DECCH
JNELOP2
MOVDL,'H'
MOVAH,2
INT21H
MOVAH,4CH
INT21H
ROTATEENDP
CODEENDS
ENDSTART
实验四:
1.在内存中存有一字符串,以0为结尾,程序开始输出‘HELLO’然后等待从键盘输入一字符,再改字符串中寻找该字符,若找到,输出‘yes’;若找不到,输出‘no’,然后再输入下一字符。
程序如下:
DATASEGMENT
STR1DB'HELLO',0DH,0AH,'$'
STR2DB20H,'YES',0DH,0AH,'$'
STR3DB20H,'NO',0DH,0AH,'$'
STR4DB'123045ABa=!
?
',00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSTR1
MOVAH,9
INT21H
LOOP1:
MOVAH,1
INT21H
MOVBX,OFFSETSTR4
GON:
MOVAH,[BX]
CMPAH,0
JZNO
INCBX
CMPAH,AL
JNZGON
MOVDX,OFFSETSTR2
GO:
MOVAH,9
INT21H
JMPLOOP1
NO:
MOVDX,OFFSETSTR3
JMPGO
STARTENDP
CODEENDS
ENDSTART
2.实验内容1的程序是个无限循环程序,若按‘ESC’键,让程序退出循环,是系统返回DOS。
已知‘ESC’键的键值是1BH,按照上面要求对实验内容1的程序进行修改,然后重新汇编、链接和运行。
程序如下:
DATASEGMENT
STR1DB'HELLO',0DH,0AH,'$'
STR2DB20H,'YES',0DH,0AH,'$'
STR3DB20H,'NO',0DH,0AH,'$'
STR4DB'123045ABa=!
?
',00H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSTR1
MOVAH,9
INT21H
LOOP1:
MOVAH,1
INT21H
MOVBX,OFFSETSTR4
GON:
MOVAH,[BX]
CMPAH,0
JZNO
INCBX
CMPAH,AL
JNZGON
MOVDX,OFFSETSTR2
GO:
MOVAH,9
INT21H
JMPLOOP1
NO:
MOVDX,OFFSETSTR3
JMPGO
STARTENDP
CODEENDS
ENDSTART