2016-06-24 9 views
-4

kompilieren kann ich nicht zuerst asm exe kompilieren ich habe MSVC 2005 ipc asm Buch versucht, erste asm App

nasm -f win32 first.asm (ok) 
cl first.obj driver.c asm_io.obj (cl not found i set path enviro, 

zweiten Versuch ausführen -> viele OBJ-Dateien nicht gefunden fand ich es und kopieren zu Quellordner, dritten Versuch ->

asm_io.obj : error LNK2001: unresolved external symbol _scanf 

asm_io.obj : error LNK2001: unresolved external symbol _printf 

) 

djgpp verwendet, kann nicht verstehen, was ich heruntergeladen mingw herunterladen müssen und es i s nein gcc exe

+0

http://drpaulcarter.com/pcasm/ –

+0

Bitte fügen Sie etwas Formatierung oder etwas hinzu. Ich kann nicht den Kopf oder die Enden des Textblobs dort machen. – theB

+0

Ich verstehe nicht, was Sie tun. Sie sagen, Sie haben MSVC 2005 und 2015, dann zeigen Sie uns Nasm und am Ende scheint Djgpp aus dem Nichts zu kommen. –

Antwort

1

MSVC ist nicht mit dem NASM-Assembler erhältlich. Sie müssen download that separately, wenn Sie es noch nicht installiert haben.

MSVC kommt jedoch mit dem MASM-Assembler. Sie finden Schritte zur Einrichtung der IDE here. Das Problem ist, NASM und MASM sind nicht perfekt kompatibel, Syntax-weise. Jemand, der Assembly kennt, könnte zwischen ihnen trivial übersetzen, aber Sie werden wahrscheinlich Schwierigkeiten haben, aus einem Buch zu lernen, das eine andere Syntax verwendet, als Ihr Assembler akzeptiert.

von Abgesehen davon, bin ich nicht sicher, warum Sie kompilieren den Code versuchen, nachdem Sie es zusammengebaut haben. Das ist nicht nötig und wird nichts Nützliches bewirken. nasm ist ein Assembler; Sie führen es aus, um Assembly-Code zusammenzusetzen. cl ist ein C- und C++ - Compiler; Sie führen es aus, um c und cpp Dateien zu kompilieren. Sie müssen nie cl oder gcc verwenden, wenn Sie Assembly schreiben.

+0

Fast korrekt, aber cl.exe ist sowohl ein Compiler und Linker. Sie können es verwenden, um die Ausgabe des Assemblers zu verknüpfen. – IInspectable

+0

@IInspectable Ich würde nicht sagen, dass es ein Linker ist, sondern dass er den Linker aufrufen kann, nachdem er das Kompilieren beendet hat. In der Tat, es ist, es sei denn, das '/ c 'Flag ist angegeben. cl.exe ist nur ein Front-End-Treiber für den Compiler. Wenn Sie nur versammelten Code verknüpfen möchten, würden Sie den Linker (link.exe) direkt aufrufen. –

+0

Sie haben Recht, das wurde schlampig gestellt. Der offizielle Wortlaut von [Compiler-Optionen] (https://msdn.microsoft.com/en-us/library/9s7c9wdw.aspx) lautet: * "cl.exe ist ein Tool, das die Compiler und den Linker von Microsoft C und C++ steuert. "Trotzdem ist es üblich, cl.exe auch nur zum Verknüpfen zu verwenden. – IInspectable