Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Tobsn am 12. July 2004, 14:27
-
Morgen!
Ich hab gerade erst mit Assamber angefangen und hab schon ein problem:
ich hab mit dem Tutorial aus Lowlevel 1 angefangen, das hat auch funktioniert, ich hab dann einbisschen mit den Bios Funktionen gearbeitet, also int 10h, und 16h, und wollte dann mit dem Videospeicher arbeiten, ich hab im forum, und in der Lowlevel 4 was darüber gefunden aber es funktioniert nicht.
mov 0xb8000, 'P'
mov 0xb8001, 0x07
erzeugt bei mir immer den fehler: invalid combination of opcode and operands
ich hoffe jemand kann mir da helfen!
danke!
-
Du kanst keine Zahl, bzw. ein Zeichen in eine Konstante schreiben. Was soll das bewirken????
-
Versuch mal:
mov [0xB8000], byte 'P'
mov [0xB8001], byte 0x07
-
muss man nicht immer eine Sement- und eine Offsetadresse angeben, oder gehen auch ganze Adressen?
-
Hiho,
stimmt, wenn du im Realmode bist, musst du ein Segment mit 0xB800 haben, erst dann kannste auf den Videospeicher zugreifen.
mov ax,0xB800
mov es,ax
mov byte es:[1],'p'
MfG GhostCoder
-
Danke!
hat funktioniert!
Ich hab noch eine (eher allgemeine frage) und zwar wenn ich in einem ASM programm eine variable definiere mit db zum beispiel, wo liegt die dann?
in meinem Assembler buch steht "reserviert ein byte an speicherplatz IM PROGRAMM" also is zb der typ variable zur laufzeit nicht veränderbar (wie bei C hald).
Nur was passiert jetzt wenn ich zum beispiel eine rekursive funktion programmiere. Wenn ich in C zum beispiel die Kochsche kurve programmiere verwende ich eine Funktion die sich immer wieder aufruft, berechnungen anstellt überprüft ob noch eine itaration nötig ist und sich dan ggf. nochmal aufruft. Dabei werden die errechneten Werte aber nicht überschrieben, sondern für jeden aufruf wird neuer speicherplatz verwendet. Ich frage mich das ganze weil mir nicht ganz klar ist was ich einem Programm das auf meinem Betriebssystem einmal laufen könnte alles zur verfügung stellen muss, bzw wie das dann seine variablen findet.
Vielleicht hat jemand einen link zu den thema.
ich hoff, das ganze ist nicht zu kunfus und ihr könnt nachvollziehen was ich meine, Danke schon im vorraus!
-
Lokale Variablen werden auf dem Stack geschrieben. Musst dich mal an TeeJay wenden, der sollte eigendlich mal das Asm-Tut veröffentlichen, das wir und andere geschrieben haben. Da steht sowas alles drin.
-
Das mit den ASM-Tuts überlasse ich Roshl.
Evtl wollte er die in die nächste Ausgabe einbringen.
-
Hiho,
wenn du z.B. schreibst:
mov ax,[x]
x dw 10
mov ds,ax
wird direkt zwischen den beiden mov's die zahl 10 als word in deinen "code", besser gesagt die binärdatei. Somit könntest du auch alle Opcodes per hand eingeben...
Zur Rekusion in C musst du nichts beachten, da die lokalen variablen auf den stack abgelegt werden, richtig. In asm musst du das aber von Hand machen. Hoffe geholfen zu haben.
MfG GhostCoder
-
...die binärdatei GESCHRIEBEN. Somit...