2016-11-18 18 views
0

Этот период времени я пытаюсь изучить сборку. Я использовал команду ms-dos «debug» для создания простых программ, но теперь хочу делать большие программы. Я скачал NASM и попытался собрать следующий код:Ошибка Nasm; неопределенные этикетки

.model small 
.code 
    mov ax, bx 

Но в этикетках .MODEL и .Code он говорит, что они ар не определено. Я попробовал это еще раз в нескольких других сборщиках, и произошло то же самое. Может ли кто-нибудь помочь мне с этой проблемой? Я использую для Windows 10.

+3

Ваш синтаксис (директивы) больше похож на MASM, чем NASM. – zx485

+0

@ zx485 как будет синтаксис в nasm? –

+0

Я подозреваю, что вы все еще делаете 16-битный код. Вам не обязательно это делать, вы можете написать 32 или 64-битный код в asm, который может запускаться изначально на 64-разрядной Windows и использовать обычные библиотеки/Win32 API. И вы можете писать функции, которые вы можете вызывать из обычных программ на C++. Поэтому вам не нужно использовать DOSBOX или что-то в этом роде. См. Некоторые ссылки в [x86 tag wiki] (http://stackoverflow.com/tags/x86/info). –

ответ

2

NASM синтаксис для вашей программы:

segment code 
..start: 
mov ax, bx 

специальный символ ..start отмечает точку входа в программу. Here хорошее руководство по написанию 16-битный кода в NASM

Что касается .model small - нет модели памяти в NASM, citate из документации на http://www.nasm.us/doc/nasmdoc2.html:

NASM также не имеет никаких директив для поддержки различные 16-разрядные модели памяти . Программист должен отслеживать, какие функции предполагается вызывать с дальним вызовом и который с близким вызовом, и несет ответственность за правильную форму инструкции RET (RETN или RETF; NASM принимает RET как альтернативная форма для RETN); in Кроме того, программист отвечает за кодирование CALL FAR инструкций при необходимости при вызове внешних функций и должен также отслеживать, какие внешние определения переменных далеки, и , которые находятся рядом.

И я предлагаю вам прочитать Nasm documentation - есть ответы на большинство ваших вопросов.