Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Variablenübergabe an ASSEMBLER-Prozedur

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 02.02.2005, 21:24    Titel: Variablenübergabe an ASSEMBLER-Prozedur Antworten mit Zitat

Hi Leute!

Ich arbeite grade an meiner ersten SVGA-Lib, und möchte sie in ASSEMBLER schreiben, damit es in ner annehmbaren geschwindigkeit läuft.
Jetzt habe ich aber ein problem mit der Variablenübergabe:

Das PROC SvgaInit soll den Parameter mode übergeben bekommen, und die Parameter xw, yw und cz zurückgeben.
(mode: Modusnummer
xw/yw: X/Y-Auflösung
cz: Farbzahl)

Wenn ich im QB dann schreibe:
Code:
DECLARE SUB SvgaInit (BYVAL mode, BYVAL xw .....)

dann wird nur mode übergeben, der "Status-Block" bleibt unangetastet. Klar, dafür ist er ja auch entworfen.

Wenn ich die BYVAL's weglasse, wird aber nur das Offset übergeben. Wie kann ich das Segment mitschicken?

Sicher, möglich wäre so etwas:
Code:

DECLARE SUB SvgaInit (BYVAL mode, xw, ..., BYVAL segment)
segment = VARSEG(xw)

Aber das gefällt mir nicht, weil ich diesen Statusblock auch an andere Prozeduren übergeben will (z.B. SvgaPset), und dann wird es zu unübersichtlich, weil dann zu viele Parameter da sind.



Um das wenigstens ein bisschen zu vereinfachen habe ich jetzt xw, yw und cz zum Record info zusammengefasst:
Code:

TYPE ModeInfo
 xw AS INTEGER
 yw AS INTEGER
 cz AS INTEGER
END TYPE
DIM info AS ModeInfo

Das Problem ist halt, dass bei Records nur die Adresse übergeben werden kann.
Man kann also nicht einfach so etwas wie "segment as INTEGER" einfügen...

Praktisch wäre halt, so etwas wie ein ASM-Äquivalent von COMMON SHARED zu haben, aber so etwas kenne ich leider nicht.
Ihr vielleicht?

Thanks for help!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChemicalWarfare



Anmeldungsdatum: 15.09.2004
Beiträge: 152

BeitragVerfasst am: 02.02.2005, 21:46    Titel: Antworten mit Zitat

statt byval mußt du seg schreiben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 02.02.2005, 22:15    Titel: Antworten mit Zitat

Ah!
Wenn ich dass dann POPe, dann bekomme ich also:

BYVAL mode => Modusnummer
info => Offset Modusinfo
SEG info => Segment Modusinfo

Oder muss ich des nochmal extra POPen, kommt dann also ein 32-Bit-Wert?

Aber danke schon mal für den Tipp!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChemicalWarfare



Anmeldungsdatum: 15.09.2004
Beiträge: 152

BeitragVerfasst am: 03.02.2005, 14:05    Titel: Antworten mit Zitat

seg heißt seg + offset, also 32 bit
mußt natürlich gucken in welcher reihenfolge qbasic die adresse pusht, also seg:offset oder offset:seg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 04.02.2005, 16:11    Titel: Antworten mit Zitat

hm, also allgemein gilt die reihenfolge:

Rücksprung-Seg
Rücksprung-Offseg
Parameter 1
Parameter 2
...
Parameter n

Also wirds wohl auch Seg:Off sein, aber auch wenns nicht so wäre - es gibt ja nur 2 Möglichkeiten grinsen

Also danke für den Tipp!
Aber wies aussieht, wir in nächster zeit nix aus dem ausprobieren, weil der Sprechende Comp hauptziel is Zunge rausstrecken
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz