Professional Documents
Culture Documents
Асемблер 2 модуль
Асемблер 2 модуль
1. Охарактеризуйте арифметичні
команди: ADD, SUB, INC.
ADD - підсумовує(додає) два операнди, поміщаючи результат в
перший операнд
(одержувач).
2. Охарактеризуйте арифметичні
команди: DEC, MUL, IMUL.
DEC - зменшує операнд на 1, що не впливаючи на прапорець
переносу.
4. Охарактеризуйте арифметичні
команди: CMP, ADC, SBB.
CMP - аналогічна команді SUB, але не зберігає результат.
Команда порівнює два числа для подальшого умовного переходу.
Призначення: порівняння
5. Охарактеризуйте команди
перетворення даних: MOVSX, MOVZX, CBW.
MOVSX - копіює вміст даного операнда в більший за розміром
регістр отримувача даних, знак залишається за даним операндом.
образами.
Встановлює прапор CF в 1.
Команда: CLC
• Процесор: 8086
Скидає прапор CF в 0.
Команда: CMC
• Процесор: 8086
Команда: STD
• Процесор: 8086
• Процесор: 8086
Команда: LAHF
• Процесор: 8086
(біт 7), ZF (біт 6), AF (біт 4), PF (біт 2) і CF (біт 0). Біт 1
встановлюється в 1,
біти 3 і 5 - в 0.
Команда: SAHF
• Процесор: 8086
змінюються.
Команда: PUSHF
• Процесор: 8086
• Команда: PUSHFD
• Процесор: 80386
• Процесор: 8086
• Команда: POPFD
• Процесор: 80386
Команда: CLI
• Процесор: 8086
<IOPL).
• Команда: STI
• Процесор: 8086
• Команда: SALC
• Процесор: 8086
Зазвичай операнди можуть мати будь-який розмір (байт, слово або подвійне
слово). У більшості команд з декількома операндами всі операнди мають однаковий
розмір.
К примеру:
mov ax,0000h
mov ds,ax
К примеру:
data segment
code segment
Лічильник адреси
mov al,1
Оператори зсуву:
Цим операндом може бути або безпосереднє значення, або регістр CL.
Схема виконання операції:
Всі біти операнда зсуваються вправо (від старших бітів до молодших).
Висунутий біт стає значенням прапора CF. Старший біт отримує нульове
значення. Ця операція повторюється кілька разів, якщо другий операнд
більше одиниці. Логічний зсув вправо можна використовувати для поділу
цілих чисел без знака за модулем 2, причому зсув працює швидше, ніж
команда ділення DIV. Приклад:
shr byte [bx], cl; Лог. зсув байта за адресою BX на СL біт вправо shr cl, 4;
CL = CL / 16 (для числа без знака)
sal dx, 1;
sal[x],2; x=x*4
порівняння:
Порівняння AL і 5
je m1; перехід на m1
оператор Умова
eq ==
ne! =
lt <
le <=
gt >
ge > =
L1 equ 10010011
...
mov al, L1
наприклад,
str1 db «Привіт», 0
...
; From DS
ім'я групи.
Наприклад:
int 21h
Тепер замість імені m1 компілятор всюди буде підставляти адреса комади mov
ax, 4C00h. Можна оголошувати мітку на порожній рядок перед командою:
exit_app:
int 21h
Ім'я мітки може містити лише латинські літери, цифри та символи підкреслення,
але має починатися з літери. Ім'я мітки повинно бути унікальним. Як ім'я мітки можна
використовувати директиви і ключові слова компілятора, назви команд і регістрів (в
цьому випадку FASM покаже повідомлення про помилку). FASM розрізняє регістр
символів в іменах міток. Можна також оголошувати кілька міток на одну адресу.
Наприклад:
no_error:
exit_app:
m1: mov ax, 4C00h
біта.
3. Індекс. Як і в базової адресації, для утворення ефективної адреси
shr byte [bx], cl; Лог. зсув байта за адресою BX на СL біт вправо
sal [x], 2; x = x * 4
Наприклад:
mas dd 1,2,3,4,5
Наприклад:
mas dw 0,1,2,3,4,5
4 на 4 (i=0...3, j = 0...3):
23 04 05 67
05 06 07 99
67 08 09 23
87 09 00 08
обнулення
.data
mas db
23,4,5,67,5,6,7,99,67,8,9,23,87,9,0,8
i=2
j=3
.code
...
mov si,4*1*i
mov di,j
; DI - адреса рядка
print_str:
push ax
pop ax
ret
print_endline:
push di
mov di,
pop di