Lowlevel

OffZone => Offtopic => Thema gestartet von: bscreator am 13. January 2008, 18:03

Titel: Kleine Frage zu NASM...
Beitrag von: bscreator am 13. January 2008, 18:03
Hallo OS-Coder,
mal ne kleine Frage zum NASM-Assembler:
Ist es eigentlich möglich, den Wert einer zuvor definierten und initialisierten Variablen zu ändern ?
Ich frag nur, weil in jedem tollen ASM-Buch steht, dass Operationen wie
mov Zaehler,ah ;oder
add Zaehler,20
zulässig sind. Allerdings scheint da NASM irgendwas dagegen zu haben, denn es antwortet immer mit
Zitat
Invalid combination of opcode and operands
, sprich die beiden Strukturen passen nicht zusammen.
Was aber im Prinzip nicht sein kann, denn Zaehler wurde zuvor mit db 0 initialisiert.
Wisst ihr, was da los ist ?
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 13. January 2008, 18:11
Disclaimer: Ich benutze vernünftige Sprachen und kenne mich daher mit Assembler, erst recht in der Falschrum-Variante nicht aus.

Müßte es nicht mov [Zaehler], ah heißen?
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bscreator am 13. January 2008, 18:20
Stimmt, hast natürlich recht. Da müsst ihr entschuldigen, dass ich wegen solchen billigen Fragen auftauche, aber wenns im Studium ständig nur um C++ und OOP geht, dann vergisst man ASM ziemlich schnell.
Danke jedenfalls.
Titel: Re: Kleine Frage zu NASM...
Beitrag von: Korona am 13. January 2008, 18:43
Btw, "add [Zaehler], 20" würde auch nicht funktionieren, da NASM den Typ von Labels nicht speichert. Nasm weiß nichts davon, dass du Zaehler mit db 0 initialisiert hast, Zaehler ist einfach nur eine Addresse für NASM. NASM verlangt Prefixe wie "add byte [Zaehler], 20", wenn die Größe des Speicherzugriffs nicht durch ein Register bestimmt ist.
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 13. January 2008, 21:34
Stimmt, hast natürlich recht. Da müsst ihr entschuldigen, dass ich wegen solchen billigen Fragen auftauche, aber wenns im Studium ständig nur um C++ und OOP geht, dann vergisst man ASM ziemlich schnell.
Warum benutzt du dann nicht eine Hochsprache für dein OS, wenn du dich damit besser auskennst?
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 15:13
Btw, "add [Zaehler], 20" würde auch nicht funktionieren, da NASM den Typ von Labels nicht speichert. Nasm weiß nichts davon, dass du Zaehler mit db 0 initialisiert hast, Zaehler ist einfach nur eine Addresse für NASM. NASM verlangt Prefixe wie "add byte [Zaehler], 20", wenn die Größe des Speicherzugriffs nicht durch ein Register bestimmt ist.
Genau aus diesem Grund finde ich fasm besser als nasm.

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 14. January 2008, 16:14
Und woher weiß fasm, was ich an der Stelle gerade meine?
Titel: Re: Kleine Frage zu NASM...
Beitrag von: FreakyPenguin am 14. January 2008, 17:31
Naja, Kristallkugeln sind inzwischen recht verbreitet. :P
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 17:47
Wenn du folgende Variable hast:

Beispiel dq 0
Dann brauchst du unter Fasm nur dass zu schreiben:

mov [Beispiel],Wert
Nasm kann damit aber nichts anfangen und erwartet ein:

mov qword [Beispiel],Wert
was in meinen Augen unnötig ist. Es ist zwar nichts schwerwiegendes, aber es hat bei mir schon für Fehler gesorgt (q bei qword vergessen oder später die Größe der Variable geändert und nicht an alle Stellen im Code angepasst etc.).

Zitat
Und woher weiß Fasm, was ich an der Stelle gerade meine?
Weil einfach standardmäßig die Definierte Größe genommen wird (im Beispiel also QWORD) ansonsten geht natürlich auch eine explizite Angabe.

