微机原理循环设计实验报告Word下载.docx
《微机原理循环设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理循环设计实验报告Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
DATASEGMENT
INF1DB"
Pleaseinputanumber(0-65535):
$"
IBUFDB7,0,6DUP("
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVA*,DATA
MOVDS,A*
MOVD*,OFFSETINF1
MOVAH,09H
INT21H
MOVD*,OFFSETIBUF;
键入一个十进制数(<
65535)
MOVAH,0AH
INT21H
MOVCL,IBUF+1;
十进制数的位数送C*
MOVCH,0
MOVSI,OFFSETIBUF+2;
指向输入的第一个字符(最高位)
MOVA*,0;
开始将十进制数转换为二进制数
AGAIN:
MOVD*,10;
((0⨯10+a4)⨯10+…)⨯10+a0
MULD*
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0
INCSI
LOOPAGAIN
MOVAH,4CH
CODEENDS
ENDSTART
本程序功能:
从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在A*寄存器中。
(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。
将二进制数转换为十进制数的程序清单如下:
DATASEGMENT
OBUFDB6DUP("
DATAENDS
CODESEGMENT
ASSUMECS:
DATA
MOVDS,A*
MOVB*,OFFSETOBUF+5
MOVBYTEPTR[B*],'
$'
MOVC*,10;
做(D*):
(A*)/10运算
LOOP1:
MOVD*,0;
被除数高16位清0
DIVC*
ADDDL,30H;
将DL中的一位十进制数转换为ASCII码
DECB*
MOV[B*],DL
ORA*,A*
JNZLOOP1
;
判断商是否为0,不为0继续
MOVD*,B*
MOVAH,09H
INT21H
显示转换得到的十进制数
INT21H
ENDSTART
本程序功能:
将存储在A*寄存器中的二进制数转换为十进制数并显示。
2、
流程图及程序框架
(1)流程图
(2)程序框架
INF1DB"
IBUFDB7,0,6DUP("
OBUFDB6DUP("
CODESEGMENT
接收从键盘输入的十进制数,并将其转换为二进制数(存A*寄存器)的指令序列
MOVC*,A*
MOVA*,0
MOVB*,1
LOOP2:
ADDA*,B*
INCB*
将A*中存放的二进制数转换为十进制数并显示的指令序列
LOOPLOOP2
CODEENDS
3、完整源程序代码
INF1DB"
Pleaseinputanumber(0-65535):
IBUFDB7,0,6DUP("
OBUFDB6DUP("
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
START:
MOVA*,DATA
MOVDS,A*
MOVD*,OFFSETINF1
MOVAH,09H
INT21H
MOVD*,OFFSETIBUF
MOVAH,0AH
MOVCL,IBUF+1
MOVCH,0
MOVSI,OFFSETIBUF+2
MOVA*,0
AGAIN:
MOVD*,10
MULD*
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0
INCSI
LOOPAGAIN
MOVC*,A*
MOVB*,1
LOOP2:
ADDA*,B*
INCB*
LOOPLOOP2
MOVB*,OFFSETOBUF+5
MOVBYTEPTR[B*],'
MOVC*,0AH
LOOP1:
MOVD*,0
DIVC*
ADDDL,30H
DECB*
MOV[B*],DL
ORA*,A*
JNZLOOP1
MOVDL,0AH
MOVAH,02H
MOVD*,B*
MOVAH,4CH
CODEENDS
ENDSTART
实验截图:
四、实验习题
1、从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。
显示格式为:
1+2+…+n=sum
其中n为累加个数,sum为累加和。
datasegment
obufdb6dup("
eudb'
+'
'
ebdb0dh,'
='
0dh,'
dataends
displaymacrostring
movd*,offsetstring
movah,09h
int21h
endm
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
mova*,data
movds,a*
mova*,1
movc*,0
loop1:
adcc*,a*
cmpa*,1
jeall
pusha*
displayeu
popa*
all:
calle*change
inca*
cmpc*,60000
jcloop1
pushc*
displayeb
mova*,c*
calle*change
popc*
movah,4ch
int21h
ret
mainendp
e*changeprocnear
pusha*
pushb*
pushc*
movb*,offsetobuf+5
movbyteptr[b*],'
movc*,10
loop2:
movd*,0
divc*
adddl,30h
decb*
mov[b*],dl
ora*,a*
jnzloop2
movd*,b*
popc*
popb*
popa*
ret
e*changeendp
codeends
endstart
2、从键盘输入6个加数N1、N2、N3、N4、N5和N6(均为1~4位的无符号十进制整数),求和并将计算结果在屏幕上显示出来。
3、从键盘输入一个无符号十进制整数(小于65536),将其转换为二进制数,统计该二进制数中包含的1的个数,并将统计结果在屏幕上显示出来。
4、从键盘输入N个无符号十进制整数(小于256),将其转换为二进制数后存放在字节变量BUF存储区中;
对这N个数进行由大到小排序,排序后将其仍存储在BUF中;
最后将排序后的结果在屏幕上显示出来。
(说明,以上习题任选一道题,附上流程图及源程序代码,然后把其他的两道题删掉)
五、实验小结
这次实验虽然难度不大,但在做的过程中也遇到了不少困难,有些错误不容易找出来,必须仔细的看和修改,所以要求我们养成良好的编码风格和习惯,尤其是源程序很长的时候,这就显得尤为重要。