Пример: Написать программу на ассемблере вычисления выражений: ab - c/d
где а =5;
b =27;
c = 86;
е =1986;
d =1112;
Текст программы
1 Главная программа
.386 ; директива определения типа микропроцессора
.model flat ; задание линейной модели памяти
option casemap:none
extern _abcd:proc ; указывание на внешнюю процедуру
public _a, _b,_c, _d ; доступ для других модулей
.data ; директива определения данные
_a dw 5 ; запись в 32-разрядный амбарчик с именем _а
_b dw 27
_c dw 86 ; запись в 32-разрядный амбарчик с именем _с
_d dw 1112 ; запись в 32-разрядный амбарчик с именем _d
_e dw 1986
_res dw 2 dup(0) ; переменная для сохранения результата
.code ; директива начала программы
_start: ; метка начала программы с именем start
call _abcd ; вызов процедуры
push EAX
mov _res[0],si ; запоминание дробной части в памяти
mov _res[4],di ; запоминание дробной части в памяти
;mov _res[8],cx ; запоминание дробной части в памяти
ret ; возвращение управления ОС
end _start ; директива окончания программы с именем start
2 Текст процедуры программы
.686 ; директива определения типа микропроцессора
.model flat ; задание линейной модели памяти
option casemap:none
public _abcd
extern _a:dword, _b:dword, _c:dword,_d:dword
.code ; директива начала программы
_abcd proc ; ab - c/d
mov eax,_a ; пересылка из памяти с именем _а в eax
mov ebx,_b ; пересылка из памяти с именем _b в ebx
mul ebx ; edx, eax := eax ? ebx
mov esi,eax
mov edi,edx
mov eax,_c
mov ebx,_d
xor edx,edx ; подготовление к делению
div ebx
mov ecx,0
sub ecx,edx ; вычитание мелкой части из целого числа
sbb esi,eax ; вычитание целой младшей части
sbb edi,0 ; вычитание позычки, если она есть
ret
_abcd endp
end ; директива окончания программы
Результат работы программы