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