Для того, щоб програмувати на 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 - це ім'я програми, яку потрібно компілювати. Після введення цієї інформації і збереження можна приступати до програмування.
Асемблер має:
- директиву визначення типу мікропроцесора,
-
пметку початку програми,
- тіло програми,
-
пметку закінчення програми
Напишемо програму обчислення виразу: 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 ; повернення управління ОС
start end ; закінчення програми з ім'ям _start
Результат роботи програми:

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