組合語言素數判斷程式

2021-10-25 12:13:49 字數 2139 閱讀 6320

題目:

編寫乙個程式,提示使用者輸入乙個數字,然後顯示資訊說明該數字是否是素數。素數(prime)是只能被自身和1整除的自然數。

(1)採用直接簡單的演算法:假設輸入n,將其逐個除以2~n-1,只要能整除(餘數為0)說明不是素數,只有都不能整除才是素數。

(2)採用只對奇數整除的演算法:1、2和3是素數,所有大於3的偶數不是素數,從5開始的數字只要除以從3開始的奇數,只有都不能整除才是素數。

第一問:

;素數的判斷程式

; eg0000.asm in windows console

include io32.inc

.data

msg byte 13,10,'this number is one prime',0

mmsg byte 13,10,'this number is not a prime',0;做出必要的提示說明

var dword ?

; 資料定義

.code

start:

call readuid;素數的判斷只是針對無符號數進行的,所以我們這裡面要呼叫指令來進行無符號數的輸入

cmp eax,3;首先小於等於三的數都是素數

jbe doney

cdq;該指令的作用是將edx的最高位設定到edx每一位上

mov esi,eax;將eax的值先賦給esi,因為做過出發運算之後需要我們將eax的值進行恢復

mov edi,edx;將我們的擴充套件位賦值給edi和前面的原理是一樣的都是為了除法運算之後進行資料的恢復

mov ebx,2;我們從2開始向後判斷

again:

div ebx;呼叫div指令進行除法的運算

test edx,edx;因為edx中儲存的是我們的餘數,可以使用text來檢驗最終除法運算的餘數是不是零

jz donen;如果是0的話代表有因子所以不是素數,結束迴圈

inc ebx;增加1來繼續進行判斷

cmp ebx,esi;結束迴圈的條件

mov eax,esi;數值恢復

mov edx,edi;數值恢復

jb again

doney:;下面都是一些提示資訊的顯示

mov eax,offset msg

call dispmsg

jmp done

donen:

mov eax,offset mmsg

call dispmsg

done:

exit 0

; 子程式

end start

第二問:

;素數的判斷程式

; eg0000.asm in windows console

include io32.inc

.data

msg byte 13,10,'this number is one prime',0

mmsg byte 13,10,'this number is not a prime',0;做出必要的提示說明

var dword ?

; 資料定義

.code

start:

call readuid;素數的判斷只是針對無符號數進行的,所以我們這裡面要呼叫指令來進行無符號數的輸入

cmp eax,3

jbe doney

cdq;該指令的作用是將edx的最高位設定到edx每一位上

mov esi,eax

mov edi,edx

mov ebx,3;和前乙個程式不同的地方在此處,從三開始

again:

div ebx

test edx,edx

jz donen

add ebx,2;每次加2

cmp ebx,esi

mov eax,esi

mov edx,edi

jb again

doney:

mov eax,offset msg

call dispmsg

jmp done

donen:

mov eax,offset mmsg

call dispmsg

done:

exit 0

; 子程式

end start

組合語言 判斷閏年

要求 程式設計寫乙個完整的程式,求出2012年 2099年中的所有閏年年份,並把它們存放在陣列lyear中。演算法分析 能被4整除但不能被100整除,或者能被400整除的年份是閏年。1.esi 0 閏年個數計數器 ecx 2012 年份計數器 2.while ecx 2100 ecx 3.lcoun...

素數檢測(組合語言編寫)

兩種方法 方法一 include io32.inc data ts byte please input a number 13,10,0 sc1 byte this is a sushu 13,10,0 sc2 byte this is not a sushu 13,10,0 temp byte 2...

組合語言程式格式

組合語言源程式中的每個語句可以由四項組成,格式如下 name operation operand comment 其中 名字項 name 是指乙個標號或變數。操作項 operation 是乙個操作碼的助記符,它可以是指令 偽指令或巨集指令名。運算元項 operand 由乙個或多個表示式組成,它提供為...