Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#6

Re: [ASM] Dividieren von Ganzzahlen

  Alt 3. Okt 2006, 19:36
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 test : Integer;
begin
 test := 20;
 asm
   MOV EAX,test // <- lese test ein
   MOV BH, 5 // <- teile BH 5 zu
   IDIV BH // <- dividiere durch 5
   MOV test, EAX //<- schriebe Wert zurück in test
 end;
 ShowMessage(IntToStr(test));
end;
Das Problem ist, daß Du durch BH dividierst.
Dann wird AX (die unteren 2 Bytes von EAX) durch BH geteilt. Der Quotient kommt in AL, der Modulo in AH.

Benutze als Divisor ECX (EBX sollte nie verändert werden) als Divisor.
Dann kommt der Quotient in EAX, der Modulo in EDX
Also
Delphi-Quellcode:
mov eax,test
cdq
mov ecx,5
idiv ecx
mov test,eax
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat