atari-home.de - Foren
Software => Coding => Thema gestartet von: guest3744 am Di 22.09.2015, 23:02:36
-
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?
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
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
-
card(#)
card(swap(#))
-
Danke für den Hinweiss.
Aber bei "ds&=CARD(SWAP(r%(0)))" ist d& "0" .
Danke.
Gruss
-
bessere Lösung ist im asm ist den rückgabewert wieder auf long zu setzen, also
ext.l d0
-
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
-
oder eine fallabfrage
move nach d0
bmi.s divsl
rts
divsl: ext.l d0
rts
-
ds%=SWAP(r%(0))\65535 > Ergebnis
ds1%=r%(0)\65535 > Rest der Divison
Gruss
-
CARD() liefert die unteren 16 bit
SWAP() vertauscht obere und untere 16 bit
-
Lese mal etwas über zweierkomplementdarstellung und signed und unsigned
8 bit
76543210 hoch2
10000001 gedeutet als unsigned = 129
10000001 gedeutet als signed = -1
-
Wenn ich ds&=Card(r%(0)) eingebe , kommt die Fehlermeldund: (siehe Bild).
Aber die unteren 16 Bit sind doch Wort : -32768..32767 !!!! (47 / -5 = -9 )weil divs ja das oberste Bit setzt, (Bit 15) . Macht Card daraus wieder eine vorzeichenlose Zahl?
Bei ds%=card(swap(r%(0))) kommt jedenfalls erstmal der richtige Restwert 2 raus.
Gruss
-
Boolean ! 1 byte (1 bit in arrays) 0 or -1 (FALSE or TRUE)
Byte | 1 byte 0 to 255
Word & 2 bytes -32768 to 32767
Long % 4 bytes -2147483648 to 2147483647
Float # 8 bytes 2.225073858507E-308 to 3.595386269725E+308
String $ 0 to 32767 bytes ASCII value 0 to 255 for each character
-
Hallo, grüss dich.
Die kenne ich schon.
Mit den Card ist mir nicht klar, ob dieser Befehl nur Unsignet liest und ausgibt.
Danke.
Gruss