- •Теоретичні відомості
- •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 ).
- •Команди обробки символьних рядків
Розв’язування задач за тематикою заняття
Задача 1. Написати програму обчислення виразу :
f=a*b-c-d%a+c/b+(a*d)/c
де a = 21, b = -30, c = 478, d =1347.
Розв’язання.
Data Segment para 'Data'
a db 21
b db -30
c dw 478
d dw 1347
f dw 0
Data Ends
Code Segment para 'Code'
Assume cs:Code,ds:Data
Main Proc far
push DS
sub AX,AX
push AX
mov AX,Data
mov DS,AX
mov ES,AX
mov AL,A ; Завантажити А в регістр AL.
imul b ;(AL)*B -> (AX) .
sub AX,C ; AX-C -> AX.
mov word ptr f,AX ; Зберегти AX в F. F=A*B-C.
mov AL,a ; Завантажити А в регістр AL. F=F-D % A .
cmp AL,0 ; Чи в AL не 0, щоб не ділити на 0.
je ErorrExit ; Якщо AL=0, то вхід з програми.
cbw ; Розширити вміст AL до слова AX.
mov BX,AX ; AX -> BX.
mov AX,word ptr d ; AX <- D.
cwd ; Розширити вміст AX до подвійного слова.
idiv BX ; (DX,AX)/BX -> результат у AX, остачу в DX.
sub word ptr f,DX ; F=F-остача від ділення D/A
jo ErorrExit ; Якщо переповнення, то вхід з програми.
mov AL,b ; F=F+C/B.
cmp AL,0 ; Чи в AL не 0, щоб не ділити на 0.
je ErorrExit ; Якщо AL=0 вихід з програми.
cbw ; Розширити вміст AL до слова AX.
mov BX,AX ; AX -> BX.
mov AX,c ; AX= C
cwd ; Розширити вміст AX до подвійного слова.
idiv BX ;(DX,AX)/BX -> результат у AX.
add word ptr f,AX
jo ErorrExit ; Якщо переповнення, то вхід з програми.
mov AL,a ; F=F+(A*D)/C.
cbw ; AL <- A, AL -> AX.
imul word ptr d ; (AX)*D -> (DX,AX).
cmp DX,c ; C ? ( DX).
jg ErorrExit ; Якщо C<(DX),то переповнення і вхід з програми.
idiv c ; (DX,AX)/BX -> результат у AX.
add word ptr f,AX ; F=F+(A*D)/C.
ErorrExit: nop
ret
Endp
Задача 2. Задана послідовність цілих чисел . Обчислити :
.
Розв’язання.
Data Segment para 'Data'
n dw 10
a db 13,6,5,4,7 ,5,7,4,10,8
min db ?
summa dw ?
р dw ?
Data Ends
Code Segment para 'Code'
Assume cs:Code,ds:Data
Main Proc far
push DS
sub AX,AX
push AX
mov AX,Data
mov DS,AX
mov CX,n ; Кількість елементів масиву А завантажити у CX.
lea SI,a ; Завантаження відносної адреси масиву А.
mov AL,[SI] ; Завантаження першого елементу масиву А в AL.
inc SI ; Збільшити на 1 вміст регістра SI.
xor AH,AH ; Очистити старшу частину регістра AX.
mov DI,AX ; Регістр для накопичення суми членів послідовності.
mov BX,AX ; Регістр для мінімального члена послідовності.
dec CX ; Зменшити на 1 вміст регістра CX.
je to_end ; Перехід, якщо СХ = 0.
s11: mov [SI],AL ; Завантаження елемента масиву А в AL.
inc SI ; Збільшити на 1 вміст регістра SI.
add DI,AX ; Сумування елемента масиву А.
cmp BL,AL ; Пошук найменшого елементу масиву А.
jb s111
mov BX,AX
s111: loop s11 ; Цикл.
mov AX,DI ; Суму елементів записати в регістр AX.
cwd ; Розширити вміст AX до (DX,AX).
div BX ; Суму елементів масиву на мінімальний елемент.
mov р,AX ; Результат присвоїти змінній Р.
ret
to_end: mov AX,1 ; Якщо масив складається з одного елементу то
mov р,AX ; змінній Р присвоїти 1.
ret
Endp