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:

Pointer erniedrigen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 25.05.2009, 21:57    Titel: Pointer erniedrigen Antworten mit Zitat

Hi,
hört sich gemein an, ist aber harmlos zwinkern
Mein Problem ist folgendes:
Ich schreibe einen Kernel in FreeBASIC, und da muss ich Register auf den Stack legen (für Multitasking).
In dem Tutorial auf http://code.google.com/p/onyxkernel/wiki/SoftwareMultitasking wird das vermindern des Pointers auf den Stack so gemacht:
Code:
*--stack = 0;


Schön und gut, aber geht so was auch in FreeBASIC?
Bisher mache ich das mit Stackwechsel, "push" und dem Inline-Assembler. Nicht gerade schön, und auch fehleranfällig.

Ich hoffe mal ihr wisst da was lächeln
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 25.05.2009, 22:37    Titel: Antworten mit Zitat

stack = stack - 1
*stack=0
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.05.2009, 21:29    Titel: Antworten mit Zitat

oder:
Code:
Dim As UInteger Ptr stack
...


...
'stack steht hier auf der letzen Adresse des Stackbereichs
stack = stack - 15 'stack um 60 Byte zurück
' Expand down stack
' processor data
stack[14] = &h202       ' EFLAGS
stack[13] = &h08        ' CS
stack[12] = thread      ' EIP

' pusha
stack[11] = 0           ' EDI
stack[10] = 0           ' ESI
stack[9] = 0           ' EBP
stack[8] = 0           ' NULL
stack[7] = 0           ' EBX
stack[6] = 0           ' EDX
stack[5] = 0           ' ECX
stack[4] = 0           ' EAX

' data segments
stack[3] = &h10        ' DS
stack[2] = &h10        ' ES
stack[1] = &h10        ' FS
stack[0] = &h10        ' GS

...


EDIT\ Code berichtigt
stack[14] - stack[0]
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 28.05.2009, 16:15, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 27.05.2009, 12:15    Titel: Antworten mit Zitat

mit "asm cli" ?
Kannst dir meinen Kernel auch mal ansehen: http://sourceforge.net/projects/frostkernel
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 28.05.2009, 22:29    Titel: Antworten mit Zitat

Mit welcher Intention bist du denn diesen Kernel angegangen?
Möglichst alles in Basic-Syntax schreiben?
oder "egal der fbc muss es kompilieren können"?

Viele der Subs könnte man durch Makros ersetzen, die Sprünge vermeiden würden, oder auch einige Basic-Zeilen durch Asm wesentlich kürzen.
Z.B.

Code:
sub Paging_activate
    '// we activate paging by enabling the last bit of cr0.
    dim cr0reg as UINTEGER                                 '// variable needed to modify the value of cr0
    ASM
        mov eax, cr0                                       '// get the value of cr0 into eax
        mov [cr0reg], eax                                  '// get the value of eax into the variable
    END ASM
    cr0reg = BITSET(cr0reg, 31)                            '// set the last bit of the variable
    ASM
        mov eax, [cr0reg]                                  '// get the new value of the variable into eax
        mov cr0, eax                                       '// get the new value of eax into cr0
    END ASM
end sub
durch
Code:
sub Paging_activate
  ' we activate paging by enabling the last bit of cr0.
  ASM
    mov eax, cr0          ' get the value of cr0 into eax
    bts eax, 31           ' set bit 31
    'or eax, &H80000000
    mov cr0, eax          ' get the new value of eax into cr0
  END ASM
end sub

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 29.05.2009, 20:34    Titel: Antworten mit Zitat

In der neuesten Version hab ich das auch anders gelöst, die Version auf sourceforge konnte ich noch nicht updaten. Aber die aktuelle Version liegt hier: http://darkinsanity.netne.net/nerdpole/FROST_V0.3.1a.zip

Ziel meines Kernels ist, möglichst alles in FreeBASIC zu schreiben, allerdings benutze ich für manche Sachen (besonders wenn es zeitkritisch ist) Assembler.

Mein erster Kernel war komplett in Assembler geschrieben, aber das wurde mir zu kompliziert und unübersichtlich. C mag ich nicht, also hab ich mich entschlossen meinen Kernel in FreeBASIC zu schreiben.

Spätere Treiber (floppy ist in Arbeit) werde ich auch in FreeBASIC schreiben, als Dateiformat nutze ich ELF.
_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
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 -> Allgemeine Fragen zu FreeBASIC. 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