@FreakyPenguin: Was du damit jetzt sagen willst weiß ich nicht.

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bluecode am 14. January 2008, 18:29
@FreakyPenguin: Was du damit jetzt sagen willst weiß ich nicht.
Damit will er sagen, dass der Assembler nur in die Kristallkugel schauen muss und dort wird er natürlich die richtige Operandengröße sehen :wink:
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 18:54
@bluecode: Wie jetzt?  :-o
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bluecode am 14. January 2008, 20:11
Kein Humor heute, oder? :roll: :wink:

Normalerweise sagt man sowas wie "ich hab meine Kristallkugel verlegt" (1), "Ein Blick in die Kristallkugel sagt mir, ..." (2) oä. in Programmiererforen wenn der Threadersteller total unzureichende Angaben über sein Problem bzw. die Umstände eines Problems macht und eine Problemlösung nicht möglich ist (1). Teilweise wird dann von den Antwortenden erraten was das Problem bzw. die Umstände eigentlich sind (2).
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 20:25
@bluecode: Und an welcher Stelle ist das hier der Fall. "bscreator" hat Bücher gelesen, die von TASM/MASM-Syntax  ausgehen und Nasm kann mit dieser nicht umgehen, da er eine andere Syntax verwendet. Wo muss man da raten?

NASM/FASM:
mov si,var ;Offset der Variable var nach si kopieren
mov si,[var] ;Wert der Variable var nach si kopieren

TASM/MASM:
mov si,offset var ;Offset der Variable var nach si kopieren
mov si,var ;Wert der Variable var nach si kopieren

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bluecode am 14. January 2008, 20:30
Du weißt, dass die eigentliche Frage von taljeth kam und nicht von mir oder? :wink: Ich hab dir nur erklärt, was freakys Kommentar bedeuten soll.

Mir ist klar, dass man aus der Definition einer Variable wenn sie in dieser Übersetzungseinheit (falls sie woanders ist geht das mit etwas extern syntactic sugar bestimmt auch, kA ob das fasm macht) ist die Größe herausfinden kann.
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 14. January 2008, 22:23
Und ich bin der Meinung, daß es äquivalent sein sollte, ob ich viermal db oder einmal dd schreibe. Daher halte ich es für gefährlich, daß der Assembler einfach irgendeine Annahme trifft, was ich wohl gemeint haben könnte. Wenn ich Pech habe, liegt er mit dieser Angabe nämlich daneben.
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 22:29
@taljeth: Du kannst es ja auch wie unter Nasm angeben. Und wenn jemand

var db 0
db 0
db 0
db 0

schreibt, dann ist er entweder Behindert oder weiß nicht, dass es ein dd gibt.

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 14. January 2008, 22:46
@taljeth: Du kannst es ja auch wie unter Nasm angeben.
Ich kann. Aber wenn ich es vergesse, werde ich nicht daran erinnert. Aber du hast ja damals schon nicht eingesehen, daß es etwas gutes ist, wenn ein Compiler viel meckern kann, weil die Syntax streng ist.

Zitat
Und wenn jemand
var db 0
db 0
db 0
db 0
schreibt, dann ist er entweder Behindert oder weiß nicht, dass es ein dd gibt.

Oder er wollte klarmachen, daß hier logisch vier verschiedene je ein Byte große Zahlen vorliegen, die nur irgendeine Hardware ausgerechnet als dword haben will.
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 23:20
@taljeth: Jo klar, deswegen proggst du ja auch in C. ^^

Na ja, das kann man schon so sehen. Aber ich persönlich bevorzuge das, was Fasm macht. Denn ich habe keine Lust unnötigerwiese byte, word, dword, qword etc. zu schreiben obwohl es durch die Definitionsgröß bereits bekannt ist. Und wenn ich wie du sagst, die Definitionsgröße doch anders haben möchte, dann bin ich auch so schlau und denke daran, diese entsprechend anzugeben.

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 23:26
Oder er wollte klarmachen, daß hier logisch vier verschiedene je ein Byte große Zahlen vorliegen, die nur irgendeine Hardware ausgerechnet als dword haben will.

