Hi,
ich versuche gerade mir (Inline) Assembler bei zu bringen und hab nun ein Problem bei der Verwendung des 'div' Operators. Mein kleines Programm soll einfach testen ob eine Zahl Prim ist oder nicht.
Am besten erstmal ein bissel Source. Ich hab ihn soweit ich es selbst verstehe Kommentiert
Delphi-Quellcode:
procedure Test4Prim( Value: Integer);
var Primat: Integer;
begin
asm
mov eax, Value
// Value => eax
mov ecx, 2
// Teiler => ecx
mov edx, 1
// edx initielisieren, damit edx <> 0
@Loop:
cmp eax, ecx
// Teiler und Zahl vergleichen
je @Prim
// if eax = ecx then Prim
push eax
// eax Sichern
div ecx
// eax durch ecx teilen (??) hier bricht er ab..
inc ecx
// Inc( Teiler bzw ecx, 1)
cmp edx, 0
pop eax
// eax wiederherstellen, da durch Division überschrieben
jnz @Loop
// if RestDerDivision (edx) <> 0 then goto Loop ( ZeroFlag nicht gesetzt)
jz @NotPrim
// if RestDerDivision (edx) = 0 then goto NotPrim ( es ist keine Primzahl)
@Prim:
mov Primat, 1
// Primat auf 1 setzen, wird für die Ausgabe abgefragt
jmp @Exit
// gehe sofort nach Exit
@NotPrim:
mov Primat, 0
// Primat auf 0 setzen, wird für die Ausgabe benötigt
@Exit:
nop
// Tu garnix IMHO die beste Anweisung, sollte es auch im Berufsleben geben :)
end;
if Primat = 1
then Writeln('
Das war eine Primzahl')
else Writeln('
Das war keine Primzahl');
end;
an der Stelle
div ecx // eax durch ecx teilen (??)
bricht das Programm einfach ab.. der Debuger meldet nix..
Kann mir jemand sagen was ich anders machen muss? Kann man womöglich nicht durch das ECX Register teilen?
Vielen Dank schonmal für eure Hilfe
MfG
anku