最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

匯編語言實現(xiàn)n以內(nèi)所有素數(shù)之和

2023-03-21 01:33 作者:甜甜圈烤火  | 我要投稿

這里以求100以內(nèi)素數(shù)和為例,你想求多少以內(nèi)的,將代碼里相應(yīng)數(shù)字改一下就好

思路:把100以內(nèi)所有的質(zhì)數(shù),都保存在一個數(shù)組中。x是不是質(zhì)數(shù) 拿 < x的所有素數(shù)去整除x,即可。其他求素數(shù)方法比如窮舉,開根號之類的效率還是不夠高,打表法是最好的

過程部分:分為1個總過程和3個子過程,3個子過程分別為Is_Multi(求a是否為b的倍數(shù))、Is_Prime(求a是否為質(zhì)數(shù))、sum_prime(找出所有質(zhì)數(shù),存入表,并相加)、總過程即調(diào)用sum_prime

代碼部分:

stack_size EQU 0x200 ;定義宏

prime_size EQU 0x400

AREA mystack, NOINIT, READWRITE ;定義自己的棧,不用初始化,可讀寫

stack_start

SPACE stack_size

stack_end

?

AREA myprime,DATA,READWRITE ;定義數(shù)據(jù)段,用于存質(zhì)數(shù),可讀寫

prime_start

SPACE prime_size

prime_end

?

AREA RESET, DATA, READONLY ?;定義中斷向量表

vectors

DCD ?stack_end ?;stack-top

DCD ?text_code ;begin code

vectors_end ?

AREA mycode, CODE, READONLY,ALIGN=3 ?;定義代碼段

text_code PROC

BL sum_prime

B .

ENDP


Is_Multi PROC

PUSH{R2-R12,LR}

MOV R4,R0

MOV R3,R1

MOV R0,#0

_loop

CMP R4,R1

BLT _loop_end ;a<b

MOVEQ R0,#1 ?;a==b

BEQ _loop_end

ADD R1,R3 ?

B _loop

_loop_end

POP {R2-R12,PC}

ENDP

?

Is_Prime PROC

PUSH {R2-R6,LR}

MOV R5,R0

MOV R2,R1 ?;將當前表的地址存到R2

LDR R3,=prime_start ?;將表的起始地址存到R3

MOV R6,#1 ?;先認定此數(shù)為質(zhì)數(shù),因此設(shè)為1

SUB R2,#4 ?;當前表地址實際是下一個質(zhì)數(shù)將要存的地址,但是現(xiàn)在要取 ? ? 目前表里面的質(zhì)數(shù),因此將地址減4

_loop_prime

CMP R3,R2 ?;比較當前表地址是否小于起始地址

BGT _loop_prime_end

LDR R4,[R2] ?;取出質(zhì)數(shù)

MOV R1,R4

MOV R0,R5

BL Is_Multi ?;比較現(xiàn)在要判斷的數(shù)是否是取出的質(zhì)數(shù)的倍數(shù),如果是,則 ? ? 這個數(shù)不是質(zhì)數(shù)

CMP R0,#0x1

MOVEQ R6,#0 ?;是倍數(shù),說明不是質(zhì)數(shù),則將R6設(shè)為0并返回

BEQ _loop_prime_end

SUB R2,#4

B _loop_prime

_loop_prime_end

MOV R0,R6

POP{R2-R6,PC}

ENDP


sum_prime PROC

PUSH{R2-R12,LR}

MOV R0,#0

MOV R1,#2

MOV R4,#3

MOV R5,#2

MOV R3,R4

MOV R7,#0

LDR R6,=prime_start

STR R1,[R6] ?;先將2存進去

ADD R6,#4 ?;指向下一個地址

_loop_sum_prime

CMP R3,#100 ?;求100以內(nèi)的質(zhì)數(shù)

BGT _loop_sum_prime_end ?;超過100則結(jié)束循環(huán)

MOV R0,R3

MOV R1,R6

BL Is_Prime ?;判斷此時R3的值是否為質(zhì)數(shù)

CMP R0,#1

STREQ R3,[R6] ?;返回值R0為1,說明是質(zhì)數(shù),將R3入表

ADDEQ R6,R6,#4 ?;指向下個地址

ADDEQ R5,R5,R3 ?;將總和加上這個質(zhì)數(shù)

ADD R3,R3,#1

B _loop_sum_prime


_loop_sum_prime_end

MOV R0,R5

POP{R2-R12,PC}

ENDP

END


但是代碼直接復制粘貼過來那個格式無法保留,實際上有些地方要空格,有些地方要頂格寫,因此以下放出截圖給大家參照一下

最終結(jié)果

最后,如果你想求n以內(nèi)的質(zhì)數(shù)之和,你得改一下代碼第2行的prime_size保證空間夠大,還有將代碼76行的CMP R3,#100 ,將100改成n即可


該文章本人原創(chuàng),轉(zhuǎn)載請標注出處


匯編語言實現(xiàn)n以內(nèi)所有素數(shù)之和的評論 (共 條)

分享到微博請遵守國家法律
唐海县| 河曲县| 东台市| 安岳县| 吉林省| 炎陵县| 台东市| 昌黎县| 东台市| 南溪县| 正蓝旗| 收藏| 博客| 阳朔县| 雅江县| 奎屯市| 左贡县| 乌拉特前旗| 大同市| 安徽省| 阳曲县| 茶陵县| 揭西县| 南开区| 襄城县| 青岛市| 都安| 昭苏县| 青河县| 徐闻县| 新竹市| 上犹县| 谷城县| 新竹县| 宜兰市| 潢川县| 墨江| 泌阳县| 于田县| 湖南省| 墨竹工卡县|