NASM: Simpler Beispielcode



  • Hallo!

    Ich habe es endlich geschafft einen guten Compiler zu finden... NASM.
    Jetzt brauche ich nur noch einen absolut simplen Beispielcode um zu sehen, ob mein Compiler und Linker auch wirklich funktionieren.

    Kann mir einer bitte einen absolut simplen Code für NASM (64 bit Windows) posten?

    P.S. Ja, ich bin ein totaler Noob. Bitte habt Nachsicht.

    Danke schonmal im Voraus!



  • Ich hab jetzt mal mein neues Buch aufgeschlagen... folgenden Code will ich mit MASM (nicht NASM) compilieren:

    DATEN		SEGMENT
    
    Meldung		db "Assembler ist garnicht so schwer."
    			db "$"
    
    DATEN		ENDS
    
    CODE		SEGMENT
    
    			ASSUME CS:CODE, DS:DATEN
    
    Anfang:		mov ax, DATEN
    			mov ds, ax
    			mov dx, offset Meldung
    			mov ah, 9
    
    			int 21h
    
    			mov ah, 4Ch
    
    			int 21h
    
    CODE		ENDS
    
    			END Anfang
    

    Er gibt mir aber Errors raus...

    1. test.asm(12) : error A2004:symbol type conflict
    2. test.asm(25) : warning A4023:with /coff switch, leading underscore required for start address : Anfang

    Könnt ihr mir helfen?



  • Ok ich habe jetzt schon heraus gefunden dass ein Win32 Assembler Programm wie folgt aufgebaut ist...

    .386
    .model flat, stdcall
    
    .data
    
    .code
    
    start:
    end start
    

    Aber compilieren kann ich das noch nicht 😞 irgendein Tipp?



  • NASM ist die Rohheit in Person. Du kannst zwar sections definieren, aber Dinge wie assume oder Funktionen kennt NASM nicht.



  • Das ist 16 Bit Code, der geht in 64 Bit (Windows) nicht.
    Benutze einen Dos-Emulator und schau, wie weit du damit kommst, oder schau dich
    einmal auf diesen Seiten um:

    http://www.deinmeister.de/w32asm1.htm
    http://www.codingcrew.de/masm32/index.php

    Du kannst auch den PC-Emulator Bochs nehmen, die Hilfsanleitung auf
    http://www.henkessoft.de/OS_Dev/OS_Dev1.htm ist ganz gut.

    Ansonsten gibt es seit einiger Zeit den Source Code von Dos 1 und 2
    http://www.computerhistory.org/atchm/microsoft-ms-dos-early-source-code/



  • Vielen dank für die Links, damit komm ich definitiv weiter 🙂

    Also ich hab jetzt mal ein Grundgerüst gebaut...

    .386
    .model flat
    
    .data
    TestMessage  db "test...",0
    
    .code
    start:
    end start
    

    Das lässt sich auch compilieren aber der Linker gibt mir aus:

    LINK : fatal error LNK1221: a subsystem can't be inferred and must be defined
    

    Was mache ich falsch? Ich benutze den MASM Compiler und Linker von Visual Studio.

    Danke schonmal im Voraus 🙂



  • Du müsstest noch ein Subsystem angeben, entweder in den Projekteinstellungen oder mit dem /SUBSYSTEM -Schalter: https://msdn.microsoft.com/de-de/library/w40575ex.aspx



  • DANKE DANKE DANKE 😃 endlich... meine Güte war das eine schwere Geburt.

    Eine Sache noch... welche Parameter muss ich dem Compiler übergeben, damit er nur ein OBJ File erstellt und nichts anderes? Mein Code ist:

    @echo off
    ml.exe test.asm
    pause
    


  • Habs jetzt mit

    ml.exe /c test.asm
    

    probiert aber da kommt irgendso eine komische Wahrnung:

    warning A4023:with /coff switch, leading underscore required for start address : start
    

    Wie kriege ich das weg?



  • so jetzt mal ruhe mit den komische Fragen

    warning A4023:with /coff switch, leading underscore required for start address : start

    steht doch wortwörtlich da - dein "start" muss "_start" heissen



  • Sauber! Jetzt klappt alles 🙂 vielen Dank an euch alle!


Log in to reply