
- •Теоретичні відомості
- •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. Задано символьний рядок. Знайти перше найбільше за довжиною слово.
Розв’язування.
Data Segment para 'Data'
max = 100
string db ' Input string ? ','$'
st1 db ' First lagerst word ','$'
inputs label byte
maxs db max
nums db ?
strs db max dup(' ')
Data Ends
Code Segment para 'code'
Assume cs:Code,ds:Data,es:Data
include in&out.asm
Main Proc far
push DS
sub AX,AX
push AX
mov AX,Data
mov DS,AX
lea DX,string ; Завантаження відносної адреси повідомлення
call outstr ; Виведення на екран повідомлення.
call newline ; Переведення курсору на новий рядок.
lea DX,inputs ; Завантажити відносну адресу для введення рядка.
call inpstr ; Введення рядка.
lea SI,strs ; Завантаження відносної адреси введеного рядка.
mov DH,' ' ; Символ ‘ ‘ (пробіл) – у регістр DH.
mov AX,0 ; Довжина найбільшого слова.
sub BX,BX ; Довжина поточного слова.
sub CH,CH ; Очистити регістр CH.
mov CL,nums ; Кількість введених символів у регістр CL.
cmp CX,0 ; Перевірка : чи були введені символи.
jne m0 ; Перехід, якщо були введені символи.
ret ; Введених символів немає. Вихід з програми.
m0: cmp AX,BX ; Порівняння поточного виділеного слова з
jge m1 ; найдовшим. Якщо поточне слова довше, то
mov AX,BX ; його рахуємо найдовшим і зберігаємо його
mov DI,SI ; довжину у регістрі AX, а відносну адресу
sub DI,BX ; слова у регістрі DI.
m1: sub BX,BX ; Шукаємо наступне слово пропускаючи
cmp [SI],DH ; символи “пробіли”.
jne m3
inc SI
loop m1
cmp AX,0 ; Перевіряємо чи були слова.
jne m4 ; Слова були.
ret ; Слів не було. Вихід з програми.
m3: cmp [SI],DH ; Шукаємо довжину слова.
je m0
inc SI
inc BX ; В регістрі BX довжина слова.
loop m3
cmp AX,BX ; Останнє слово не найдовше?
jge m4
mov AX,BX
mov DI,SI
sub DI,BX
m4: mov CX,AX
call newline ; Перевід курсору на новий рядок.
m5: mov DL,[DI] ; Друк найдовшого слова.
call outchar
inc DI
loop m5
retf
Main Endp
Code Ends
End Main
Процедури з файлу in&out.asm
inchar proc near
mov ah,1
int 21h
ret ; inchar by al
inchar endp
outchar proc near ; outchar dl
mov ah,2
int 21h
ret
outchar endp
newline proc near
push ax
mov dl,0dh
call outchar
mov dl,0ah
call outchar
pop ax
ret
newline endp
outstr proc near ; outchar dx
mov ah,09h
int 21h
ret
outstr endp
inpstr proc near ; outchar dx
mov ah,0Ah
int 21h
ret
inpstr endp