русс | укр

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

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


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


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

Введення в мова Асемблера

Для того, щоб програмувати на 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

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

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


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