русс | укр

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

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


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


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

Макроси в Асемблері. Приклади завдань

Приклад: Написати програму з використанням макросів для обчислення одного з виразів без попереднього математичного спрощення операцій:
2x - 3 + 8(2x -3);

Текст програми:

.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам'яті
; але угоди ОС Windows
option casemap:none ; відміну малих і великих літер
includelib \masm32\lib\kernel32.lib
ExitProcess proto:dword ; прототип API-функції
mSubB macro x,b ; макрос з ім'ям mSubB
mov al,x
shl al,1 ; занос змінної а
sub al,b ; віднімання а - b
mov res1,al ;; збереження результату в пам'яті
endm ; закінчення макросу
.data ; директива визначення дані
x 6 db ; збереження в комірці пам'яті, розміром байт операнда 6
b db 3
res1 db 0 ; резервування пам'яті для результату res1
res2 dw 0 ; резервування пам'яті для результату res2
.code ; директива початку програми
_start: ; мітка початку програми з ім'ям _start
xor eax,eax
xor ebx,ebx
mSubB [x][b] ; виклик макросу
mov al,8
mov bl,res1
mul bl
mov bl,al
mSubB [x][b] ; виклик макросу
mov al,res1 ; занос із розширенням розрядності
add bx,ax
mov res2,bx ; збереження остаточного результату
invoke ExitProcess, 0 ; повернення управління ОС Windows
end _start ; директива закінчення програми з ім'ям _start

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


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

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


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