русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Зовнішні процедури в мовою Асемблер. Процедури в Assembler

Приклад: Написати програму на асемблері обчислення виразів: 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 ; директива закінчення програми


Результат роботи програми


Переглядів: 4556

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн