微机原理循环设计实验报告.docx
- 文档编号:1414753
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:9
- 大小:35.92KB
微机原理循环设计实验报告.docx
《微机原理循环设计实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理循环设计实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
微机原理循环设计实验报告
一、实验目的
1、掌握循环程序的设计方法。
2、掌握比较指令、转移指令和循环指令的使用方法。
3、进一步掌握调试工具的使用方法。
二、实验预习要求
1、复习比较指令、条件转移指令和循环指令。
2、复习循环程序的结构、循环控制方法等知识。
3、读懂“实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。
4、根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
5、从“实验习题”中任选一道题目,编写源程序,以便上机调试。
三、实验内容
计算1+2+……n=",其中n通过键盘输入。
要求在屏幕上提供如下信息:
Pleaseinputanumber(1~627):
;出现此信息后通过键盘输入一个小于628的无符号整数
1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和
程序运行情况如下图所示(说明:
图中所运行程序允许累加和不大于一个32位二进制数所能表示的*围)。
1、编程指导
(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。
将键盘输入的十进制数转换为二进制数的程序清单如下:
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
INT21H
CODEENDS
ENDSTART
本程序功能:
从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在A*寄存器中。
(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。
将二进制数转换为十进制数的程序清单如下:
DATASEGMENT
OBUFDB6DUP(")
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVA*,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
;显示转换得到的十进制数
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
本程序功能:
将存储在A*寄存器中的二进制数转换为十进制数并显示。
2、
流程图及程序框架
(1)流程图
(2)程序框架
DATASEGMENT
INF1DB"Pleaseinputanumber(0-65535):
$"
IBUFDB7,0,6DUP(")
OBUFDB6DUP(")
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVA*,DATA
接收从键盘输入的十进制数,并将其转换为二进制数(存A*寄存器)的指令序列
MOVDS,A*
MOVC*,A*
MOVA*,0
MOVB*,1
LOOP2:
ADDA*,B*
INCB*
将A*中存放的二进制数转换为十进制数并显示的指令序列
LOOPLOOP2
CODEENDS
ENDSTART
3、完整源程序代码
DATASEGMENT
INF1DB"Pleaseinputanumber(0-65535):
$"
IBUFDB7,0,6DUP(")
OBUFDB6DUP(")
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVA*,DATA
MOVDS,A*
MOVD*,OFFSETINF1
MOVAH,09H
INT21H
MOVD*,OFFSETIBUF
MOVAH,0AH
INT21H
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*
MOVA*,0
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
INT21H
MOVD*,B*
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
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
pusha*
pushc*
displayeb
mova*,c*
calle*change
popc*
popa*
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*
movah,09h
int21h
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中;最后将排序后的结果在屏幕上显示出来。
(说明,以上习题任选一道题,附上流程图及源程序代码,然后把其他的两道题删掉)
五、实验小结
这次实验虽然难度不大,但在做的过程中也遇到了不少困难,有些错误不容易找出来,必须仔细的看和修改,所以要求我们养成良好的编码风格和习惯,尤其是源程序很长的时候,这就显得尤为重要。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 循环 设计 实验 报告