Для того, чтобы программировать на Assembler, необходимо:
Программа MASM_v9.0 или MASM_v10.0
Отладчик, например: OLLYDBG.EXE
В установленном месте, где находится программа MASM, создаете файл: aaa.bat
Я выбрал такое название (aaa.bat) для того, чтобы она была в самом верху. И вы могли всегда его видеть. В этом aaa.bat вносите такую информацию:
ml /c /coff "work.asm"
link /SUBSYSTEM:CONSOLE "work.obj"
work.asm - это имя программы, которую нужно компилировать. После ввода этой информации и сохранения можно приступать к программированию.
Ассемблер имеет:
- директиву определения типа микропроцессора,
-
метку начала программы,
- тело программы,
-
метку окончания программы
В языке Ассемблер есть переменые разных типов: знаковые и беззнаковые форматы типов Shortlnt (signed char), Byte (unsigned char), Integer (int), Word (unsigned int) и т. д.
Напишем программу вычисления выражения: a – e/b – de, где:
a = 5;
b = 27;
c = 86;
е = 1986;
d = 1112;
и сохраним ее там же, где и aaa.bat: work.asm. Если мы хотил откомпилировать другую программу, то нужно в aaa.bat изменить имя файлов, т. е. вместо work заменить на ... имя. И сохранить его. Если программа не содержит синтаксические ошибки, то должен получиться файл с расширением exe.
Программа:
.686 ; директива определения типа микропроцессора
.model flat,stdcall ; задание линейной модели памяти
; но соглашения ОС Windows
.data ; директива определения данных
_a dw 5 ; запись в 16-разрядный амбарчик памяти с именем _а числа 5
_b dw 27 ; запись _b = 16h
_c dw 86 ; запись _c = 56h
_e dw 1986 ; запись _e = 7c2h
_d dw 1112 ; запись _d = 458
res dw 0 ; резервирование памяти для сохранения переменной res
.code ; директива начала сегмента команд
start:
mov edx,0 ; очистка регистров
mov ebx,0
mov ecx,0
mov ах,_e ; в регистр ах заносим число _e = 7c2h
mul _d ; умножаем _e на _d
SHL edx,16 ; делаем здвиг на 16
mov dx,ax
push edx ; бросаем значение в стек
mov edx,0
mov ах,_e
mov cx,_b
div cx ; делим ах на cx
pop ecx ; достаем из стека значене
sub ecx,eax ; отнимает
mov ах,_a
sub eax,ecx
mov res, eax
ret ; возвращение управления ОС
end start ; окончание программы с именем _start
Результат работы программы:

как мы видим, комментарии ставятся после точки с запятой.
mov куда, откуда - это команда перевылки
mul _d - это команда умнжения регистра ax на _d. Результат попадает в ax
shl edx,16 - команда здвига на 16 разрядов
div cx - команда деления ах на cx. Результат попадает в ax
pop ecx - команда достает из стека значене
sub ecx,eax - команда отнимает значение ecx - eax. Результат попадает в ecx