Нежелательные символы на консоли при выполнении кода сборки - PullRequest
0 голосов
/ 25 июня 2011

Начинающий программировать на ассемблере для x86. У меня есть простой asm-файл, который я собираю, используя версию nasm - NASM версии 2.10rc6, скомпилированную 6 июня 2011 года, для Windows (у меня Windows 64-битная версия Windowa-7). NASM можно загрузить с здесь (nasm-2.10rc6-win32.zip).

ORG 100
USE16

    mov ah, 09
    mov dx, msg
    int 21h

    mov ah, 01
    int 21h
    mov ah, 4ch
    int 21h

    msg db 'Hello assembly', 0Ah, '$'

Затем я собираюсь с помощью команды -

nasm -f bin hello.asm -o hello.com

Затем я запускаю сгенерированный исполняемый файл hello.com, используя Dosbox (эмулятор Dos для 64-битной ОС Windows-7). Когда он запускает вывод, выводимый на консоль, перед ним выводится строка «Hello Assembly» плюс несколько ненужных символов / управляющих символов, как показано ниже:

enter image description here

В чем причина этого. Что-то не так в коде?

Что мне нужно сделать, чтобы это исправить?

РЕДАКТИРОВАТЬ: Когда я пытался дать опцию -f для NASM для генерации определенного типа исполняемого вывода, например, Win32 или Win64 выводит сообщение об ошибке:

nasm -f win64 hello.asm -o hello.com

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

Чего это ожидает? Как я могу создать исполняемый файл win32 / win64, используя nasm? или в этом отношении любой другой исполняемый файл, такой как elf32 / coff, который, как говорит nasm, поддерживает?

1 Ответ

3 голосов
/ 25 июня 2011

Проблема:

ORG 100

которое должно быть:

ORG 100h

Двоичный файл - .COM, поэтому он будет загружаться и работать на 100h независимо; ошибка означает, что адрес, вычисленный ассемблером для msg, будет на 156 байт раньше, чем должен быть, следовательно, дополнительный мусор.

Директива ORG предназначена только для формата bin. Другие исполняемые форматы имеют разделы (или сегменты). (См. Раздел «Форматы вывода» руководства NASM .)

...