




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4而大摩
CENTRALSOUTHUNIVERSITY
计算机构成与汇编
课程设计汇报
学生姓名2
指导教师杨希
学院信息科学与工程学院
专业班级计科0802
完毕时间2023年7月
目录
1.设计内容..........................................2
2.设计目日勺..........................................2
3.概要设计..........................................2
4.详细设计..........................................2
5.程序代码..........................................9
6.运行成果.........................................20
7.设计总结.........................................20
参照文献.............................................21
一、设计内容
1.输入20'30之间欧J「值,用递归计算Fibonacci数,以十进制数输出.
2.编写一拷贝程序,规定在命令行指定源文献名和目的文献名.
3.编写一种成绩记录程序,接受一批(最多20个)从键盘录入H勺0-100之间的十进制格
式的分数值,无数据直接回车时结束成绩录入。然后显示录入的总人数,总分,平均分
值(十进制整数格式),显示优秀,良好,中等,及格和不及格人数。(注:90以上优
秀80以上良好70以上中等60以上及格60如下不及格)
4.虚拟平台的模型机试验
二、设计目的
课程设计是计算机原理与汇编语言教学过程中H勺重要环节。本课程设计重要Id的是使计
算机专业学生深入学习计算机原理与汇编语言知识,深入提高学生计算机原理与汇编语言综
合能力和程序设计技能,锻炼运用计算机原理与汇编语言处理实际问题U勺能力。
三、概要设计
1、试验一是Fibonacci数列的求值,可通过递归调用实现。
2、试验二是规定复制文献,通过给出的文献名找到并打开文献,然后将文献内容读入内存,
建立一种新文献,将内存中的内容写入心文献中。
3、试验三规定对学生成绩进行记录,并输出有关信息。可先将输入数据读入一种数组中,每
读入一种数据,计算器家1,将读入的所有数据相加得到总分,并对每个数据进行比较,记
录对应等级。
4、试验三是虚拟试验,规定通过给出的多种芯片和元器件,连接成一种虚拟机,并进行有关
的指令操作。
四、详细设计
1、Fibonacci数列求值
算法思想是先将输入的字符存入数组中,然后将其转化为十进制数,再通过调用递归函数实
现求值,最终将成果转化为字符串后输出。重要代码如下:
数据段II勺定义:
datasegment;数据段
bufdb3,?,3dup(?)
bufldb5dup(?)
db'$'
bufZdbU
flagdb1
messldb'enterthenumber:',$
mess2db13,10,'result:','$'
buf3db1,24dup(0)
buf4db1,24dup(O)
dataends
输入参数并将参数转化为十进制数
leadx,messl;提醒输入
movah,9
int21h
movdx.offsetbuf:输入参数
movah.Oah
int21h
leasi,buf;计算参数E勺值
pushax
moval,0
subbyteptr[si+2],30h
addal.byteptr[si+2]
递归调用日勺子程序
code2segment;子程序
assumecs:code2,ds:data,ss:sseg
sumprocfar
leasi,buf3
cmpdl,buf2
jbsuml
jmpexit
suml:
incdl
leaditbuf4
movex,25
si:
movaI,[si]
movbl,[di]
add[di],al
cmpbyteptr[di],10d
jbs2
subbyteptr[di],10d
addbyteptr[si+l],l
s2:
mov[si],bl
incdi
incsi
loopsi
callsum
exit:ret
sumendp
code2ends
将成果输出
movdl.Odh:输出
movah,2
int21h
movdl.Oah
movah,2
int21h
2、文献复制
文献复制重要算法流程为先将输入的文献名存入一种缓冲区并打开文献,打开文献后,以
512个字节为单位将文献内容读入到内存缓冲区中,懂得源文献末尾。读完文献后,根据输
入的目日勺文献名创立文献,然后同样以512字节为单位将内存缓冲区中的字符串写入目日勺文
献中,写操作完毕后,关闭文献。其重要代码如下:
数据段:
dataSEGMENT
messlDB,Please,inputfilename:,,0DH,0AH,24H
1
mess2DBODH.OAH,'Please,inputdestinationfilename:107H,0DH,0AH)24H
fnfDBODH.OAH;filehasnotexisted!’,07HQDHQAH,24H
fdfDBODH.OAH,1Destinationfilehasexisted!',07H,0DH,0AH,24H
fdeDBODH.OAH.'Destinationpathhasnotexisted!',07H,0DH,0AH,24H
freDB0DH,0AH,'readingerror.',07H,ODH.OAH,24H
fweDBODH.OAH,'writtingerror.',07H,0DH,0AH,24H
fcsDBODH.OAH,'Filecopyedsucceed.,,0DH,0AH,24H
fbufferDB128;缓冲区
DB?
fnameDB128DUP(?);字符串名
fnum_sDW?;源文献号
fnum_dDW?;新文献号
bufferDB512DUP(?);字符串内容
dataENDS
存入文献名称:
fullO:LEADX.messl;提醒信息输出
MOVAH,9
INT21H
CLD
MOVCX,128招文献名存入fname中
MOVAL,0
LEADl.fname
REPSTOSB
字符读入内存:
readf:MOVBX,fnum_s;取源文献号
MOVCX.512;读出512个字符
MOVDX.OFFSETbuffer
MOVAH.3FH
INT21H
JNCwritef;读成功,则写
LEADXJre;不成功,显示错误信息,关闭文献,并结束程序
MOVAH,9
INT21H
JMPexit
字符写入目H勺文献:
writef:MOVBX,fnum_d;取新文献号
MOVCX,AX;按实际读入字数写文献
MOVAH.40H
INT21H
JNCcmpcx;写成功
LEADX.fwe;不成功,显示错误信息,关闭文献,并结束程序
MOVAH,9
INT21H
JMPexit
关闭文献:
exit:MOVAH.3EH:关闭文献
INT21H
MOVBXtfnum_s
MOVAH.3EH
INT21H
MOVAX,4C00H
INT21H
3、成绩记录程序
算法思想是先将键盘输入内字符串成绩转化为十进制后存入内存缓冲区中,读入的同步进行
计数。然后通过循环语句实现成绩的评估记录与累加过程,将总分除以计数器即得平均分。
最终将所得数据转化为字符串后显示出来。重要代码如下:
数据段:
DATASEGMENT
STRING1DB'PleaseInputScore:',"$,
STRING2DB'Thetotalnumber
STRINGSDB'Thesumis:':$,
STRING4DB'*********************',0AH,0DH,$
ENTER1DB0AH,0DH:$,
SCOREDW60DUPi:?);分派存储空间
TMPDB0,0,0,0
S5DW0;定义变量
S6DW0
S7DW0
S8DW0
S9DW0
S10DW0
TOTALSCOREDB0
DATAENDS
输入:
INPUT:输入一种字符
MOVAH,1
INT21H
CMPAL,30H
JBENTER2
CMPAL.39H
JNBINPUT
MOVAH,AL;AB=A*10+B
MOVBH.10
MOVAL.BL
MULBH
MOVBL,AL
JMPINPUT
显示总人数:
NUM:;显示总人数
MOVDX.OFFSETSTRING2;输出"thetotalnumberis:"
MOVAH.09H
INT21H
MOVAX,DI;outputthenuberofstudents
CALLB_TO_D
CALLOUTTMP
计算并显示总分:
SUM:;计算总分
MOVSl,6
MOVBX,SCORE[SI]
ADDAX.BX
SUBSI.2
JNSSUM
LEABX.TOTALSCORE
MOV[BX],AX
;显示总分
CALLB_TO_Djoutputthetotalscore
CALLOUTTMP
4、虚拟平台日勺模型机试验
模型机示意图:
根据上图进行连线,检查无误后开始进行测试,选择菜单中的“工具”,再选择“模型机
调试”,在指令输入窗口中输入如下指令:
000000()0
0001(X)00
00(X)1001
00100000
00(X)1011
00110000
00001011
01000000
()()(X)(X)()()
()()(X)(X)()1
这里做H勺是个加法运算,第一种加数已经存入到内存的0000101()单元中,第二个加数
是需要手工输入的。在试验运行面板中点击“运行”按钮,选择“输入”芯片,设置输入
的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。在试验运行
面板中双击持续脉冲,模型机便开始工作。
五、程序代码
Fibonacci数列求值
datasegment;数据段
butdb3,?,3dup(?)
bufldb5dup(?)
db
buf2db0
flagdb1
messldb'enterthenumber:',$
mess2db13,10,'result:','$'
buf3db1,24dup(0)
buf4db1,24dup(O)
dataends
ssegsegmentstack;堆栈段
dw512dup(?)
ssegends
codelsegment;代码段
assumecs:codel,ds:data,ss:sseg
start:
xordx,dx
movax,data
movds,ax
leadx.messl
movah,9
int21h
movdx,offsetbut
movah.Oah
int21h
leasi.buf;计算参数内值
pushax
moval,0
subbyteptr[si+2],30h
addal,byteptr[si+2]
cmpbyteptr[si+3],30h
jbsuanl
movcl,10
mulcl
subbyteptr[si+3],30h
addal,byteptr[si+3]
suanl:
movbuf2,al
popax
movdl,2
pushsi
leadi,buf4
callfarptrsum
popsi
movdl.Odh;输出
movah,2
int21h
movdl.Oah
movah,2
int21h
leadx,mess2
movah,9
int21h
s3:
cmpflag.l
jnzs5
cmpbyteptr[di],0
jzs6
movflag.O
s5:
movdl,[di]
adddl,30h
movah,2
int21h
s6:
decdi
cmpdi.offsetbuf4
jaes3
movah,4ch
int21h
codelends
code2segment;调用函数
assumecs:code2,ds:data,ss:sseg
sumprocfar
leasi,buf3
cmpdl,buf2
jbsuml
jmpexit
suml:
incdl
leadi,buf4
movex,25
si:
movaI,[si]
movbl,[di]
add[di],al
empbyteptr[di],10d
jbs2
subbyteptr[di],10d
addbyteptr[si+l],l
s2:
mov[si],bl
incdi
incsi
loopsi
callsum
exit:ret
sumendp
code2ends
endstart
文献复制
dataSEGMENT
messlDBPlease.inputfilename:',UDH,0AH,Z4H
mess2DBODH.OAH,'Please,inputdestinationfilename:',07H,0DH,0AH,24H
fnfDBODH.OAH;filehasnotexisted!,,07H,0DH,0AH,24H
fdfDBODH.OAH;Destinationfilehasexisted!1,07H,0DH,0AH,24H
fdeDBODIl,OAI1,'Destinationpathhasnotexisted!,,071l,ODIl,OAI1,2411
freDBODH.OAH.'readingerror.1107H,0DH,0AH,24H
fweDBODH.OAH.'writtingerror.',07H,0DH,0AH,24H
fcsDBODH.OAH,'Filecopyedsucceed.*,ODH,OAH,24H
(bufferDB128
DB?
fnameDB128DUP(?)
fnum_sDW?
fnum_dDW?
bufferDB512DUP(?)
dataENDS
codeSEGMENT
ASSUMECS:code,DS:data
start:MOVAX,data
MOVDS,AX
PUSHDS
POPES
fullO:LEADX.messl
MOVAH,9
INT21H
CLD
MOVCX,128
MOVAL,0
LEADl.fname
REPSTOSB
LEADX.fbuffer
MOVAH.OAH
INT21H
MOVBL,[fbuffer+l],将输入文献名日勺最终一种回车符换成0,由于建立日勺文献名
不能包括不可见字符
XORBH.BH
MOVSI.OFFSETfname
ADDSI.BX
MOVBYTEPTR[SI],0
LEADX,fname
MOVAX,3D00H
INT21H
JNCopen;打开成功
LEADX.fnf
MOVAH,9
INT21H
JMPfullO:重新输入
open:MOVfnum_s,AX;打开成功,保留源文献号
fulll:LEADX,mess2
MOVAH,9
INT21H
CLD;充0,将上次输入的文献名清零
MOVCX,128;文献名最大128字符,包括回车符
MOVAL,0
LEADl.fname
REPSTOSB
LEADX.fbuffer;输入文献名
MOVAH.OAH键盘输入到缓冲区DS:DX二缓冲区首地址
INT21H
MOVBL,[fbuffer+l]
XORBH,BH
MOVSI,OFFSETfname
ADDSI.BX
MOVBYTEPTR[SI],0
LEADX,fname
MOVAX,3D00H
INT21H
JCsetup;打开不成功
LEADX.fdf
MOVAH,9
INT21H
JMPexit
setup:LEADX.fname
MOVAH,3CH;建立新文献
INT21H
JNCsave;建立成功
LEADX.fde
MOVAH,9
INT21H
JMPexit
save:MOVfnum_d,AX;保留新文献号
MOVAX,3D01H;以只写方式打开新文献
INT21H
readf:MOVBX,fnum_s;取源文献号
MOVCX,512读出512个字符
MOVDX.OFFSETbuffer
MOVAH.3FH
INT21H
JNCwritef;读成功,则写
LEADX.fre;不成功,显示错误信息,关闭文献,并结束程序
MOVAH,9
INT21H
JMPexit
writef:MOVBX,fnum_d;取新文献号
MOVCX,AX;按实际读入字数写文献
MOVAH.40H
INT21H
JNCempex;写成功
LEADX,fwe;不成功,显示错误信息,关闭文献,并结束程序
MOVAH,9
INT21H
JMPexit
cmpcx:CMPCX,512;判断实际读入的字数是不是512
JEreadf;假如是512,阐明还没读到文献尾
1
LEADX,fcs;显示‘复制成功’
MOVAH,9
INT21H
exit:MOVAH.3EH;关闭文献
INT21H
MOVBXtfnum_s
MOVAH,3EH
INT21H
MOVAX,4C00H
INT21H
I
codeENDS
ENDstart
成绩记录
DATASEGMENT
STRING1DB'PleaseInputScore:',"$'
STRING2DB'Thetotalnumberis:',,$'
STRING3DB'Thesum
STRING4DB**********************,^AH.ODH.S1
ENTER1DB0AH,0DH,'$,
SCOREDW60DUPi?);分派存储空间
TMPDB0,0,0,0
S5DW0;定义变量
S6DW0
S7DW0
S8DW0
S9DW0
S10DW0
TOTALSCOREDB0
DATAENDS
;STACKSEGMENT;堆栈段
;DW64DUP(O)
;STACKENDS
CODESEGMENT代码段
ASSUMECS:CODE,DS:DATA;,SS:STACK
MAINPROCFAR
MOVAX,DATA
MOVDS,AX
;MOVAX,STACK
;MOVSS.AX
XORBX.BX;寄存器清零
XORCX.CX
XORSI.SI
XORDI.DI
CALLINSCORE
CALLSUMSCORE;
MOVAH.4CH返回DOS
INT21H
MAINENDP
B_TO_DPROCNEAR
PUSHBX
PUSHSI
PUSHCX
MOVCX,03H
INIT:
MOVSI,CX
MOVTMP[SI],0
DECCX
JNSINIT
THOUSAND:
SUBAX.30H
CMPAX,1000
JBHUNDREAD
MOVSI.03H
MOVBH.10
DIVBH
MOVTMP[SI],AH
HUNDREAD:
JBTEN
CMPAX,100
MOVSL02H
DIVBH
MOVTMP[SI],AH
TEN:
CMPAX,10
JBONE
MOVSI,01H
DIVBH
MOVTMP[SI],AH
DECSI
MOVTMP[SI].AL
POPSI
POPBX
POPCX
RET
ONE:
MOVSI,0
MOVTMP[SI],AL
POPBX
POPSI
RET
B—TO—DENDP
OUTTMPPROCNEAR
PUSHs-
PUSHCX
MOVex-3
OUTPUT-
MOVSL3
MOVDL_TMP-S=
MOVAHO2H
-NT21H
LOOPOUTPUT
POPs-
POPCX
RET
OUTTMPENDP
ZSCOREPROCNEAR
PUSHAX
PUSHBX
PUSHDX
PUSHDI
PUSHSI
MOVDX,OFFSETSTRING1输入“pleaseinputthescore"
MOVAH.09H
INT21H
MOVDX,OFFSETENTER1输出“回车”
MOVAH.09H
INT21H
INPUT:;输入一种字符
MOVAH,1
INT21H
CMPAL.30H
JBENTER2
CMPAL.39H
JNBINPUT
MOVAH,AL;AB=A*10+B
MOVBH.1O
MOVALBL
MULBH
MOVBL,AL
JMPINPUT
ENTER2:
CMPAL,0DH;与否为回车键
JZOVER是就跳到OVER
SPACE2:
CMPAL.20H;与否为空格
JZSAVE;是就跳到SAVE
JMPINPUT
SAVE:保留到SCORE中
MOVAL,BL
CBW
MOVSCORE[SI],A:<
ADDSl,2
INCDI
JMPINPUT
OVER:;保留最终一种数据,并寄存到SCORE中
MOVAL.BL
CBW
MOVSCORE[SI],AX
INCDI
MOVDL.OAH
MOVAH.02H
INT21H
NUM:;显示总人数
MOVDX,OFFSETSTRING2;输出“thetotalnumberis:"
MOVAH.09H
INT21H
MOVAX,DI;outputthenuberofstudents
CALLB_TO_D
CALLOUTTMP
MOVDX,OFFSETENTER1:输出“回车”
MOVAH.09H
INT21H
POPAX
POPBX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 如何增强员工在生产规划中的参与感计划
- 初中语文人教部编版(2024)七年级上册(2024)6 散步莫怀威教案
- 2024畜牧师考试详细试题及答案
- 2024年网络编辑师内容推广策略试题及答案
- 幼儿园大班社会《上学路上》安全教育课件
- 国际金融理财师考试专题研究与解析试题及答案
- 网络编辑师内容运营管理试题及答案
- Unit6EarthfirstUnderstandingideas教学设计-高一英语外研版
- 小语种证书考前冲刺试题及答案
- 探索秋分的艺术魅力
- 房源和客源的开发
- DL-T 2209-2021 架空输电线路雷电防护导则
- GB/T 38615-2020超声波物位计通用技术条件
- 商业银行经营管理学商业银行资产负债管理课件
- 智慧环卫大数据信息化云平台建设和运营综合解决方案
- 中国制造业数字化转型研究报告
- 申请法院调查取证申请书(调取银行资金流水)
- 办公室事故防范(典型案例分析)
- 三治融合课件讲解
- 设计概论重点知识
- 留仙洞总部基地城市设计
评论
0/150
提交评论