计算机原理与汇编语言课程设计报告Word文档下载推荐.docx
- 文档编号:686557
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:27
- 大小:261.35KB
计算机原理与汇编语言课程设计报告Word文档下载推荐.docx
《计算机原理与汇编语言课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机原理与汇编语言课程设计报告Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。
if(n%i==0)returnfalse;
returntrue;
}
数据要以十进制输出,ASCII码要加上48
dispsushuprocnear
leasi,sushu
movcx,count;
控制输出
L5:
movbx,[si]
calldisp10
movdl,20h
movah,2
int21h
addsi,2
loopL5
ret
dispsushuendp
disp10procnear;
该子程序的作用是将BX中的数以十进制形式输出
pushcx
movcx,100d;
转化百位
movax,bx
movdx,0
divcx
movbx,dx
movdl,al
adddl,30h;
加48,变成字符型
movah,2
int21h
movcx,10d;
转化十位
adddl,30h
movdl,bl
转化个位
popcx
ret
disp10endp
编写过程中遇到了一些问题
这个错误系因为将count变量设为db型,而后面的数据存储时,用的是字节dw型
这个错误找了好久,后来发现是个位输出程序有误,忘记了将余数赋给dl
更正错误后,输出如下:
DATASSEGMENT
;
此处输入数据段代码
countdw0;
计数器
sushudw1000dup(?
);
存放素数
informationdb'
Thesushubetween1and1000are:
'
'
$'
;
显示素数的提示信息
DATASENDS
STACKSSEGMENT
此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
此处输入代码段代码
leadx,information;
显示提示信息
movah,9
int21h
movah,2
movdl,0dh
movdl,0ah
calljisuan
calldispsushu
MOVAH,4CH
INT21H
jisuanprocnear
leadi,sushu
movax,2
L1:
cmpax,1000
jaexit;
大于1000跳出子循环
movbx,2
L2:
cmpbx,ax
jaeL3;
小于ax的数都不能被ax整除,是素数
pushax
movdx,0
divbx
cmpdx,0;
判断是否能整除
popax
jzL4;
能整除,就ax加1,判断下一个数是否是素数
incbx;
不能整除就bx加1,继续判断
jmpL2
L3:
inccount
mov[di],ax;
保存ax
adddi,2;
存储单元指针指向下一个
L4:
incax
jmpL1
exit:
jisuanendp
movcx,count
CODESENDS
ENDSTART
二.实验二
Fibonacci数的定义如下:
FIB
(1)=1
FIB
(2)=1
FIB(N)=FIB(N-2)+FIB(N-1)N>
=3
变量及数组需求:
两个变量x1,x2,用于代替FIB(N-2),FIB(N-1),并初始化为1
一个数组FN,用来存储Fibonacci数
Ax>
50?
Ax=x1+x2
Yes
n
输出Fibonacci数
X1=x2
X2=AX
结束
算法描述:
functionfibonacci(n){
if(n==1|n==2){
return1;
else{
returnfibonacci(n-1)+fibonacci(n-2);
主要程序:
利用堆栈,实现x1,x2的互换,不断累加,求下一个Fibonacci数
PUSHX1
PUSHX2
S:
MOVAX,X1
ADDAX,X2
MOVFN[BX],AX;
ax中的数存在了数组FN[]中
PUSHX2;
上一个x2变成下一个x1
POPX1
MOVX2,AX;
上一个ax变成下一个x2
ADDBX,2
cmpAX,50
jlS
POPX2;
原始的x2=1
POPX1;
原始的x1=1
求出Fibonacci数后,以十进制数输出
DISP:
MOVAX,[SI]
MOVDX,0
MOVBX,10
DIVBX
PUSHDX
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPDX
ADDDL,30H
MOVAH,2
RET
错误原因:
没有将数字转化为字符输出
DATASEGMENT
X1DW1
X2DW1
FNDW25DUP(?
)
BUFDB0DH,0AH,'
Thefibonaccibelow50are:
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
MOVAX,DATA
MOVDS,AX
LEADX,BUF;
输出提示信息
MOVAH,9
MOVAH,02H
MOVDX,0DH
INT21H
MOVDX,0AH
MOVBX,0
LEASI,X1
MOVCX,BX;
通过BX来控制输出,即保证输出的数在50以内
S1:
CALLDISP;
显示一个其中的数
ADDSI,2
MOVAH,02H;
输出后面的DL中的内容(即空格)
MOVDL,20H;
显示三个空格
MOVDL,20H
subCX,1
LOOPS1;
循环(再一次读DISP,ADDSI2)
MOVAX,4C00H;
结束标志
CODEENDS
ENDSTART
三.实验三
从键盘输入年份,通过计算后,输出该年份是否为闰年的信息
变量需求:
需要一段缓存空间buf来保存从该键盘键入的字符
需要一个变量year来保存转化为数字后的年份
需要一个判断是否是闰年的标志flag
键入年份存入buf
将buf里的字符转换为数字
判断year是否是闰年
Y输出:
不是闰年
输出:
是闰年
N
C语言算法描述:
voidmain()
intyear,leap;
scanf("
%d"
&
year);
if((year%4==0&
&
year%100!
=0)||(year%400==0))
leap=1;
else
leap=0;
if(leap)
printf("
%disaleap!
\n"
else
%disnotaleap!
主要程序段:
char_to_numprocnear;
把表示年份的字符串转换为数值
pushcx
deccx
leadi,buf+2
l1:
incdi;
使di指向最后一个字符
loopl1
popcx
movax,1
l2:
pushax
movdh,30h
movbx,10
movdl,[di];
字符减去30H后即可转换为十六进制数
subdl,dh
movdh,0
muldx
addyear,ax
popax
mulbx
decdi;
di依次向前一个字符移动
loopl2
ret
char_to_numendp
ifyearsprocnear;
判断是否是闰年
movax,year
movdx,0
movbx,100
divbx
cmpdx,0
jenext
movdx,0
movax,year
movbx,4
cmpdx,0
jeflag2
jmpflag1
next:
movdx,0
movax,year
movbx,400
divbx
cmpdx,0
jeflag2
flag1:
movflag,0
ret
flag2:
movflag,1
ret
ifyearsendp
datasegment
informationdb0dh,0ah,'
Pleaseinputayear:
$'
yesdb0dh,0ah,'
Thisisaleapyear!
nodb0dh,0ah,'
Thisisnotaleapyear!
yeardw0;
用于保存输入的年份的数值
bufdb8
db?
db8dup(?
)
flagdb0;
判断标志
dataends
stacksegmentstack
db200dup(0)
stackends
codesegment
assumeds:
data,ss:
stack,cs:
code
start:
movax,data
movds,ax
leadx,information;
在屏幕上显示提示信息
movah,9;
显示字符串
int21h
leadx,buf;
从键盘输入年份字符串
movah,0Ah;
0AH功能调用从键盘接受字符串到内存的输入缓存区
movch,0;
ch要清0,否则循环次数有误.
movcl,buf+1;
把输入的字符的个数保存在cl中
callchar_to_num;
调用char_to_num子程序
callifyears;
调用ifyears子程序
cmpflag,0
jnel3
leadx,no
movah,9
jmpexit
L3:
leadx,yes
exit:
MOVAH,4CH
INT21H
char_to_numprocnear;
ifyearsprocnear
ret
codeends
endstart
四.实验四
需要一个数组来存放反序的数
将整数反序并输出
Str1
5
4
3
2
1
Str2
MOVCX,len
AGAIN:
依次将str1中的数字按相反的顺序放在str2中
MOVAl,[DI]
MOV[SI],Al
decSI
incDI
LOOPAGAIN
缺少字符串终止符$
原整数为:
12345
运行程序后,结果如下:
此处输入数据段代码
str1db'
12345'
lenequ5
str2dblen+1dup('
STACKSSEGME
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 原理 汇编语言 课程设计 报告