Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Div in Asm
Karlson - Do 08.02.07 05:00
Titel: Div in Asm
Moin,
Ich versuche momentan den Div-Befehl in ASM zu verstehen, aber irgendwie klappt da wat nicht.
Ich machs mal ganz einfach:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function test:integer; var x,y :integer; begin x:=10; y:=2; asm mov eax,x mov edx,y div eax,edx mov @result, eax end; end; |
Eigentlich müsste das Ergebniss der Funktion doch 5 sein, ich erhalte aber -11.
Bei x=5 und y=2 erhalte ich -6, und das register edx bleibt auf 2. Irgendwie kann ich auch keinen Zusammenhang feststellen.
Wo wird der Rest einer Division abgelegt?
Wie benutzt man den div-Befehl richtig?
danke und gruss!
rizla - Do 08.02.07 15:15
DIV INSTRUCTION
Purpose: Division without sign.
Syntax:
DIV source
The divider can be a byte or a word and it is the operator which is given the instruction.
If the divider is 8 bits, the 16 bits AX register is taken as dividend and if the divider is 16 bits the even DX:AX register will be taken as dividend, taking the DX high word and AX as the low.
If the divider was a byte then the quotient will be stored on the AL register and the residue on AH, if it was a word then the quotient is stored on AX and the residue on DX.
BenBE - Do 08.02.07 19:08
Nix für ungut
rizla, aber ne Kopie eines englischen ASM-Handbuches hilft selten ...
Das Problem bei deinem Source ist, dass Du missachtest, dass DIV mehrere Register zusammenzieht, um das Ergebnis aufzubereiten.
Versuch das mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function IntDivTest(A: Integer; B: Integer): Integer; asm XOR ECX, ECX XCHG EDX, ECX DIV ECX
end; |
@rizla: Wenn Du schon Handbücher zitierst, dann wenigstens die korrekten Stellen. Das Zitieren eines x86-Handbuchs für 16-Bit-Umgebungen bringt einem unter einer 32-Bit-Umgebung nicht viel (auch wenn die Technik die gleiche ist).
Karlson - Do 08.02.07 22:13
Wunderbar.
Jetzt funktioniert es, vielen Dank Ben.
Ich dachte zunächst DIV würde ähnlich funktionieren wie ADD oder SUB.
Kennt einer von euch zufällig ein (etwas ausführlichere) Befehsauflistung? Es reicht ja ein Satz pro Befehl oder ein Stück Beispielcode.
BenBE - Do 08.02.07 22:31
Vom mitp-Verlag gibt's die Ge-Packt-Reihe ... u.a. auch für Assembler. Dort stehen alle Befehle incl. SIMD drin. Kostet knapp 15 Euro, lohnt sich aber ... Da sind auch die Besonderheiten einiger Befehle mit erklärt.
rizla - Fr 09.02.07 14:28
@BenBe: hast ja recht, aber sollte auch nur die prinzipielle funktionsweise von div erklären. ein [e] vor die register und gut ist, insofern man mit [e]axbxcxdx arbeiten will..
:r:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!