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
jemand mit den Fehlern msg im immer helfen? CH03 AddSub.asm (45): schwerwiegender Fehler A1010: nicht angepasste Block Verschachtelung: IsPrime
Thank you! Wow, wie konnte ich das nicht sehen! Jetzt, da das behoben ist, gibt es mir nur einen undefinierten Symbolfehler für fPrompt, var1, b, a, pPrompt und cPrompt. Wäre das, weil ich es nicht unter dem Code-Segment definiert habe? – BioMan
Ich würde wahrscheinlich eher geneigt sein, es irgendwo unter einem Datensegment zu haben, da Code eher schreibgeschützt ist (obwohl es eine Weile her ist, dass ich x86 asm gemacht habe). Aber ja, sie sollten * irgendwo definiert werden! * Wenn du das tust und immer noch Schwierigkeiten hast, solltest du besser eine * neue * Frage stellen, da du mehr Aufmerksamkeit bekommst als nur ich. – paxdiablo
Oki Doki !! Aber du hast mir wirklich geholfen! Vielen Dank! – BioMan