Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Aus Integer-Wert bestimmte Stelle extrahieren

  Alt 6. Jul 2007, 16:20
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.
  Mit Zitat antworten Zitat