Assembler: Adresse einer Variable in STRUC
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
adresse
angabe
assembler
ausgabe
bestehen
buffer
code
eingabe
fetzen
grad
kopieren
liste
problem
puffer
register
string
struktur
type
verzeichnis
zahl
-
Hallo,
ich lerne grade die x86 Programmierung per Assembler und schreibe daher einige kleine Testprogramme. Da ich jedoch keine vernünftige Doku zu NASM finde und auch aus der NASM-Anleitung nicht ganz schlau werde hänge ich schon seit einiger Zeit an einem Problem.
Ich möchte die Adresse einer Variable die in einer Struktur angelegt wurde in ein Register kopieren. Die Angabe INSTANZNAME+VARIABLENNAME funktioniert jedoch so nicht (in [] eingebettet funktioniert dies, aber dann greife ich auf den Variablenwert zu)
Hier noch die Code-Fetzen:
mov dx, BUFFER+PUFFER.EINGABE
STRUC PUFFER .MAX resb 1 .ANZ resb 1 .TXT resb 255 .EINGABE resb 10 ENDSTRUC BUFFER: istruc PUFFER at PUFFER.EINGABE, db \'TEST\' iend
Bin für jede Hilfe dankbar
MfG
DCBlaze -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
das Problem habe ich bereits gelöst. Es war noch eine weitere .COM Datei mit gleichem Namen im Verzeichnis, die fälschlicherweise ausgeführt wurde. Das Programm funktioniert doch so wie ich es beschrieben hatte.
Nun habe ich aber ein weiteres Problem. Wie erhalte ich eine Adresse eines Strings die in iner Liste eingetragen ist? Mit dem Variablennamen+Zahl/Register erhalte ich immer \"invalid operand type\". Hier der zugehörige Code:
T_BE_ARRAY: DB \"DUMMY$\", \"SSE4.2$\", \"SSE4.1$\", \"SSSE3$\", \"SSE3$\", \"SSE2$\", \"SSE1$\", \"MMX$\"
Ausgabe: xor eax, eax mov ah, 09h mov ecx, 7 Ausgabe_LOOP: shr ebx, 1 jnc END_LOOP mov dx, T_BE_ARRAY+cx ; ecx oder eine Zahl funktioniert auch nicht int 21h END_LOOP: loop Ausgabe
Ich hoffe ihr könnt mir helfen.
Gruß
DCBlaze -
ich weiß nicht ob es richtig ist (ich versuche auch grad assembler zu lernen) aber vll muss man in zeile 6 erst mov cx, T_BE_ARRAY+cx
weil das ja eine addition ist, und das doch dann meines wissens nach in das count-register muss...
Beitrag geändert: 16.5.2008 18:08:44 von splinto -
Danke für die Antwort.
Leider funktioniert es auch nicht wenn ich, wie du vorgeschlagen hast, zunächst die Adresse ins CX-Register kopiere (ECX auch nicht). Es bleibt weiterhin die Fehlermeldung \"invalid operand type\" bestehen.
Gruß
DCBlaze -
hmm ich dachte nur da das cx-register ja zum rechnen zuständich sein müsste...
-
Normalerweise sind die Register (E)AX bis (E)DX Universalregister mit denen man eigentlich alles machen kann. (E)CX hat nur eine zusätzliche Aufgabe, da es für manche Funktionen als Counter verwendet werden kann.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage