汇编语言求公约数和平方差.docx
- 文档编号:9649794
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:41.77KB
汇编语言求公约数和平方差.docx
《汇编语言求公约数和平方差.docx》由会员分享,可在线阅读,更多相关《汇编语言求公约数和平方差.docx(19页珍藏版)》请在冰豆网上搜索。
汇编语言求公约数和平方差
辽宁工业大学
微机原理与汇编技术课程设计(论文)
题目:
求两个数的公约数
院(系):
电子与信息工程学院
专业班级:
计算机科学与技术
学号:
*********
***********************
**********************
教师职称:
副教授
起止时间:
13-07-01至13-07-05
课程设计(论文)任务及评语
院(系):
电子与信息工程学院教研室:
计算机科学与技术
学号
100401018
学生姓名
郑杭
专业班级
计算机101
课程设计(论文)题目
求2个100以内的整数的公约数和平方差
课程设计(论文)任务
主要设计内容:
(1)输入两个小于 100的十进制正整数。
(2)求出这两个数的所有公约数。
(3)求出这两个数的平方差,若是负的要输出负号。
(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(5)要使用到子程序。
要求:
1、根据题目要求,拿出总体设计方案,查找相关资料,解决设计中的技术难点,并画出程序流程图。
针对题目的具体要求,根据前期的设计方案,实时编码,同时编写相应文档。
完成编码后,根据题目要求测试程序是否合格,同时优化程序,归纳文档资料,按要求书写课程设计报告。
2、认真独立完成所规定的设计内容(4000字左右),严禁相互抄袭;
3、撰写、打印设计说明书一份。
指导教师评语及成绩
平时成绩:
论文质量:
答辩:
总成绩:
指导教师签字:
年月日
第1章前言
1.1背景
汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。
其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。
原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。
想深入研究英国文化,不会英语行吗?
汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:
充分获得底层编程的体验,深刻理解机器运行程序的机理。
这两个目的达到了,其他目的也就自然而然地达到了。
举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解。
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间的要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。
随着科学技术迅速发展,理工科大学生不仅需要掌握计算机方面的基本理论知识,而且还需要掌握基本的实验技能及一定的科学研究能力。
通过课程设计,使学生巩固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。
鉴于汇编语言的广泛用途及其在当代计算机界的重要作用,本人利用学的知识,在同学门的帮助下,花费大量时间,完成了求公约数和平方差的设计。
1.2基本功能要求
本程序是利用汇编语言,实现求两个数的公约数和平方差,先输入两个数字到寄存器BX,CX,然后调用子程序求出最大公约数,求出最大公约数的所有约数,求出两个数的平方差,最后输出结果
其系统组成框图如图1.1所示。
图1.2系统总体框图
第2章程序设计
2.1题目的基本内容
设计题目:
求两个数的公约数
具体要求:
(1)输入两个小于 100的十进制正整数。
(2)求出这两个数的所有公约数。
(3)求出这两个数的平方差,若是负的要输出负号。
(4)计算两个数各占和的百分比,并且按照“ %”的格式输出(小数点后保留两位)。
(5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(6)要使用到子程序。
2.2系统流程图
图2.2系统流程图
2.3课程设计的具体内容说明
算法描述:
①输入m和n;
②求m除以n的余数r;
③若r等于0,则n为最大公约数,算法结束;
否则执行第④步;
④将n的值放在m中,将r的值放在n中;
⑤重新执行第②步。
连续整数检测算法描述
各个算法时间复杂度和运算速度:
程序设计思想:
先用辗转法求出两个数的最大公约数,再求出最大公约数的所有约数
用辗转相除法求最大公约数算法:
先用小的一个数除大的一个数,得第一个余数;l再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;l这样逐次用后一个数去除前一个余数,直到余数是0为止。
那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。
2.4课程设计中关键内容的分析设计说明
DATASEGMENT
BUFFDB0DH,0AH,'$'
IN_MSG1DB'PLEASEENTERANUMBER:
',0DH,0AH,'$';定义输出提示
IN_MSG2DB'PLEASEENTERANOTHERNUMBER:
',0DH,0AH,'$'
OUT_MSGDB'THECOMMONNUMBER(S)IS(ARE):
',0DH,0AH,'$'
PFDB'PINGFANGCHA:
',0DH,0AH,'$'
LOADDB'PRESSANYKEYTOCONTINUE$'
XDW0
YDW0
ZDW0
CDB0H
SDB6DUP(0H),'$'
CTRLDB0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,OFFSETIN_MSG1;提示输入第一个数据
CALLDISPMSG
CALLREADSID;输入第一个数据
MOVBX,AX;第一个数据存到BX
MOVX,BX;第一个数据存到X
MOVAX,OFFSETIN_MSG2;提示输入第二个数据
CALLDISPMSG
CALLREADSID;输入第二个数据
MOVCX,AX;保存到CX
MOVY,CX;保存到Y
CALLAGAIN;调用子程序
MOVAX,OFFSETOUT_MSG
CALLDISPMSG
MOVAX,CX
CALLDISPSID
AGAINPROC;声明子程序,求最大公约数
CMPBX,CX
JNLFRONT
XCHGBX,CX
FRONT:
XORDX,DX
MOVAX,BX
DIVCX
CMPDX,0
JZEQUAL
MOVBX,CX
MOVCX,DX
JMPFRONT
EQUAL:
RET
AGAINENDP
DISPMSGPROC;声明子程序,求约数
MOVDX,AX
MOVAH,9
INT21H
RET
DISPMSGENDP
READSIDPROC
MOVAH,1
INT21H
MOVDH,AL
SUBDH,30H
MOVAH,1
INT21H
CMPAL,0DH;将AL与ODH(回车键的ASCII码)作比较
JZDONE1;相等的时候跳转到DONE1
SUBAL,30H;做减法运算
SHLDH,1
MOVDL,DH;将DH中的内容送到DL
SHLDH,1;逻辑左移动指令
SHLDH,1
ADDDH,DL;加法指令,DH=DH+DL
ADDDH,AL;加法指令,DH=DH+AL
DONE1:
MOVCL,DH
MOVDX,OFFSETBUFF
MOVAH,9
INT21H
MOVAL,CL
XORAH,AH
RET
READSIDENDP
DISPSID:
MOVBL,AL;BL=AL
MOVBH,1;BH=1
L1:
MOVAL,BL
XORAH,AH;将AH清零
DIVBH
CMPAH,0
JNZNEXT
MOVAL,BH;AL=BH
AAM
MOVCX,AX
ADDCH,30H;CH=CH+30H
MOVDL,CH;DL=CH
MOVAH,2;AH=2
INT21H
ADDCL,30H;CL=CL+30H
MOVDL,CL;DL=CL
MOVAH,2;输出DL中的内容
INT21H
MOVDX,OFFSETBUFF;将BUFF的首地址给DX
MOVAH,9
INT21H
NEXT:
INCBH;BH+1
CMPBL,BH;BL与BH做比较
JLDONE;跳转到JL
JMPL1;跳转到L1
DONE:
MOVAX,OFFSETPF;;将PF的首地址给AX
CALLDISPMSG
CALLPFC
PFCPROC;声明子程序,求平方差
WORK:
MOVAL,BYTEPTRX
MULAL
MOVZ,AX
MOVAL,BYTEPTRY
MULAL
CMPZ,AX
JBINT1
SUBZ,AX
JMPINT2
INT1:
SUBAX,Z
MOVZ,AX
MOVC,'-'
INT2:
MOVCX,5H
MOVDI,4H
MOVBX,0AH
MOVAX,Z
WORK2:
MOVDX,0
DIVBX
ADDDL,30H
MOVS[DI],DL
DECDI
CMPAX,0H
JZW2EXIT
LOOPWORK2
W2EXIT:
MOVAL,C
MOVS[DI],AL
MOVDX,OFFSETCTRL
MOVAH,09H
INT21H
MOVDI,0
WORK3:
INCDI
CMPS[DI],0H
JZWORK3
LEADX,S[DI]
MOVAH,09H
INT21H
MOVAH,4CH;返回DOS
INT21H
RET
PFCENDP
MOVAH,4CH;返回DOS
INT21H
CODEENDS;代码段结束标志
ENDSTART;程序结束标志
运行结果:
图2.4运行结果图
第3章课程设计总结
首先要对这个问题进行分析,选择你所想用的算法,使这个程序能键盘输入自己想求的两个数,回车结束,即可看到该算法求出的公约数。
对这次试验,我只能用一些简单的代码进行编程,由于我的编程水平有限,我所用的代码也很简单,在算法中,存在一个问题有待改进,那就是输入的两个数之后,第一次只能求出公约数,再输入一次才能求出平方差,而且,平方差输出前面没有提示。
先用辗转法求出两个数的最大公约数,再求出最大公约数的所有约数并显示,先用小的一个数除大的一个数,得第一个余数;l再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;l这样逐次用后一个数去除前一个余数,直到余数是0为止。
那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。
然后所求出的最大公约数的约数都是这两个数的公约数。
实验中充分熟悉了辗转相除法。
从这次实验中,我复习了汇编语言代码,同时也通过辗转算法解决了求解出最大公约数这个问题。
之前也尝试过其他算法,从这个试验的结果我了解到了算法的优与劣的差别,虽然得到的是同样的结果,但是需要的时间和资源却相差很大,这提示我们在以后写算法的时候要找出最优算法。
可见汇编语言编程的人来说是多么的重要,在以后写程序过程中要时刻提醒自己找最优算法,当然得先学会分析。
在以后的学习中我要学会多实践、多分析,在不停的改正错误中提高自己。
参考文献
[1]方立友.微机原理与汇编语言实用教程,北京:
清华大学出版社,2007
[2]朱定华.微机原理、汇编与接口技术(第2版),北京:
清华大学出版社,2010
[3]周杰英.微机原理、汇编语言与接口技术,北京:
人民邮电出版社,2011
[4]钱晓捷.16/32位微机原理、汇编语言及接口技术(第3版),北京:
机械工业出版社,2011
[5]姜蓉.微机原理汇编语言及接口技术.西安:
西安交通大学出版社,2006
源文件代码:
DATASEGMENT
BUFFDB0DH,0AH,'$'
IN_MSG1DB'PLEASEENTERANUMBER:
',0DH,0AH,'$'
IN_MSG2DB'PLEASEENTERANOTHERNUMBER:
',0DH,0AH,'$'
OUT_MSGDB'THECOMMONNUMBER(S)IS(ARE):
',0DH,0AH,'$'
PFDB'PINGFANGCHA:
',0DH,0AH,'$'
LOADDB'PRESSANYKEYTOCONTINUE$'
xdw0
ydw0
zdw0
cdb0h
sdb6dup(0h),'$'
ctrldb0dh,0ah,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,OFFSETIN_MSG1;提示输入第一个数据
CALLDISPMSG
CALLREADSID;输入第一个数据
MOVBX,AX
MOVx,BX
MOVAX,OFFSETIN_MSG2;提示输入第二个数据
CALLDISPMSG
CALLREADSID;输入第二个数据
MOVCX,AX;保存到CX
MOVy,CX
CALLAGAIN
MOVAX,OFFSETOUT_MSG
CALLDISPMSG
MOVAX,CX
CALLDISPSID
AGAINPROC
CMPBX,CX
JNLFRONT
XCHGBX,CX
FRONT:
XORDX,DX
MOVAX,BX
DIVCX
CMPDX,0
JZEQUAL
MOVBX,CX
MOVCX,DX
JMPFRONT
EQUAL:
RET
AGAINENDP
DISPMSGPROC
MOVDX,AX
MOVAH,9
INT21H
RET
DISPMSGENDP
READSIDPROC
MOVAH,1
INT21H
MOVDH,AL
SUBDH,30H
MOVAH,1
INT21H
CMPAL,0DH
JZDONE1
SUBAL,30H
SHLDH,1
MOVDL,DH
SHLDH,1
SHLDH,1
ADDDH,DL
ADDDH,AL
DONE1:
MOVCL,DH
MOVDX,OFFSETBUFF
MOVAH,9
INT21H
MOVAL,CL
XORAH,AH
RET
READSIDENDP
DISPSID:
MOVBL,AL
MOVBH,1
L1:
MOVAL,BL
XORAH,AH
DIVBH
CMPAH,0
JNZNEXT
MOVAL,BH
AAM
MOVCX,AX
ADDCH,30H
MOVDL,CH
MOVAH,2
INT21H
ADDCL,30H
MOVDL,CL
MOVAH,2
INT21H
MOVDX,OFFSETBUFF
MOVAH,9
INT21H
NEXT:
INCBH
CMPBL,BH
JLDONE
JMPL1
DONE:
MOVAX,OFFSETPF;
CALLDISPMSG
callpfc
pfcproc
work:
moval,byteptrx
mulal
movz,ax
moval,byteptry
mulal
cmpz,ax
jbint1
subz,ax
jmpint2
int1:
subax,z
movz,ax
movc,'-'
int2:
movcx,5h
movdi,4h
movbx,0ah
movax,z
work2:
movdx,0
divbx
adddl,30h
movs[di],dl
decdi
cmpax,0h
jzw2exit
loopwork2
w2exit:
moval,c
movs[di],al
movdx,offsetctrl
movah,09h
int21h
movdi,0
work3:
incdi
cmps[di],0h
jzwork3
leadx,s[di]
movah,09h
int21h
movah,4ch
int21h
ret
pfcendp
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
前面提到的代码不完整,因为格式原因运行会出错,调试的时候请用本页的代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 公约数 和平 方差
![提示](https://static.bdocx.com/images/bang_tan.gif)