我是新來的彙編語言。我編寫了一個程序,用於接受輸入,然後顯示數字是否爲素數。素數中的邏輯錯誤
這是我的源代碼。
.intel_syntax noprefix
.include "console.i"
.data
Num: .long 0
.text
ask: .asciz "Enter a +ve number : "
ansp: .asciz " is prime."
ans: .asciz " is not prime."
_entry:
Prompt ask
GetInt Num
mov eax,Num # store Number in eax
#mov ecx,0 # Reset ecx to 0
mov ecx,0 # Reset ecx t0 2 for dividing.
cdq
1: inc ecx # increment ecx
mov ebx,eax #backup eax
Div ecx #Divide eax by ecx
cmp edx,0 #if remainder is zero num is not prime
je 2f
mov edx,0 #reset edx to 0
mov eax,ebx #reset eax to Num
cmp eax,ecx if ecx is less than number.
jl 1b
#Prime
PutInt Num
Prompt ansp
jmp 3f
2: #Not Prime
PutInt Num
Prompt ans
3: PutEol
ret
.global _entry
.end
當我運行程序時,它總是顯示它不是素數。
例如,如果我輸入7,它顯示7不是素數。
我正在使用Intel x86架構,並在Ubuntu上進行devloping。
編輯1:根據Darron,我initalized ECX寄存器爲1,然後ECX遞增1,使其開始從2
環路但問題是,當我進入9它顯示我9是素數。我不知道我的邏輯有什麼問題。
編輯2:我將我的號碼存儲在eax中,然後我用ecx除它,然後最後檢查edx寄存器中的reaminder是否爲零。
謝謝。
這個'mov ebx,eax'在你的'Div ecx'之前有什麼意義? – NullUserException 2010-08-18 11:59:37
如果您需要任何calarification,請告訴我。 – Searock 2010-08-18 13:14:59
是不是你的第一師除1? – abc 2010-08-18 13:18:36