text ausgeben
-
also man kann einen Text ja über
.data text db "Hallo $" .code lea dx, text mov ah, 9 int 21h
und kann man auch einen text ausgeben, der nicht vorher bei ".data" eingegeben wurde? Weil folgendes geht nicht:
mov dx, 'Hallo' mov ah, 9 int 21h
-
Hi.
Nein, so wie du das versuchst, funktioniert das nicht.
BTW:
Schonmal bei den Tutorials in den Assembler-FAQ gestoebert?
-
ja, ich habe schon nachgeschaut, aber ich finde es immer nur auf die 1. von mir genannte methode (also im data segment)
-
Sry, habe ich mich vielleicht nicht deutlich genug ausgedrueckt:
Du musst fuer die Textausgabe ueber int 21h (so wie du das in deinen Codes machst) immer den Text irgendwo im Speicher ablegen.
Ob du dafuer nun das Segment .data nimmst, oder den Text irgendwo im Codesegment, oder sonstwo ablegst, ist dabei egal, du kannst aber den Text nicht direkt in ein 16Bit-Register, wie dx kopieren (wie du es in deinem 2. Code-schnippsel versuchst).
Das kann nicht funktionieren, da erstmal "Hallo" 5Byte - also 40Bit - lang ist, und von daher schonmal gar nicht in ein nur 16Bit breites Register passen kann, und dann erwartet diese von dir benutzte DOS-Funktion nunmal in dx nicht den Text selbst, sondern nur ein Offset auf einen Text.Deshalb meinte ich, du solltest vielleicht eines der Tutorials nochmal Stueck fuer Stueck durcharbeiten, da man den Eindruck bekommen koennte, dass du einige Grundlagen noch nicht richtig verstanden hast.
-
diese von dir benutzte DOS-Funktion nunmal in dx nicht den Text selbst, sondern nur ein Offset auf einen Text.
also müsste ich anstatt "mov" "lea" verwenden. aber dann kan ich den Text ja auch nicht direkt dahinter schreiben. also muss ich den text irgendwo in einer variable speichern. aber sowas wie folgendes geht auch nicht (out of range)
output db "", "$" .code .startup mov output, "hallo" lea dx, output mov ah, 9 int 21h
es gibt keine assambler fehler, wenn ich das "hallo" durch nur ein "h" ersetze. Aber beim ausführen des programms zeigt er mir irgendeinen schrott an. alles außer einem h
-
Ich glaube, es bringt wirklich ueberhaupt nichts, weiter ueber dieses Problem zu diskutieren, solange du dir nicht erstmal die Grundlagen zu Gemuete fuehrst.
Werde dir erstmal (zB. mittels Tutorial oder Buch) darueber klar, wie Speicher und CPU zusammenarbeiten und was eine x86-CPU ueberhaupt so alles kann und was nicht.Nur soviel: Du kannst keinen Text, der groesser als 32Bit ist mit der "mov"-Instruktion kopieren. Weder in ein Register, noch sonstwohin. *sic*
Dh. Sowasmov output, "hallo'
oder sowas
mov dx, 'Hallo'
funktioniert einfach nicht.