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 100hSTART:
push 5;xBTW:
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. ]