TASM32 vs. NASM Parameter+ Kompatibilität (doch noch ein Versuch)

07/09/2008 - 15:41 von Hubert Seidel | Report spam
Hallo NG,

Hier ein Beispiel wie TASM (v5.2b) aufgerufen wird:
tasm32 -zn -m3 -t -w- -zn -isys sys\assign,sys\assign.obj

Hier meine Interpretation:
-zn : Keine Zeilennummern?
-m3 : Pass3 für Vorwàrtsreferenzen
-t : Erfolgsmeldung abstellen
-w- : Warnings abstellen
-zn : Keine Zeilennummern (keine Ahnung warum zwei mal!)?
-isys : Suchpfad
sys\assign,sys\assign.obj : Quelle Ziel

Und so rufe ich NASM (v2.03) auf:
nasm -t -Isys sys\assign -o sys\assign.obj

-zn ignoriere ich einfach mal
-m3 ebenfalls ignoriert
-t ist mir egal, aber NASM möchte den als Kompatibilitàtsschalter
-w ist mir auch erst mal egal
-i in ein großes I geàndert (unterschies)
Quelldatei möchte ein .asm dran haben
und zum Schluss die Ausgabe mit einem -o

Soweit OK.

Nur beim Assemblieren hagelt es unerwartet tausende von Fehler.
An der Stelle soll nicht unerwàhnt bleiben das ich im makefile
nur den TASM32-Aufruf durch ein NASM32-Aufruf geàndert habe,
welches ein Batchfile ist und den nasm-Aufruf darunter ausführt.
(d.h. die Zeile nasm32 nur informativ;-)

Hier der Anfang der Konsolenausgabe:
MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
nasm32 -zn -m3 -t -w- -zn -Isys sys\assign,sys\assign.obj
nasm -t -Isys sys\assign -o sys\assign.obj
sys\assign.asm:10: error: `%include' expects a file name
sys\assign.asm:11: error: `%include' expects a file name
sys\assign.asm:13: warning: label alone on a line without a colon might be in error
sys\assign.asm:13: error: attempt to define a local label before any non-local labels
sys\assign.asm:14: error: attempt to define a local label before any non-local labels
sys\assign.asm:14: error: parser: instruction expected
sys\assign.asm:16: error: parser: instruction expected
sys\assign.asm:17: error: symbol `EXTRN' redefined

Und hier ein paar Zeilen vom Anfang:

01:
02: ; *******************************************************
03: ; * *
04: ; * Delphi Runtime Library *
05: ; * *
06: ; * Copyright (c) 1996,98 Inprise Corporation *
07: ; * *
08: ; *******************************************************
09:
10: INCLUDE SE.ASM
11: INCLUDE FILEIO.ASM
12:
13: .386
14: .MODEL FLAT
15:
16: EXTRN CreateFileA:NEAR, ReadFile:NEAR, WriteFile:NEAR
17: EXTRN CloseHandle:NEAR, GetStdHandle:NEAR, GetLastError:NEAR
xx: EXTRN SetFilePointer:NEAR, GetFileSize:NEAR, SetEndOfFile:NEAR
xx: EXTRN GetFileType:NEAR, SetInOutRes:NEAR
xx: PUBLIC _Assign, __Flush, _Flush
xx:
xx: .CODE
xx:
xx: ; FUNCTION TextIn( VAR t: Text ) : Integer;
xx:
xx: TextIn PROC
xx:
xx: ; -> EAX Pointer to text record
xx:
xx: ; Make buffer empty
xx:
xx: XOR EDX,EDX
xx: MOV [EAX].BufEnd,EDX
xx: MOV [EAX].BufPos,EDX
...

Ich konnte auf die Schnelle nicht heraus bekommen zu
welcher TASM-Version NASM mit dem Schalter -t kompatibel
sein soll und glaube das ich auf dem Holzweg bin. Richtig?

mfg.
Herby

http://www.hubert-seidel.de
 

Lesen sie die antworten

#1 Ralph rkhb Bauer
07/09/2008 - 18:57 | Warnen spam
Hubert Seidel schrieb:
Nur beim Assemblieren hagelt es unerwartet tausende von Fehler.



Du kannst TASM-ASM-Dateien nicht unveràndert durch NASM jagen, auch nicht
mit der Option -t. Die Option -t besagt nur, dass bestimmte TASM-Eigenheiten
auch in NASM möglich sind:

http://nasm.sourceforge.net/doc/nas...ion-2.1.17
http://nasm.sourceforge.net/doc/nas...ection-4.9

Sofern nicht ausdrücklich anders vermerkt, müssen diese Eigenheiten aber
weiterhin NASM-konform sein.

Im einzelnen:

10: INCLUDE SE.ASM
sys\assign.asm:10: error: `%include' expects a file name



Laut Nasm-Dokumentation muss der Dateiname zwischen doppelten
Anführungszeichen stehen:

http://nasm.sourceforge.net/doc/nas...ection-4.6

13: .386
sys\assign.asm:13: warning: label alone on a line without a colon
might be in error sys\assign.asm:13: error: attempt to define a local
label before any non-local labels sys\assign.asm:14: error: attempt



Kennt NASM so nicht und hat es als lokales Label (mit führendem Punkt)
interpretiert. Lasse es weg oder benutze 'CPU 386':
http://nasm.sourceforge.net/doc/nas...ection-5.8

14: .MODEL FLAT
sys\assign.asm:14: error: parser: instruction expected



Kennt NASM so nicht. Die Segmente können einzeln spezifiziert werden:

http://nasm.sourceforge.net/doc/nas...tion-6.2.1

Mir scheint, dass man das bei Windows im neuen NASM nicht mehr tun muss. Du
kannst sicherheitshalber 'BITS 32' setzen.

16: EXTRN CreateFileA:NEAR, ReadFile:NEAR, WriteFile:NEAR
sys\assign.asm:16: error: parser: instruction expected



Kennt NASM nicht. Du kannst nur 'EXTERN' benutzen und nur wie
vorgeschrieben:
http://nasm.sourceforge.net/doc/nas...ection-5.5

16: EXTRN CreateFileA:NEAR, ReadFile:NEAR, WriteFile:NEAR
sys\assign.asm:17: error: symbol `EXTRN' redefined



Da EXTRN als Schlüsselwort unbekannt war, wurde es von NASM zu einem
globalen Label umgedeutet, was nur einmal vorkommen darf.

viele grüße
ralph

Ähnliche fragen