Программист онлайн. Полезные тулзы для девелопера в вебе. Инструменты для программирования AVR микроконтроллеров в Linux

Для Windows Phone 19.04.2019
Для Windows Phone

Альтернативный компилятор ассемблера для х86. Ассемблер написан сам на себе имеет очень простой синтаксис. Позволяет создавать.com файл для ДОС. Поддерживает 32 разрядные режимы адресации и данных. Доступен вместе с исходным кодом.

Описание ассемблера.

  • Ассемблер работает из командной строки. Входной файл должен иметь любое имя с расширением:
    • .xxx или любым другим - значения не имеет, главное чтобы оно было

    Запуск на компиляцию:asm filename.ext. Результат - сообщение об ошибке в строке с № или filename.com / filename.obj

  • Ассемблер создает только*.com файлы, *.exe не созжаются. Конечно.com файл имеет ограничение 64 кб. кода, однако вряд ли кто-нибудь напишет на ассемблере больше. Т.к. создаются только*.com файлы не надо думать о сегментах. Нет у ассемблера и компоновщика. Он просто не нужен.
  • Ассемблер позволяет создавать модули*.obj , которые потом можно внедрять в код программ, как внешние подключаемые модули – подпрограммы.
  • Команды можно записывать в строчку разделяя их";"
  • Разделительные пробелы между командами и операндами вставлятьНЕ обязательно. Система команд х86 позволяет интерпретировать их и без пробелов.
  • Поскольку командаMOV встречается в программах на ассемблере наиболее часто ее имя писать не обязательно.
  • Регистр не имеет значения. Компилятор одинаково интерпретирует строки

    MOV AH,09
    movah,9
    aH,9

  • Ассемблер понимает 32 битные режимы адресации и автоматически вставляет префискы 32 битного адреса и данных, 66 и 67, когда это необходимо
  • Cистемa сообщения об ошибках довольно слабая. Сообщениеошибка в строке N следует понимать, какошибка в строке N +/- 1.
  • Команды математического сопроцессораНЕ поддерживаются .
  • * Коментарии вставляются между парными*
  • Основными синтаксическими элементами являются символы"=" и " () "
    • =Label= Вводит меку адреса.
    • (Label) вставляет значение адреса в код.

    Метки чувствительны к регистру.

Дальше рассмотрим пример HelloWorld .

* Кстати комментарии вставляются между парными звездочками
Пример1 "Hello World" выводит на экран надпись.*

JMPS(S)
=A1= "Hello World !"
=A2= 0A
=S= AX,B800;ES,AX;AX,3;INT10
CX,(A2-A1);SI,(A1);DI,500
AH,[(A2)]
=L= LODSB;STOSW;LOOP(L)
RET

Первая строка - это короткий переход к началу программы. Ассемблер располагает код и данные именно в том порядке, в котором вы их расположили в тексте.

JMP - кодирует длинный переход в пределах сегмента.
JMPS - короткий +/- 127 байт.
Со второй строкой все понятно. Третья строка:
По адресу (А2) в памяти ЭВМ размещается байт равный 0А.
Т.е.
Хотите зарезервировать в памяти байт - пищите так:
=vmode= 00 или =adr= 12
Надо выделить два байта пишите:
=X= 0000 или wo0
или
=Y=
wo something for example rd ptr 1234

Есть три ключевых слова определяющих размер.

  • by- BYTE (8)
  • wo - WORD (16)
  • dw - DWORD (32)

ассемблер проигнорирует все что встретит между этими буквами и первой цифрой.
Нужен массив из двойных слов - пожалуйста:
=array= dw0;12345678;01234;dw12;...
Желаете иметь таблицу адресов чего-нибудь - no problem:
=mytable= (adr1);(adr2);(adr3);dword(adr4)...
C адресами возможны следующие манипуляции:
CX,(A2-A1) * В CX получается длина строки(см пример)*
jmps (adr)+2;
mov ,(adr3-adr4)-5
В 386 процессоре появились команды длинного условного перехода. Отличаются они от коротких так:
JZ (adr) - короткий
JZ
_N (adr) - длинный.
Префиксы "66" и "67" вставляются автоматически.
Префиксы сегментов надо использовать в следующем виде:
ES:
LODSB
или
ES:;LODSB
SS:;MOVAX,}

Рекомендуем почитать

Наверх