Autor Thema: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.  (Gelesen 3803 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

guest3744

  • Gast
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
               

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #1 am: Mi 23.09.2015, 17:18:27 »
card(#)
card(swap(#))
« Letzte Änderung: Mi 23.09.2015, 17:24:15 von laufkopf »

guest3744

  • Gast
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #2 am: Mi 23.09.2015, 19:36:53 »
Danke für den Hinweiss.

Aber  bei "ds&=CARD(SWAP(r%(0)))" ist d& "0" .

Danke.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #3 am: Mi 23.09.2015, 19:46:36 »
bessere Lösung ist im asm ist den rückgabewert wieder auf long zu setzen, also
ext.l d0

guest3744

  • Gast
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #4 am: Mi 23.09.2015, 19:53:47 »
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

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #5 am: Mi 23.09.2015, 20:13:52 »
oder eine fallabfrage
move nach d0
bmi.s divsl
rts
divsl: ext.l d0
rts

guest3744

  • Gast
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #6 am: Mi 23.09.2015, 20:15:57 »
ds%=SWAP(r%(0))\65535  > Ergebnis
ds1%=r%(0)\65535            > Rest der Divison

Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #7 am: Mi 23.09.2015, 20:17:27 »
CARD() liefert die unteren 16 bit
SWAP() vertauscht obere und untere 16 bit


Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #8 am: Mi 23.09.2015, 20:26:15 »
Lese mal etwas über zweierkomplementdarstellung und signed und unsigned
8 bit
76543210 hoch2
10000001 gedeutet als unsigned = 129
10000001 gedeutet als signed = -1

guest3744

  • Gast
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #9 am: Mi 23.09.2015, 22:23:58 »
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

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #10 am: Do 24.09.2015, 17:17:43 »
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

guest3744

  • Gast
Re: ASM: Ergebnis von divs aufteilen in 2x 16 Bit für die Ergebnisse.
« Antwort #11 am: Do 24.09.2015, 19:47:39 »
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