Software > Coding
ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
guest3744:
Hallo, guten Tag.
Wie wird es in GFA-Basic rausgefiltert? 16 Bit Ergebnis und 16 Bit Rest von der Division?
PS: Mein Gfa-Basic-Buch wird noch geliefert von Amazon.
Danke.
Gruss
Beim lezten Wert kommt 65386 raus, Als Word ist es -150, weil das Bit 15 gesetzt ist.
Wie bekomme ich mit dem GFA-Befehl zügig das vordere Word und das hintere Word jeweils in & rein, das es richtig ausgegeben wird?
--- Code: ---CLS
INLINE addr%,100
BLOAD "D:\INL\MULDIV.INL",addr%
DIM r%(16)
'
r%(0)=1
r%(1)=150
r%(2)=3
RCALL addr%,r%()
m%=r%(0)
'
r%(0)=2
r%(1)=450
r%(2)=3
RCALL addr%,r%()
d%=r%(0)
'
r%(0)=3
r%(1)=150
r%(2)=-3
RCALL addr%,r%()
ms%=r%(0)
'
r%(0)=(4)
r%(1)=450
r%(2)=-3
RCALL addr%,r%()
ds%=r%(0)
'
PRINT m%
PRINT d%
PRINT ms%
PRINT ds%
PAUSE 50
--- Ende Code ---
--- Code: --- asl.w #2,D0
lea tab(PC),A0
movea.l A0,A1
adda.w D0,A1
suba.l (A1),A0
jmp (A0)
rts
mul:
mulu D1,D2
move.l D2,D0
rts
div:
divu D2,D1
move.l D1,D0
rts
muls:
muls D1,D2
move.l D2,D0
rts
divs:
divs D2,D1
move.l D1,D0
rts
tab: DC.L 1
DC.L tab-mul
DC.L tab-div
DC.L tab-muls
DC.L tab-divs
END
--- Ende Code ---
laufkopf:
card(#)
card(swap(#))
guest3744:
Danke für den Hinweiss.
Aber bei "ds&=CARD(SWAP(r%(0)))" ist d& "0" .
Danke.
Gruss
laufkopf:
bessere Lösung ist im asm ist den rückgabewert wieder auf long zu setzen, also
ext.l d0
guest3744:
Danke.
Das geht jetzt : ds%=SWAP(r%(0))\65535, da kommt der richtige Wert,
Ich muss ja den Rest von der Division auch noch rausfiltern.
Gibt es in GFA-Basic da keine schnelle Lösung für beides?
Gruss
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln