Professional Documents
Culture Documents
Модуль Асемблер
Модуль Асемблер
-
7. Вкажіть та охарактеризуйте різновидності низькорівневих мов програмування.
В історії розвитку програмування існували три різновидності низькорівневих
мов, послідовно змінили один одного:
• машинний код;
• мнемокод;
• асемблер.
У машинних кодах програма представляється у вигляді послідовності чисел, що
є кодами команд процесора, адресами оперативної пам’яті, номерами регістрів
процесора і зовнішніх пристроїв і т. д.
Мнемокоди замість чисел дозволяли використовувати мнемонічні (символьні)
імена, відображаючі сенс виконуваної команди.
Асемблер відрізняється від свого попередника - мнемокода великим набором
директив транслятора, що істотно спрощують процес кодування програми, в першу
чергу директивами оформлення програми у вигляді логічно закінчених елементів і
макрозасобів.
8. Вкажіть, які типи даних апаратно підтримує мікропроцесор.
1) Байт.
2) Слово = 2 байти = 16 біт.
3) Подвійне слово = 2 слова = 4 байти = 32 біта.
4) Вчетверо збільшене слово = 2 подвійні слова = 4 слова = 8 байт = 64
біта.
5) Подвійне вчетверо збільшене слово = 2 вчетверо збільшені слова = 4
подвійні слова =8 слів = 16 байт = 128 бітів.
9. Вкажіть, що собою представляє шістнадцяткова система числення.
Головна незручність двійковій системи числення - це розміри чисел, з якими
доводиться звертатися. На практиці з двійковими числами працюють, тільки якщо
необхідно стежити за значеннями окремих біт, а коли розміри змінних перевищують
хоча б чотири біта, використовується шістнадцяткова система. Ця система хороша
тим, що вона більш компактна, компактніше десяткової, і тим, що переклад в
двійкову систему і назад відбувається дуже легко. У шістнадцятковій системі
використовується 16 «цифр»: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F, і номер позиції
цифри в числі відповідає ступеню, в яку треба звести число 16, так що:
96h = 9 * 16 + 6 = 150
Перевід в двійкову систему і назад здійснюється вкрай просто - замість кожної
шістнадцяткової цифри підставляють відповідне чотиризначне двійкове число:
9h = 1001b, 6h = 0110b, 96h = 10010110b
У асемблерних програмах при записі чисел, що починаються з А, В, С, D, E, F, на
початку приписується цифра 0, щоб не можна було сплутати таке число з назвою
змінної або іншим ідентифікатором. Після шістнадцяткових чисел ставиться буква «h».
Якщо рядок в програмі один, то вона повинна містити директиву асемблера end,
завершальну процесу трансляції. Синтаксис рядка схематично може бути зображений
у вигляді діаграми.
34. Вкажіть, яким чином описується синтаксис коментаря та команди.
2 МОДУЛЬ
Перелік питань на модульний контроль №2 з дисципліни
1. Охарактеризуйте арифметичні
команди: ADD, SUB, INC.
ADD - підсумовує(додає) два операнди, поміщаючи результат в
перший операнд
(одержувач).
2. Охарактеризуйте арифметичні
команди: DEC, MUL, IMUL.
DEC - зменшує операнд на 1, що не впливаючи на прапорець
переносу.
3. Охарактеризуйте арифметичні
команди: DIV, IDIV, NEG.
DIV – здійснює розподіл цілих беззнакових чисел.
Призначення: Цілочисельне ділення без знака
4. Охарактеризуйте арифметичні
команди: CMP, ADC, SBB.
CMP - аналогічна команді SUB, але не зберігає результат.
Команда порівнює два числа для подальшого умовного переходу.
Призначення: порівняння
5. Охарактеризуйте команди
перетворення даних: MOVSX, MOVZX, CBW.
MOVSX - копіює вміст даного операнда в більший за розміром
регістр отримувача даних, знак залишається за даним операндом.
6. Охарактеризуйте команди
перетворення даних: CWDE, CWD, CDQ.
CWDE - виконує перетворення значення ах до розміру подвійного
слова і поміщає його в еах, при цьому вільні старші біти еах заповнюються
знаковим бітом ах.
CWD - виконує перетворення значення ах до розміру подвійного
слова і поміщає його в пару dx:ax, при цьому вільні біти dх
заповнюються знаковим бітом ах.
образами.
• Процесор: 8086
Встановлює прапор CF в 1.
Команда: CLC
• Процесор: 8086
Скидає прапор CF в 0.
Команда: CMC
• Процесор: 8086
Команда: STD
• Процесор: 8086
• Процесор: 8086
Команда: LAHF
• Процесор: 8086
біти 3 і 5 - в 0.
Команда: SAHF
• Процесор: 8086
змінюються.
Команда: PUSHF
• Процесор: 8086
• Команда: PUSHFD
• Процесор: 80386
• Процесор: 8086
• Команда: POPFD
• Процесор: 80386
Команда: CLI
• Процесор: 8086
Скидає прапор IF в 0. Після виконання цієї команди процесор
ігнорує всі
<IOPL).
• Команда: STI
• Процесор: 8086
• Команда: SALC
• Процесор: 8086
Зазвичай операнди можуть мати будь-який розмір (байт, слово або подвійне
слово). У більшості команд з декількома операндами всі операнди мають однаковий
розмір.
К примеру:
mov ax,0000h
mov ds,ax
Переміщувальні
К примеру:
data segment
code segment
Лічильник адреси
mov al,1
Оператори зсуву:
Цим операндом може бути або безпосереднє значення, або регістр CL.
Схема виконання операції:
shr byte [bx], cl; Лог. зсув байта за адресою BX на СL біт вправо shr cl, 4;
CL = CL / 16 (для числа без знака)
shl dx, 1;
sal dx, 1;
sal[x],2; x=x*4
порівняння:
Порівняння AL і 5
je m1; перехід на m1
Якщо значення size більше або дорівнює 50, то результат в аl дорівнює 1, в
іншому випадку - 0. Команда cmp порівнює значення аl з нулем і
встановлює відповідні прапори в EFLAGS. Команда je на основі аналізу
цих прапорів передає або залишають поза передачею управління на мітку
m1.
оператор Умова
eq ==
ne! =
lt <
le <=
gt >
ge > =
L1 equ 10010011
...
mov al, L1
наприклад,
str1 db «Привіт», 0
...
; From DS
Ця форма також може використовуватися для перевизначення
атрибута типу змінної або мітки. Якщо, наприклад, ви хочете отримати
доступ до вже визначеної змінної word у вигляді двох байтів, ви можете
закодувати наступне:
ім'я групи.
Наприклад:
int 21h
Тепер замість імені m1 компілятор всюди буде підставляти адреса комади mov
ax, 4C00h. Можна оголошувати мітку на порожній рядок перед командою:
exit_app:
int 21h
Ім'я мітки може містити лише латинські літери, цифри та символи підкреслення,
але має починатися з літери. Ім'я мітки повинно бути унікальним. Як ім'я мітки можна
використовувати директиви і ключові слова компілятора, назви команд і регістрів (в
цьому випадку FASM покаже повідомлення про помилку). FASM розрізняє регістр
символів в іменах міток. Можна також оголошувати кілька міток на одну адресу.
Наприклад:
no_error:
exit_app:
біта.
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