link errors



  • ich hab erst vor ein paar tagen angefangen in assembler zu proggen, aber nachdem ich einige "compiler" ausprobiert hab lässt der erste erfolg immernoch auf sich warten...
    das hauptptoblem ist das ich mit den fehlermeldungen, die übrigens nur beim linken auftachen, nix anfangen kann...

    1. Code

    MODEL TINY    ;Für COM-Files
    CODE SEGMENT  ;Beginn Code-Seg
    ASSUME CS:CODE;Zuweisung an CS
    ORG 100h      ;Startadresse COM
    start:        ;Startlabel
     MOV AX,0902h ;Funkt. 9h, ASCII-Code 2h
     MOV BX,15    ;Farbcode Weiß
     MOV CX,1     ;Anzahl der Zeichen = 1
     INT 10h      ;Zeichen auf Screen bringen
     MOV AX,4C00h ;Funkt. 4Ch
     INT 21h      ;DOS-Exit
    CODE ENDS     ;Ende Code-Seg
    END start     ;Ende des Proggys
    

    (aus "the reald adoks way to assembler", linked in masm)
    error:
    "link 2001: unresolved external symbol"

    2. Code

    daten segment
    meldung db "hallo Welt!","$"
    daten ends
    stapel segment byte stack
    dw 128 dup (?)
    stapel ends
    code segment
    assume cs:code,ds:daten,es:nothing,ss:stapel
    start:
    mov ax,daten
    mov ds,ax
    mov dx, offset meldung
    mov ah,9h
    int 21h
    mov ah, 4ch
    int 21h
    code ends
    end start
    

    (ebenfalls aus einem tut, linked in tasm)

    error:
    "Warning: no stack"

    1. Frage: warum fangen die codes total verschieden an? in einem andern tut steht dann wieder jeder code fängt mit

    .386
    .DATA
    usw.
    

    an. Die syntax für masm und tasm ist doch gleich oder etwa nicht?

    2. Frage: was bedeuten die errors (also was stack is und so weiss ich schon)?



  • Zu 1:
    Nein. TASM unterstuetzt auch MASM-Syntax, umgekehrt funktioniert das jedoch nicht.

    Zu 2:
    Die Fehlermeldungen sind doch an sich recht selbsterklaerend:
    In Fall 1 hast du hast du irgendwo in deiner Objektdatei ein nichtaufgelöstes externes Symbol.
    Im 2. Fall wird aus irgendeinem Grund darauf hingewiesen, dass dein Programm keinen Stack hat.

    Mit MASM kenne ich mich nicht aus. Schau dir nochmal genau an, mit welchen switches da gearbeitet wird und überprüfe mit der Hilfeseiten des Assemblers und Linkers (Option /?), was genau die Befehlszeilen zum Assemblieren/Linken jeweils eigentlich tun sollten.
    Ich vermute aber einfach mal, dass du versucht hast, ein 16Bit Programm mit dem 32Bit MASM-Packet zu erstellen. => klappt nicht.

    Bei dem TASM-Code habe ich keine Fehlermeldung beim Linken gesehen.
    Mit welchem Befehl assemblierst/linkst du den code?
    Wie auch immer, im 2. Fall handelt es sich nur um eine Warnung, die du fuer dieses Beispiel notfalls auch ignorieren kannst.



  • wie gesagt ich bin ein zimelicher anfänger

    Nobuo T schrieb:

    Zu 2:
    Die Fehlermeldungen sind doch an sich recht selbsterklaerend:
    In Fall 1 hast du hast du irgendwo in deiner Objektdatei ein nichtaufgelöstes externes Symbol.

    wirkt auf mich bisher noch etwas kryptisch... 😉

    Nobuo T schrieb:

    Im 2. Fall wird aus irgendeinem Grund darauf hingewiesen, dass dein Programm keinen Stack hat.

    wie kann ich das ändern?

    Nobuo T schrieb:

    Mit welchem Befehl assemblierst/linkst du den code?

    cmd->tlink
    dannach hallo.exe, allerdings erhalte ich dann nur eine leerzeile.
    ein weiteres problem, das ich auch anfangs bei C hatte: die ausgabe erscheint nur für null komma ... sekunden. wie kann ich das programm unterbrechen und durch benutzereingabe fortsetzen?



  • nichmal eine minute nach dem letzten post hab ich das zweite bsp. nochmal probiert. jetzt klappts, warum auch immer 😕
    danke!


Anmelden zum Antworten