Ассемблер.
Альтернативный компилятор ассемблера для х86. Ассемблер написан сам на себе
имеет очень простой синтаксис. Позволяет создавать .com файл для ДОС.
Поддерживает 32 разрядные режимы адресации и данных. Доступен вместе с исходным
кодом.
Описание ассемблера.
Дальше рассмотрим пример
Hello
World.
* Кстати
комментарии вставляются между парными звездочками
Пример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=
wosomething
for example rd ptr1234
Есть три ключевых слова определяющих размер. -
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 [bx+si+(a2-a1)+1234],(adr3-adr4)-5
В 386 процессоре появились команды длинного
условного перехода. Отличаются они от коротких так:
JZ (adr) - короткий
JZ_N (adr) -
длинный.
Префиксы "66" и "67" вставляются автоматически.
Префиксы сегментов надо использовать в следующем виде:
ES:
LODSB
или
ES:;LODSB
SS:;MOVAX,[ECX}
т.е. фактически префикс сегмента
воспринимается как однобайтная команда.
С префиксом REPZ и REPNZ все еще проще:
REPZ;MOVSB
или
REPNZ
STOSD
Вот и все.
IRET
|