- •Теоретичні відомості
- •1. Структура простої програми мовою асемблера. Формат кодування програми.
- •2. Основні директиви : segment , end, ends, proc, endp, assume.
- •3. Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.
- •4. Трансляція програми. Опції компіляції та загальна характеристика.
- •6. Застосування програми налагодження для пошуку помилок.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •Теоретичні відомості
- •1. Директиви визначення даних.
- •2. Директива повторення dup.
- •3. Сталі.
- •5. Представлення в пам’яті цілих чисел.
- •6. Команда пересилки даних mov.
- •7. Команди двійкового додавання та віднімання.
- •Команда зміни знаку операнда neg
- •8. Обчислення цілих арифметичних виразів.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •1. Команда безумовного переходу jmp. Типи адресів переходу short,near та far.
- •2. Команди організації циклів ( loop,loopn,loopnz). Команда loop. Керування циклом за ecx/cx.
- •Керування циклом за ecx/cx із врахуванням ознаки zf
- •3. Команди умовних переходів.
- •5. Команда lea
- •Команда роботи зі стеком push та pop
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Логічні операції та операції зсувів.
- •2. Команди логічних операцій (and, test, or, xor, not).
- •3. Команди зсувів та циклічних зсувів.
- •Команди зсувів (sal, sar, shl,shr)
- •Команда зсуву логічного операнда вправо – shr
- •3.2 Команди циклічних зсувів (rol, ror ,rcl, rcr). Циклічний зсув операнда вліво - rol
- •Циклічний зсув операнда вправо ror
- •Циклічний зсув операнда вліво через ознаку переносу - rcl
- •Циклічний зсув операнда вправо через ознаку переносу – rcr
- •Бітові маски.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •1. Множення цілих чисел
- •2. Ділення цілих чисел
- •3. Перетворення в регістрах
- •Алгоритм введення–виведення цілих чисел
- •Виведення цілих чисел.
- •Введення цілих чисел.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •Особливості команд обробки рядків.
- •Ознака df. Команди зміни ознаки ( cld, std ).
- •Префікси повторення( rep, repe, repz, repne, repze ).
- •Команди обробки символьних рядків
Команда зміни знаку операнда neg
Схема команди: NEG джерело Алгоритм роботи:
виконати віднімання 0 – джерело і помістити результат на місце джерела;
якщо джерело=0, те його значення не міняється.
Призначення: зміна знака (одержання двійкового доповнення) джерела.
Стан ознак після виконання команди: якщо результат нуль CF встановлюються 0 та 1 в противному випадку, значення OF, SF, ZF, AF та PF – залежить від результату роботи команди .
Команда порівняння – СМР.
Схема команди :СМР приймач, джерело
Призначення: порівняння операндів.
Алгоритм роботи: від операнда приймач віднімається операнд джерело, без збереження результату віднімання.
Стан ознак після виконання команди: За результатами команда змінює ознаки(в регістрі ознак) CF, PF, AF, ZF, SF та OF.
8. Обчислення цілих арифметичних виразів.
Програмування обчислення арифметичний виразів мовою асемблера у порівнянні з програмуванням виразів мовами вищого рівня є достатньо рутинним. З іншої сторони найбільш ефективний та оптимальний код обчислення арифметичний виразів можна запрограмувати за допомогою мови асемблера.
Розглянемо особливості програмування арифметичних виразів мовою асемблера:
По-перше, правильно задати формат команди та операнди приймач , та джерело якщо вони присутні. Формат визначає яким типами операндів можна користуватися в програмі, а також в який з операндів записується результат.
По-друге, задати тип операнда, який може бути визначений явно або неявно. Виникає необхідність визначати тип операнди, які знаходяться в пам’яті, а також тип безпосередніх операндів (сталих). Для операцій з двома операндами тип одного з операндів можна визначатися іншим. Явне завдання типу задається за допомогою операцій :
BYTE PTR – перетворення до типу байт
WORD PTR – перетворення до типу слово
DWORD PTR – перетворення до типу подвійне слово.
Наприклад.
inc WORD PTR a ; де a – комірка в сегменті даних.
dec BYTE PTR [SI] ; SI – зміщення в сегменті даних.
По-третє, при програмуванні арифметичних виразів необхідно враховувати стан ознак після виконання команд. Так яка при виконання арифметичних операцій можливе переповнення або зникнення порядку.
Розв’язування задач за тематикою заняття
Задача 1. Описати символьний рядок “Hello world !“.
Розв’язування. Описати символьний рядок можна такими способами
mystring db ‘ Hello world !‘
або
mystring db ‘ ‘,’H’,’e’,’l’,’l’,’o’,’ ‘,‘w’,’o’,’r’,’l’,’d’,’ ! ‘
Задача 2. Описати вектор, який складається з n (n=100) елементів розміром у подвійне слово із заданим початковим значенням A (A=250h).
Розв’язування.
N = 100 ; або N equ 100
A equ 250h ; або A = 250h
vector dd N Dup( A ).
Задача 3. Описати матрицю M (n*n), яка складається з елементів розміром у 8 байтів із заданим початковим значенням.
Розв’язування.
N = 10
ELEMENT = 12.45e4 ; або ELEMENT = 124500
M dq N * N Dup( ELEMENT ).
Задача 4. Знайти об’єктний код фрагмента сегмента даних у шістнацяткові системі числення
a dw 403fh
c dw 256
d dd 300
Розв’язування. Сталі 256 та 300 переведемо у шістнацяткову систему числення тобто
a dw 403fh
c dw 256 ; = 0100h
d dd 300 ; =0000012ch
В пам'яті ЕОМ дані розміром в слово і більше розміщуються по байтам в порядку зростання адресів та розрядів даних, об'єктний код у має вигляд :
3f 40 00 01 2c 01 00 00.
Задача 5. Написати процедуру для обчислення виразу :
a = ((a+1)+(c-d)+(d-1))+5-b,
де a= 657, b=265, c=738, d= 273.
Розв’язування.
Data Segment para 'code'
a dw 657
b dw 265
c dw 738
d dw 273
Data Ends
Code Segment para 'code'
Main Proc far
;.................... Основна програма.....................................
Main Endp
Calc Proc near ; Процедура обчислення виразу.
mov AX,a ; Записати в регістр AX число а.
inc AX ; Збільшити вміст регістра AX на 1.
mov CX,c ; Записати в регістр CX число с.
sub CX,d ; Відняти d від вмісту регістра CX
mov DX,d ; Записати в регістр DX число d.
dec DX ; Зменшити вміст регістра DX на 1.
add AX,CX ; Додати до вмісту регістра AX
add AX,DX ; вміст регістрів CX і DX.
add AX,5 ; Додати 5 до вмісту регістра AX.
sub AX,b ; Відняти b від вмісту регістра AX.
mov a,AX ; Записати вміст регістру AX в а.
ret ; Повернення з процедури.
Calc Endp ; Директива кінця процедури.
Code Ends Main