2016-05-17 24 views
1

verwenden Ich habe diese NASM Code:„Fehler: Parser: Anweisung erwartet“, wenn ich „org 0x0100“ Richtlinie

Beachten Sie, dass dies der ursprüngliche Code ist mein erster Fehler vor Korrektur (siehe bearbeiten unten):

[org 0x0100] 
     jmp start 
Numbers: dw 10, 40, 20, 14, 19, 13, 50, 6, 60, 14 
swap: db 0 
start: mov bx, 0               
     mov byte [swap], 0 
loop1: mov ax, [Numbers+bx]                
     cmp ax, [Numbers+bx+2]         
     jle noswap                
     mov dx, [Numbers+bx+2]         
     mov [Numbers+bx+2], ax         
     mov [Numbers+bx], dx           
     mov byte [swap], 1            
noswap: add bx, 2                 
     cmp bx, 18                
     jne loop1                 
     mov ax, 0x4c00               
     int 0x21 

ich diesen Befehl bin mit montieren:

nasm -f elf Max.asm 

ich diesen Fehler:

error: unrecognized directive org

Warum bekomme ich diesen Fehler, und wie kann ich es beheben?

EDIT: Nachdem die Klammern um die org Anweisung entfernen, wie in den Kommentaren vorgeschlagen, ich bin jetzt immer diese Fehlermeldung statt:

Max.asm:1: error: parser: instruction expected

+1

Sollte 'org 0x0100' sein wie im [Handbuch] (http://www.nasm.us/xdoc/2.11.08/html/nasmdoc7.html#section-7.1.1) (dh keine Klammern) . Das nächste Mal bitte nicht den Code als Bild eingeben. Ich VTC als Tippfehler. – Jester

+0

entfernte Klammern, aber jetzt bekam diese Max.asm: 1: Fehler: Parser: Anweisung erwartet und Entschuldigung für das Posting Bild :) –

+1

Beachten Sie, dass 'org' nicht mit' elf' Format funktioniert. Wenn Sie ein Linux-Programm erstellen möchten, löschen Sie die Zeile "org". Wenn Sie beabsichtigen, ein DOS-Programm zu erstellen, entfernen Sie die "-f elf". – Jester

Antwort

0

Die Richtlinie stammen teilt dem Assembler alle Offsets für Daten zu initialisieren und Code im Programm vom angegebenen Wert.

org 0x0100 wird verwendet, wenn kleine (normalerweise .COM-Dateien) DOS-Programme geschrieben werden, um die PSP(Program Statement Prefix) zu kompensieren.

Wenn Sie unter Linux arbeiten, hat es keinen Sinn, die Anweisung orginate hinzuzufügen.

nasm -f bin max.asm

wird funktionieren, aber dann kann es nur in DOSBOX ausgeführt werden.