2016-06-01 20 views
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

Antwort

2

Sie haben eine IsPrime ENDP Zeile aber keine entsprechende IsPrime PROC.

Deshalb beschweren sich über die Verschachtelung.

Sie müssen herausfinden, wo die PROC Linie (wahrscheinlich unmittelbar vor mov ebx, 2 ; sets minimum divisor) und gehen sollte ... na ja, hat es dort :-)

+0

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

+0

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

+1

Oki Doki !! Aber du hast mir wirklich geholfen! Vielen Dank! – BioMan