1
INCLUDE Irvine32.inc
.code
main PROC
.REPEAT
mov edx, OFFSET fPrompt ;display a prompt
call WriteString
call ReadInt ;recordes users number
mov var1, eax ;gives var1 the users number
.IF var1 == -1 ;jumps to L3 if the user want's to quit
jmp L3
.ENDIF
call IsPrime ;calls the IsPrime procedure
L3:
.UNTIL var1 == -1 ;jumps up to repeat if var1 != -1
ret
main ENDP
mov ebx, 2 ; sets minimum divisor
mov eax, var1 ; set dividend
cdq ; converts to 64-bit edx:eax
mov ecx, ebx ; stores divisor in ecx
div ecx ; Proformes division
mov b, eax ; Gets remainder, b is half var2
.WHILE ebx != b ;loops until ebx has reached var1/2
mov eax, var1 ; set dividend
cdq ; converts to 64-bit edx:eax
mov ecx, ebx ; stores divisor in ecx
div ecx ; Proformes division
mov a, edx ; Gets remainder
.IF a == 0 ;if there was no remainder, then var1 is not prime
jmp L1 ;jumps out of the loop if above is correct
.ENDIF
inc ebx ;increments until ebx reaches b
.ENDW
mov edx, OFFSET pPrompt ;tells the user their number was prime
call WriteString
jmp L2
L1:
mov edx, OFFSET cPrompt ;tells the user their number was not prime
call WriteString
L2: ret
IsPrime ENDP
END main
誰でもエラーメッセージの取得に役立つことができますか? ch03 AddSub.asm(45):致命的なエラーA1010:不一致ブロックのネスト:IsPrime
ありがとう:-)そこにそれを置くべき場所をうまくする必要があります!うわー、私はそれを見ることができませんでした!これで、fPrompt、var1、b、a、pPrompt、cPromptの未定義のシンボルエラーを修正しました。私がコードセグメントの下でそれを定義しなかったからでしょうか? – BioMan
私はおそらく、コードが読み取り専用になる傾向があるので、おそらくデータセグメントの下に置かれる傾向があります(x86 ASMを実行してからしばらくしていますが)。しかし、はい、彼らはどこかで定義されるべきです!*もしあなたがそれを行い、それでも問題があれば、あなたは私よりも露出が大きくなるので、新しい*質問をする方が良いでしょう。 – paxdiablo
沖電気!!しかし、あなたは本当に私を助けました!ありがとう! – BioMan