循环设计实验微电子0902任琨24.docx
- 文档编号:26212956
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:23
- 大小:366.30KB
循环设计实验微电子0902任琨24.docx
《循环设计实验微电子0902任琨24.docx》由会员分享,可在线阅读,更多相关《循环设计实验微电子0902任琨24.docx(23页珍藏版)》请在冰豆网上搜索。
循环设计实验微电子0902任琨24
循环设计实验
实验报告
院系名称
:
电子工程学院
学生姓名
:
任琨(24)
专业班级
:
微电子0902
学号
:
04094061
一、实验目的
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:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETINF1
MOVAH,09H
INT21H
MOVDX,OFFSETIBUF;键入一个十进制数(<65535)
MOVAH,0AH
INT21H
MOVCL,IBUF+1;十进制数的位数送CX
MOVCH,0
MOVSI,OFFSETIBUF+2;指向输入的第一个字符(最高位)
MOVAX,0;开始将十进制数转换为二进制数
AGAIN:
MOVDX,10;((0´10+a4)´10+…)´10+a0
MULDX
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0
INCSI
LOOPAGAIN
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
本程序功能:
从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。
(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。
将二进制数转换为十进制数的程序清单如下:
DATASEGMENT
OBUFDB6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETOBUF+5
MOVBYTEPTR[BX],'$'
MOVCX,10;做(DX):
(AX)/10运算
LOOP1:
MOVDX,0;被除数高16位清0
DIVCX
ADDDL,30H;将DL中的一位十进制数转换为ASCII码
DECBX
MOV[BX],DL
ORAX,AX
JNZLOOP1
;判断商是否为0,不为0继续
MOVDX,BX
MOVAH,09H
INT21H
;显示转换得到的十进制数
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
本程序功能:
将存储在AX寄存器中的二进制数转换为十进制数并显示。
2、
流程图及程序框架
(1)流程图
(2)程序框架
DATASEGMENT
INF1DB"Pleaseinputanumber(0-65535):
$"
IBUFDB7,0,6DUP(?
)
OBUFDB6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
接收从键盘输入的十进制数,并将其转换为二进制数(存AX寄存器)的指令序列
MOVDS,AX
MOVCX,AX
MOVAX,0
MOVBX,1
LOOP2:
ADDAX,BX
INCBX
将AX中存放的二进制数转换为十进制数并显示的指令序列
LOOPLOOP2
CODEENDS
ENDSTART
3、完整源程序代码
DATASEGMENT
INFOR1DB"Pleaseinputanumber(0-65535):
$"
IBUFDB7,0,6DUP(?
)
OBUFDB6DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETINFOR1
MOVAH,09H
INT21H
MOVDX,OFFSETIBUF
MOVAH,0AH
INT21H
MOVCL,IBUF+1
MOVCH,0H
LEASI,IBUF+2
MOVAX,0H
LOOP1:
MOVDX,10
MULDX
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0H
INCSI
LOOPLOOP1
MOVCX,AX
MOVAX,0
MOVBX,1
LOOP2:
ADDAX,BX
INCBX
LOOPLOOP2
MOVBX,OFFSETOBUF+5
MOVBYTEPTR[BX],'$'
LOOP3:
MOVDX,0H
MOVCX,10
DIVCX
ADDDL,30H
DECBX
MOV[BX],DL
ORAX,AX
JNZLOOP3
MOVDL,0AH
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
MOVDX,BX
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
四、实验习题
1.从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。
显示格式为:
1+2+…+n=sum
其中n为累加个数,sum为累加和。
完整程序代码
DATASEGMENT
INFOR1DB"1+2+......+$"
OBUF1DB16DUP(?
)
OBUF2DB16DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
DSTRINGMACROOPR
MOVDX,OPR
MOVAH,09H
INT21H
ENDM
START:
MOVAX,DATA
MOVDS,AX
LEAAX,INFOR1
DSTRINGAX
MOVAX,0
MOVBX,0
AGAIN1:
INCBX
ADDAX,BX
CMPAX,60000
JBAGAIN1
SUBAX,BX
DECBX
PUSHAX
MOVAX,BX
LEASI,OBUF1+15
CALLBTOD
DSTRINGSI
MOVDL,3DH
MOVAH,02H
INT21H
POPAX
LEASI,OBUF2+15
CALLBTOD
DSTRINGSI
MOVAH,4CH
INT21H
MAINENDP
BTODPROCNEAR
MOVBYTEPTR[SI],'$'
AGAIN2:
MOVDX,0H
MOVCX,10
DIVCX
ADDDL,30H
DECSI
MOV[SI],DL
ORAX,AX
JNZAGAIN2
RET
BTODENDP
CODEENDS
ENDSTART
2.从键盘输入6个加数N1、N2、N3、N4、N5和N6(均为1~4位的无符号十进制整数),求和并将计算结果在屏幕上显示出来。
完整程序代码
DATASEGMENT
INFOR1DB"Pleaseinputthefirstnumber(<10000):
$"
INFOR2DB0AH,0DH,"Pleaseinputthesecondnumber(<10000):
$"
INFOR3DB0AH,0DH,"Pleaseinputthethirdnumber(<10000):
$"
INFOR4DB0AH,0DH,"Pleaseinputthefouthnumber(<10000):
$"
INFOR5DB0AH,0DH,"Pleaseinputthefifthnumber(<10000):
$"
INFOR6DB0AH,0DH,"Pleaseinputthesixthnumber(<10000):
$"
INFOR7DB0AH,0DH,"Theresultis:
$"
N1DB7,0,6DUP(?
)
N2DB7,0,6DUP(?
)
N3DB7,0,6DUP(?
)
N4DB7,0,6DUP(?
)
N5DB7,0,6DUP(?
)
N6DB7,0,6DUP(?
)
RESULTDB16DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
DSTRINGMACROOPR1
MOVDX,OFFSETOPR1
MOVAH,09H
INT21H
ENDM
INPUTDATAMACROOPR2
LEADX,OPR2
MOVAH,0AH
INT21H
ENDM
START:
MOVAX,DATA
MOVDS,AX
DSTRINGINFOR1
INPUTDATAN1
DSTRINGINFOR2
INPUTDATAN2
DSTRINGINFOR3
INPUTDATAN3
DSTRINGINFOR4
INPUTDATAN4
DSTRINGINFOR5
INPUTDATAN5
DSTRINGINFOR6
INPUTDATAN6
LEASI,N1
CALLDTOB
PUSHAX
LEASI,N2
CALLDTOB
PUSHAX
LEASI,N3
CALLDTOB
PUSHAX
LEASI,N4
CALLDTOB
PUSHAX
LEASI,N5
CALLDTOB
PUSHAX
LEASI,N6
CALLDTOB
MOVCX,5
LOOP2:
POPBX
ADDAX,BX
LOOPLOOP2
LEASI,RESULT+15
CALLBTOD
DSTRINGINFOR7
MOVDX,SI
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
MAINENDP
DTOBPROCNEAR
MOVCL,[SI+1]
MOVCH,0
ADDSI,2
MOVAX,0
LOOP1:
MOVDX,10
MULDX
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0H
INCSI
LOOPLOOP1
RET
DTOBENDP
BTODPROCNEAR
MOVBYTEPTR[SI],'$'
AGAIN:
MOVDX,0
MOVCX,10
DIVCX
ADDDL,30H
DECSI
MOV[SI],DL
ORAX,AX
JNZAGAIN
RET
BTODENDP
CODEENDS
ENDSTART
3.从键盘输入一个无符号十进制整数(小于65536),将其转换为二进制数,统计该二进制数中包含的1的个数,并将统计结果在屏幕上显示出来。
完整程序代码
DATASEGMENT
INFOR1DB"Pleaseinputthedata(0~65535):
$"
INFOR2DB0AH,0DH,"Theresultis:
$"
XDB7,0,6DUP(?
)
RESULTDB7DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
DSTRINGMACROOPR1
MOVDX,OFFSETOPR1
MOVAH,09H
INT21H
ENDM
INPUTDATAMACROOPR2
LEADX,OPR2
MOVAH,0AH
INT21H
ENDM
START:
MOVAX,DATA
MOVDS,AX
DSTRINGINFOR1
INPUTDATAX
LEASI,X
CALLDTOB
MOVBX,0
MOVCX,16
LOOP3:
SHLAX,1
JNCZERO
INCBX
ZERO:
LOOPLOOP3
MOVAX,BX
LEASI,RESULT
CALLBTOD
DSTRINGINFOR2
MOVDX,SI
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
MAINENDP
DTOBPROCNEAR
MOVCL,[SI+1]
MOVCH,0
ADDSI,2
MOVAX,0
LOOP1:
MOVDX,10
MULDX
ANDBYTEPTR[SI],0FH
ADDAL,[SI]
ADCAH,0H
INCSI
LOOPLOOP1
RET
DTOBENDP
BTODPROCNEAR
MOVBYTEPTR[SI],'$'
AGAIN:
MOVDX,0
MOVCX,10
DIVCX
ADDDL,30H
DECSI
MOV[SI],DL
ORAX,AX
JNZAGAIN
RET
BTODENDP
CODEENDS
ENDSTART
4.从键盘输入N个无符号十进制整数(小于256),将其转换为二进制数后存放在字节变量BUF存储区中;对这N个数进行由大到小排序,排序后将其仍存储在BUF中;最后将排序后的结果在屏幕上显示出来。
完整程序代码
NEQU10
DATA1SEGMENT
BUF0DB7,0,6DUP(?
)
INFOR1DB0AH,0DH,"Pleaseinputthedatas:
$"
OBUFDB6DUP(?
)
ENTERDB0AH,0DH,'$'
DATA1ENDS
DATA2SEGMENT
BUFDB256DUP(?
)
BUF1DB256DUP(?
)
DATA2ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA1,ES:
DATA2
DSTRINGMACROOPR1
MOVDX,OFFSETOPR1
MOVAH,09H
INT21H
ENDM
MAINPROCFAR
START:
MOVAX,DATA1
MOVDS,AX
MOVAX,DATA2
MOVES,AX
MOVCX,N
LEADI,BUF
AGAIN1:
DSTRINGINFOR1
LEADX,BUF0
MOVAH,0AH
INT21H
LEABX,BUF0
CALLDTOB
STOSB
DECCX
JNZAGAIN1
MOVCX,N
LEADI,BUF1
AGAIN2:
PUSHCX
LEASI,BUF
MOVCX,N
LODSBYTEPTRES:
[SI]
DECSI
NEXT:
DECCX
JZDONE
INCSI
CMPAL,ES:
[SI]
JANEXT
MOVAL,ES:
[SI]
JMPNEXT
DONE:
STOSB
PUSHDI
MOVCX,N
LEADI,BUF
REPNZSCASB
DECDI
MOVBYTEPTRES:
[DI],0
POPDI
POPCX
DECCX
JNZAGAIN2
MOVCX,N
LEASI,BUF1
LEADI,BUF
REPMOVSBYTEPTR[DI],ES:
[SI]
LEASI,BUF
MOVCX,N
AGAIN5:
DSTRINGENTER
LODSBYTEPTRES:
[SI]
MOVAH,0
LEABX,OBUF+5
PUSHCX
CALLBTOD
MOVDX,BX
MOVAH,09H
INT21H
POPCX
DECCX
JNZAGAIN5
MOVAH,4CH
INT21H
MAINENDP
DTOBPROCNEAR
PUSHCX
PUSHDX
MOVCL,[BX+1]
MOVCH,0
ADDBX,2
MOVAX,0
LOOP1:
MOVDX,10
MULDX
ANDBYTEPTR[BX],0FH
ADDAL,[BX]
ADCAH,0H
INCBX
LOOPLOOP1
POPDX
POPCX
RET
DTOBENDP
BTODPROCNEAR
MOVBYTEPTR[BX],'$'
AGAIN4:
MOVDX,0
MOVCX,10
DIVCX
ADDDL,30H
DECBX
MOV[BX],DL
ORAX,AX
JNZAGAIN4
RET
BTODENDP
CODEENDS
ENDSTART
五、实验小结
这次实验,我还是有很多的东西不熟,小问题不断,总的来说就是缺乏锻炼,没多做设计,代码写入很慢,代码中的错误也很多。
相信我经过不断练习,应该能做不断熟练汇编程序设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 设计 实验 微电子 0902 任琨 24