String ausgeben



  • Ich bin's mal wieder...
    Wie kann ich einen String über seinen Variablennamen ausgeben? Über die Adresse ist das mit AH 09 und int 21 kein Problem

    jmp weiter
    db 'Text$'
    weiter:
    mov ah 09h
    mov dx 102h
    int 21
    

    Aber wenn ich jetzt versuche das über den Namen zu machen kommt kein Text, sondern das Programm wird einfach beendet

    jmp weiter
    Text db 'Text$'
    weiter:
    lea dx,Text   bzw. mov dx,offset Text
    mov ah,09h
    int 21
    

    In den ganzen Tutorials wird das so erklärt, aber mein Assembler macht irgendwie nicht mit...



  • 1. Welcher Assembler?
    2. Welches Zielformat (.com, .exe, usw.), welche direktiven hast du verwendet (-> poste einfach mal den ganzen code), wie hast du den Kram assembliert/gelinkt?

    BTW: Achte mal darauf, wo du wieviele Kommata setzt und welche Zahlenformate du verwendest...



  • Der Assembler heißt asmarc, glaube ich, müsste http://assembler86.de/home/download.htm sein.
    Das Zielformat ist .com und der komplette Code ist:

    jmp weiter
    Text db 'Text$'
    weiter:
    mov dx, offset Text
    mov ah,09h
    int 21
    mov ah,4c01
    int 21
    

    Also bis auf den Interupt zum Beenden alles, was ich schon geschrieben hatte. '.code' und 'org 100h' oder was da sonst noch an den Anfang gehören sollte habe ich weggelassen, weil das Assemblerfehler verursachte und die Programme auch ohne laufen.



  • Wieso kennzeichnest du die Zahlen manchmal als Hexadezimal und manchmal nicht, obwohl du es eigentlich müsstest (z.B. bei int 21h)? Ist das deinem Assembler egal bzw. werden Zahlen standardmäßig als Hex gelesen?
    Ich denke es ist am besten, wenn du dir erstmal die mitgelieferten Beispiele anschaust. Dann weißt du, wie ein Programm für diesen Assembler aussehen muss und kannst Beispiel-Quelltexte aus Tutorials umschreiben. Alternativ kannst du natürlich auch einen anderen Assembler benutzen, wie zum Beispiel nasm.



  • wenn du das org 100h weglässt dann kanns doch nicht funken weil du dann als addresse 02h hast statt 102h 😃



  • Danke für die Antworten. Die Zahlen müssten natürlich überall gekennzeichenet sein. Vergesse ich dauernd und sehe dann im Maschinencode ein CD 15 statt CD 21 😉 Das mit dem org 100h macht der Assembler anscheinend automatisch, weil's jetzt funktioniert, auch ohne.


Anmelden zum Antworten