題目:
編寫乙個程式,提示使用者輸入乙個數字,然後顯示資訊說明該數字是否是素數。素數(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 由乙個或多個表示式組成,它提供為...