PrimCheck
-
Ich glaub ich hab grad en knick in der logik oO
naja mein code:include 'INCLUDE/win32ax.inc' .code start: invoke AllocConsole invoke GetStdHandle,STD_OUTPUT_HANDLE mov [std_output],eax invoke GetStdHandle,STD_INPUT_HANDLE mov [std_input],eax ;Wandel in Zahl um mov ebp, temp_input mov dh, [ebp] sub eax, 48 mov edx, 10000 mul edx add [Zahl], eax mov dh, [ebp+1] sub eax, 48 mov edx, 1000 mul edx add [Zahl], eax mov dh, [ebp+2] sub eax, 48 mov edx, 100 mul edx add [Zahl], eax mov dh, [ebp+3] sub eax, 48 mov edx, 10 mul edx add [Zahl], eax mov dh, [ebp+4] sub eax, 48 add [Zahl], eax ;fertig die Zahl ist in der vari Zahl mov ebx, 2 mov edx, 0 mov eax, [Zahl] cmp eax,ebx je PrimZahl NEXT: mov edx, 0 mov ebx, 2 mov eax, [Zahl] cmp eax,ebx je PrimZahl div ebx cmp edx,0 je Keine_PrimZahl mov eax, [Zahl] add ebx, 1 jmp NEXT PrimZahl: invoke WriteFile,[std_output],"Es ist eine Primzahl!",22,NULL,NULL jmp EXIT Keine_PrimZahl: invoke WriteFile,[std_output],"Es ist keine Primzahl!",23,NULL,NULL EXIT: invoke Sleep,10000 invoke FreeConsole invoke ExitProcess,0 .end start ;strings ;varis std_output dd 0 std_input dd 0 temp_input db '00007' Zahl dd 0
Der soll folgendes machen:
ich trag in temp_input eine Zahl ein in form eines Strings dieser string soll in eine Zahl umgewandelt werden und in Zahl gespeichert werden. Jetzt soll geprüft werden ob die Zahl ne Primzahl ist.
Leider wird mir immer ausgegeben das es keine Primzahl ist auch bei Primzahlen
Hoffe es kann mir jemand helfen ich brauch das prog morgen für mein referat!
/edit Assembler ist der FASMmfg tobZel
-
sieht auf den ersten Blick wie eine Endlosschleife aus, durch
mov ebx,2
fängst du ja immer wieder von vorn an; das hat nach dem Label NEXT nichts verloren
-
thx für die antwort
ich hab das jetzt entfernt.
ich bekomme aber immer noch die ausgabe das es keine Primzahl ist
obwohl '00007' doch in 7 umgewandelt werden sollte und 7 eine Primzahl ist/edit ich hab jetzt nochmal geguckt also er kann jetzt prüfen ob das eine Primzahl ist aber er wandelt den string nicht richtig in eine Zahl um
Hat jemand ne idee für ne andere "atoi" funktion?mfg tobZel
-
Du solltest vielleicht den echten Input verarbeiten. statt
mov dh, [ebp]
soll es wohl besser
movzx eax, byte ptr[ebp]
heißen. Die korrekte Syntax für Angabe der Operandengröße für deinen Assembler musst du selbst finden. Im Übrigen ist für die Multiplikationen die Zwei- oder Dreioperandenform von imul sinnvoll.
-
thx für die antworten ich habs jetzt über loadsb gelöst!
mfg tobZel
-
Ist dir wahrscheinlich auch selbst schon klar, aber deine atio-Funktion ist doch ein wenig... unflexibel.
Folgenden Code verwende ich in meinem tollen IT-Player (ja, es gibt bald endlich mal wieder eine neue Version *Werbetrommel ruehr* :D) :xor eax,eax mov ebx, 0Ah @@DecLoop: movzx edx, [byte ptr edi] sub edx, 30h js short @@ExitProc cmp edx, 09h ja short @@ExitProc inc edi add eax, edx dec ecx jz short @@ExitDecLoop mul ebx jmp short @@DecLoop @@ExitDecLoop: mov [word ptr Frequency], ax @@ExitProc: ret
Nur falls Interesse an einer Alternativimplementierung besteht...
Die Adresse des Strings steht in edi, die Laenge in ecx.
-
Nur so zum Spaß, wir könne das noch ein bisschen kürzen:
xor eax, eax add edi, ecx neg ecx jmp short @@LoopEntry @@IncLoop: inc ecx lea eax, [4*eax+eax] lea eax, [2*eax+edx] @@LoopEntry: jz short @@ExitLoop movzx edx, [byte ptr edi+ecx] sub edx, 30h cmp edx, 10 jb short @@IncLoop @@ExitLoop:
hm, dachte eigentlich, da geht noch mehr...
-
*lol* Nicht schlecht.
Naja, ich hab' noch genug Code zum Optimieren, wenn mir mal langweilig wird, aber den Vorschlag speicher ich mir auf jeden auch mal ab.
-
Ich weis das man sie flexibler machen kann ist aber so:
Das ist ein Referat, ich bin in der 8. Klasse oO, meine Mitschüler und Lehrer haben kp.
Die würden sowas nicht verstehen oO.
Ich hab ihm gesagt das ich eh davon abraten würde asm zu presentieren ( ist en Referat über Programmiersprachen ) aber er wollte es unbedingt. Naja wird lustig werden :).mfg tobZel
-
Nobuo T schrieb:
*lol* Nicht schlecht.
Naja, ich hab' noch genug Code zum Optimieren, wenn mir mal langweilig wird, aber den Vorschlag speicher ich mir auf jeden auch mal ab.Wenn du ein paar interessante Schnipsel posten könntest. Ist hin und wieder ein gute Fingerübung zum entspannen