kostenloser Webspace werbefrei: lima-city


Assembler: Adresse einer Variable in STRUC

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    d*****e

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Autor dieses Themas

    d*****e

    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
  4. 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
  5. Autor dieses Themas

    d*****e

    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
  6. hmm ich dachte nur da das cx-register ja zum rechnen zuständich sein müsste...
  7. Autor dieses Themas

    d*****e

    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.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!