Tasm ändert code



  • optimiert der tasm vielleich auf gewisse boundary grössen? Das soll ja bei einigen Prozessoren ordentlich mehr speed bringen, aber warum macht er das dann nicht mit NOPs???



  • Wie komisch assemblierst du denn?
    Wenn ich deinen Code mit TASM assembliere und linke, dann disassembliere, kommt folgendes dabei heraus:

    //******************** Program Entry Point ********
    :0001.0100 6A05                   push 0005
    :0001.0102 6A03                   push 0003
    :0001.0104 680E01                 push 010E
    :0001.0107 68AF00                 push 00AF
    :0001.010A E81000                 call 011D
    :0001.010D C3                     ret
    // usw...
    

    Genau das was ich erwartet habe. 🙂

    Zeig mal deine Compilerschalter und die komplette .asm datei.

    Und schieb die schuld nicht auf den TASM, der macht da nix falsch. 🙂



  • .model tiny
    .data
    hallo db "Es ist ein test.",0
    .code
    org 100h
    
    START:
    push 5;x
    push 3;y
    push offset hallo;string;muss offset von ds sein!!!
    push 0afh;farben für zeichen
    call putsz;
    ret
    
    putsz:
    push bp;stack rahmen einrichten
    mov bp,sp
    push es;alles sichern
    push si
    push di
    mov ax,0b800h;segment zur ausgabe festlegen
    mov es,ax
    mov ax,[bp+8];y koordinate
    mov bx,160
    mul bx;noch nicht ausgebessert weil ich dieses umrechnen auf shifts im moment nervig finde,kommt aber noch
    mov dx,[bp+10];x koordinate
    add dx,dx
    add ax,dx
    mov di,ax
    mov si,[bp+6];string offset
    mov ah, byte ptr [bp+4];farbe
    ;shl ax,8
    output:;ausgabe schleife
    lodsb
    test al,al
    jz end_output
    stosw
    jmp output;
    end_output:
    pop di;reseten
    pop si
    pop es
    mov sp,bp
    pop bp
    ret 8
    END START
    

    ich benutze eine batch datei:

    @Echo Off
      if not exist D:\tasm\%1.asm goto quit
      D:\tasm\bin\tasm D:\tasm\%1 /MU /OS /Q
      if errorlevel 1 goto quit
      D:\tasm\bin\tlink D:\tasm\%1 /x /Tdc
      del D:\tasm\%1.obj
      :quit
    


  • Hab nochmal etwas rumprobiert und den Grund fuer das Problem gefunden:
    .model tiny
    .data
    hallo db "Es ist ein test.",0
    .code
    .286 ;<= hier gehoert der verwendete Prozessortyp hin...
    org 100h

    START:
    push 5;x

    BTW:
    Syntax: TASM [options] source [,object] [,listing] [,xref]

    Muessten demnach die Options nicht vor dem Dateinamen stehen 😕



  • Original erstellt von Nobuo T:
    **
    Syntax: TASM [options] source [,object] [,listing] [,xref]
    Muessten demnach die Options nicht vor dem Dateinamen stehen 😕**

    Es funktioniert auch, wenn die die Optionen vor den Sorcecode stellt.

    Aber mal ne andere Frage: Was macht TASM eigendlich, wenn man keinen Prozessortyp angibt? Wird dann irgend einer Standardmäßg verwendet?



  • Wahrscheinlich wird der 8086 als Standard verwendet. Der kann AFAIK keine Zahlen direkt auf den Stack pushen.
    So hat TASM dieses Problem doch recht elegant geloest. 😉



  • Nur das ich dsa auch verstehe,ich muss den 286 als ziel-prozessor angeben,damit das mit dem pushen von konstanteen funktioniert.



  • 286 oder neuer.



  • gab's auch nen 186 😕 😕 😕 😕 😕 😕 😕 😕



  • Ja:
    http://www.intel.com/design/intarch/prodbref/272222.htm

    [ Dieser Beitrag wurde am 02.12.2002 um 21:13 Uhr von Nobuo T editiert. ]


Anmelden zum Antworten