Oud 11-10-2006, 11:27
Verwijderd
Hoe deel je 2 (32-bit) Integers m.b.v. assembly in Delphi?

Het getal wat gedeeld moet worden zit in EDX:EAX. Het getal waardoor gedeeld wordt is 32-bits. En het antwoord (zonder rest) komt in AX. De rest komt in DX te staan.

Code:
function TForm1.AsmDivI(p1: Integer; p2: Integer): Integer;
var v: Integer;
begin
   asm
      mov EDX, &p1
      mov EAX, 0
      mov EBX, &p2
      idiv EBX
      mov &v, AX
   end;
   AsmDivI := v;
end;
Ik heb zoiets als bovenstaande maar dat werkt niet. Maak ik van "v" een Word dan doet ie het wel natuurlijk, maar dan geeft ie een Integer overflow.

Dus, hoe verdeel ik de 32-bits Integer over de EDX:EAX. En ik geef nu alleen het antwoord terug, maar ik moet ook de rest teruggeven. Hoe doe ik dat? Kan ik AX en DX op een bepaalde manier in "v" zetten? En hoe doe ik dat dan?
Met citaat reageren
Advertentie
Oud 11-10-2006, 13:47
ILUsion
Avatar van ILUsion
ILUsion is offline
Kan je dit niet evengoed in Object Pascal zelf doen met behulp van de div- en mod-operatoren? Je zal die beide registers wel kunnen uitlezen me wat assembler.
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 11-10-2006, 15:58
Verwijderd
Citaat:
ILUsion schreef op 11-10-2006 @ 14:47 :
Kan je dit niet evengoed in Object Pascal zelf doen met behulp van de div- en mod-operatoren? Je zal die beide registers wel kunnen uitlezen me wat assembler.
Jawel, maar de bedoeling is om het in assembly in Delphi te doen. Met Byte's lukt het wel. Maar met Integer's niet. Ik heb al wat rond zitten surfen op internet, maar heb niets gevonden.
Met citaat reageren
Oud 11-10-2006, 16:53
Verwijderd
Citaat:
IDIV - Signed Integer Division

Usage: IDIV src
Modifies flags: (AF,CF,OF,PF,SF,ZF undefined)

Signed binary division of accumulator by source.
If source is a byte value, AX is divided by "src" and the quotient is stored in AL and the remainder in AH.
If source is a word value, DX:AX is divided by "src", and the quotient is stored in AL and the remainder in DX.
http://mvmpc9.ciw.uni-karlsruhe.de/p...HELPPC/ASM.TXT
Met citaat reageren
Oud 11-10-2006, 18:16
Verwijderd
IDIV src

src is geen word maar een dword (32-bits Integer), dacht ik.
src is geen word maar een dubbele dword (32-bits Integer).

Ik heb mijn info over IDIV van:
ftp://download.intel.com/design/pent...als/253666.htm

Maar ik moet in Delphi een Integer verdelen in 2 words. Ik vroeg me af hoe ik dat zou moeten doen in assembly in Delphi.

Maar ik denk dat ik iets met PTR ga proberen.

Maar als iemand een methode kent die gebruikelijk is, als PTR methode niet gebruikelijk is.

Laatst gewijzigd op 11-10-2006 om 21:47.
Met citaat reageren
Oud 11-10-2006, 20:49
Verwijderd
Citaat:
12Trix schreef op 11-10-2006 @ 19:16 :
IDIV src

src is geen word maar een dword (32-bits Integer), dacht ik.

Ik heb mijn info over IDIV van:
ftp://download.intel.com/design/pent...als/253666.htm

Maar ik moet in Delphi een Integer verdelen in 2 words. Ik vroeg me af hoe ik dat zou moeten doen in assembly in Delphi.

Maar ik denk dat ik iets met PTR ga proberen.

Maar als iemand een methode kent die gebruikelijk is, als PTR methode niet gebruikelijk is.
Wellicht dat Delphi geen goede mapping kan maken van integer naar word? Probeer het anders eerst eens zonder parameters en variabelen:

Code:
mov AX, 11
idiv 2
;AL -> 0101b (5)
;AH -> 0001b (1)
Pagina's 493 t/m 496 van de PDF.
Met citaat reageren
Oud 11-10-2006, 21:39
Verwijderd
Citaat:
eddie schreef op 11-10-2006 @ 21:49 :
Wellicht dat Delphi geen goede mapping kan maken van integer naar word? Probeer het anders eerst eens zonder parameters en variabelen:

Code:
mov AX, 11
idiv 2
;AL -> 0101b (5)
;AH -> 0001b (1)
Pagina's 493 t/m 496 van de PDF.
AX is 16-bits. Ik moet in EAX en EDX de high en low 16-bits stukjes van de 32-bits Integer zetten.

Ik sprak geloof ik over 1 dword:
Citaat:
src is geen word maar een dword (32-bits Integer), dacht ik.
Maar ik bedoelde 2 dword's, want een dword is twee bytes, dus 16-bits. En er gaan natuurlijk 2 * 16 bits in een 32 bits Integer. Mijn fout.

Ik moet dus zelf de mapping maken van Integer's naar DWord's voor Delphi. Ik zal die mapping nog proberen d.m.v. iets als:
Code:
mov EAX, WORD PTR [&v]
mov EDX, WORD PTR [&v + 2]
Voor Byte is het wel gelukt omdat ik de Byte niet in twee registers hoefde op te splitsen.

Ik zou het eerst inderdaad eens zonder parameters kunnen proberen.

Laatst gewijzigd op 11-10-2006 om 21:46.
Met citaat reageren
Oud 11-10-2006, 21:57
Verwijderd
Mijn God, ben ik trouwens even blij dat ik binnenkort wat geheugen erbij krijg.

Zaken als NetBeans en Eclipse vergallen mijn leven op dit moment. Delphi gaat nog wel.
Met citaat reageren
Advertentie
Reageren

Topictools Zoek in deze topic
Zoek in deze topic:

Geavanceerd zoeken

Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 12:06.