计算机原理与汇编语言课程设计报告Word格式文档下载.docx

上传人:b****9 文档编号:13056340 上传时间:2022-10-04 格式:DOCX 页数:27 大小:261.35KB
下载 相关 举报
计算机原理与汇编语言课程设计报告Word格式文档下载.docx_第1页
第1页 / 共27页
计算机原理与汇编语言课程设计报告Word格式文档下载.docx_第2页
第2页 / 共27页
计算机原理与汇编语言课程设计报告Word格式文档下载.docx_第3页
第3页 / 共27页
计算机原理与汇编语言课程设计报告Word格式文档下载.docx_第4页
第4页 / 共27页
计算机原理与汇编语言课程设计报告Word格式文档下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

计算机原理与汇编语言课程设计报告Word格式文档下载.docx

《计算机原理与汇编语言课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机原理与汇编语言课程设计报告Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。

计算机原理与汇编语言课程设计报告Word格式文档下载.docx

变量以及数组需求:

需要一个变量count来计数,以便于素数的输出;

需要一个数组sushu来存放计算过程中得到的素数

寄存器需求:

在汇编里面,除法运算只能是16位除以8位或者32位除以16位,1000比255大,因此要用32位除以16,要用dx,ax来存放除数,bx存放被除数

程序开始

将求得素数以十进制输出

计算素数并储存

程序结束

求素数的算法

素数的约数只有1和本身

boolisPrime(intn)

{

if(n<

2)returnfalse;

for(inti=2;

i<

n;

++i)

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;

循环(再一次读DIS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1