1) .186, .286, .386, .486, .586 и т.п. - команды для указания разрешенных команд.
Полагаю, что Вы в курсе, что у каждого нового поколения процессоров добавились команды.
В данном случае, я указал .286, чтобы было возможно использовать push <число>, впрочем ,достаточно было и .186
2) Кстати, да, лучше использовать @DATA. Почему? Сейчас объясню.
Объявление .data приводит к организации сегмента с именем _DATA (инициированные данные - данные будут в коде программы)
Объявление .data? приводит к организации сегмента с именем _BSS (неинициированные данные - данных в коде нет!)
Кроме того, эти два сегмента объединяются в группу с именем @DATA
И чтобы можно было адресовать оба сегмента, лучше использовать имя @DATA
3) команда ASSUME указывает ассемблеру, с какими сегментами связаны сегментные регистры.
4) _TEXT - имя сегмента кода
5) dw - резервирование слова (data word) или два байта в памяти
еще есть db (data byte), dd (data double word) и другие...
6) equ - от слова equivalent, т.е. эквивалент
Используется, чтобы дать имя какому-либо числу. Например,
num equ 107) ($-a)/2 Тут надо уяснить несколько моментов:
а) $ в данном случае обозначает текущий адрес
б) $-a - разность в байтах между текущим адресом и адресом
aв) ($-a)/2 - разделив на 2, получаем число слов
г) len_a equ ($-a)/2 - len_a - это, фактически, константа, равная числу слов
8) xchg, test, sub, shl, mul - у-у-у, как все запущено....
![](https://rfpro.ru/images/smiles/4.gif)
Команды асссемблера надо знать...
В двух словах:
xchg - обмен содержимым операндов,
test - фактически and, но без смены содержимого операнда, только воздействие на флаги
sub - вычитание
shl - сдвиг влево на указанное число бит
mul - умножить аккумулятор на указанный операнд
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен