Autor Thema: invalid combination of opcode and operands  (Gelesen 4837 mal)

Tobsn

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« 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!

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #1 am: 12. July 2004, 14:47 »
Du kanst keine Zahl, bzw. ein Zeichen in eine Konstante schreiben. Was soll das bewirken????

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 12. July 2004, 15:10 »
Versuch mal:

mov [0xB8000], byte 'P'
mov [0xB8001], byte 0x07
----------------------
Redakteur bei LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 12. July 2004, 16:44 »
muss man nicht immer eine Sement- und eine Offsetadresse angeben, oder gehen auch ganze Adressen?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 12. July 2004, 18:47 »
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
A man, a legend!

Tobsn

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 13. July 2004, 13:57 »
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!

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #6 am: 13. July 2004, 14:02 »
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.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #7 am: 13. July 2004, 17:45 »
Das mit den ASM-Tuts überlasse ich Roshl.
Evtl wollte er die in die nächste Ausgabe einbringen.
----------------------
Redakteur bei LowLevel

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 13. July 2004, 18:31 »
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
A man, a legend!

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 13. July 2004, 18:32 »
...die binärdatei GESCHRIEBEN. Somit...
A man, a legend!

 

Einloggen