Zumal man den 4 Variablen dann auch allen einen neuen Namen geben darf und somit sauberer programmiert:

Var:
var0 db 0
var1 db 0
var2 db 0
var3 db 0

Dann darf der eine Code schön die varX einzeln ansprechen und der andere z.B. ein mov eax, qword [Var] machen.

:-P

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 14. January 2008, 23:29
@taljeth: Jo klar, deswegen proggst du ja auch in C. ^^
Nein, das hat mehr mit einer Art kleinstem gemeinsamen Nenner zu tun. C ist nämlich an manchen Stellen auch nicht gerade ungefährlich...

Zitat
Dann darf der eine Code schön die varX einzeln ansprechen und der andere z.B. ein mov eax, qword [Var] machen.
Und wenn das qword bei [Var] nicht angegeben ist, weil das ja bekanntermaßen eine qword-Variable (naja, eigentlich dword, aber du hast ja den falschen Typ benutzt...) ist? Ups...
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 14. January 2008, 23:42
Zitat
Dann darf der eine Code schön die varX einzeln ansprechen und der andere z.B. ein mov eax, qword [Var] machen.
Und wenn das qword bei [Var] nicht angegeben ist, weil das ja bekanntermaßen eine qword-Variable (naja, eigentlich dword, aber du hast ja den falschen Typ benutzt...) ist? Ups...
Hä? Var ist doch keine Variable mit vordefinierter Größe also muss man dem fasm sagen, welche Größe man haben möchte sonst gibt er eine Fehlermeldung aus. Und damit wäre dein NASM-Vorteil hinfällig. Aber ich meine natürlich dword, sorry.

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 15. January 2008, 22:08
@taljeth: Wie du weißt nicht mehr was du sagen sollst? So geht das aber nicht. :-P

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: kevin am 15. January 2008, 23:38
Es macht die Sache nicht besser, wenn es an manchen Stellen geht und an anderen nicht. ;)

Davon abgesehen langweilt mich diese Diskussion, am Ende ist man sich doch wieder nur einig, daß man unterschiedlicher Meinung ist...
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 16. January 2008, 00:26
OK, ich merke schon du kannst eine Diskussion nicht verlieren (im sinne von nicht wollen). Na ja, dann würdest du zu uns passen. ^^ *duck und ganz ganz schnell weg*

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: nooooooooos am 16. January 2008, 13:30
Haha...bitmaster: Merkst du eigentlich auch was du für Sachen schreibst? Sorry aber das entspricht echt nicht dem Niveau hier...

Gruss
Noooooooooos
Titel: Re: Kleine Frage zu NASM...
Beitrag von: bitmaster am 16. January 2008, 14:43
Haha...bitmaster: Merkst du eigentlich auch was du für Sachen schreibst? Sorry aber das entspricht echt nicht dem Niveau hier...

Gruss
Noooooooooos
Äh wieso? Was habe ich denn schlimmes geschrieben? Auf jeden Fall finde ich den Fasm besser. Aber naja, dass muss, wie taljeth schon sagte, jeder selber wissen. Und das taljeth zu uns passen würde war eher ein Scherz. Zu den roten passen nur rote. Mit Klinsi haben wir ja schon genug nicht rote bei uns. Na ja ...

bitmaster
Titel: Re: Kleine Frage zu NASM...
Beitrag von: nooooooooos am 16. January 2008, 14:51
Zitat
Äh wieso? Was habe ich denn schlimmes geschrieben?
Du hast überhaupt nichts schlimmes gesagt, es war nur nicht alles so geistreich.

Zitat
Auf jeden Fall finde ich den Fasm besser. Aber naja, dass muss, wie taljeth schon sagte, jeder selber wissen.
Damit meine ich nicht das Gespräch über das Thema, wie hier...
Zitat
Und das taljeth zu uns passen würde war eher ein Scherz. Zu den roten passen nur rote. Mit Klinsi haben wir ja schon genug nicht rote bei uns. Na ja ...
...aber sowas schon....


Gruss
Noooooooooooos