mit kleinen Änderungen
Delphi-Quellcode:
function getdigit(zahl,stelle:integer):integer;
{
in
zahl --> eax
stelle --> edx
out
result <-- eax
}
asm
push ebx
//ebx auf den Stack retten
xor ecx,ecx
//ecx löschen
inc ecx
//ecx auf 1 setzen
mov ebx,10
//ebx auf 10 setzen
@
while:
//nur ein Label für Sprungziele
dec edx
//edx um 1 erniedrigen
jng @endwhile
//wenn edx nicht größer als 0 nach @endwhile springen
imul ecx,10
//ecx mit 10 multiplizieren
jmp @
while //nach @while springen
@endwhile:
cdq
//convert DWord-->QWord (Division vorbereiten)
div ecx
//division von eax/ecx --> ganzzahliger Anteil in eax; Rest in edx
cdq
//dasselbe nochmal
div ebx
//division von eax/ebx (Rest steht wieder in edx)
mov eax,edx
//edx nach eax(=Result)
pop ebx
//gerettetes Register wieder herstellen
end;
Bis endwhile ist die Vorbereitung dass aus 1,2,3,4 -->1,10,100,1000 wird. Ab dem CDQ macht die funktion das, was Sirthornberry auch macht.
Es geht halt nicht ohne, dass man erst die 10er-Potenzen ausrechnet.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.