- •Лабораторна робота 1.
- •1. Символи.
- •2 Представлення чисел у пам’яті пеом.
- •2.1 Цілі числа. Цілі числа без знака
- •2.2 Цілі числа зі знаком
- •3 Дійсні числа.
- •3.1 Представлення дійсних чисел у двійковому нормалізованому виді.
- •3.2 Машинні формати дійсних чисел
- •3.2.1. Формат 32 біти - float (або single)
- •3.2.2. Формат 64 біти - double
- •4. Завдання на лабораторну роботу.
- •5. Методичні вказівки з оформлення звіту
- •6. Рішення типового прикладу (без оцінки похибки перетворення)
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 2.
- •1. 3 Формати файлів, що виконуються, які підтримуються у fasm
- •2. Завдання на лабораторну роботу:
- •3. Методичні вказівки з оформлення звіту
- •4. Питання для самоперевірки.
- •Лабораторна робота 3.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1 Команди пересилання даних.
- •3.1.3 Операції зі стеком:
- •3.2 Робота із налагоджувачем OllyDbg.
- •3.2.2. Розглянемо основні команди меню OllyDbg.
- •4. Завдання на лабораторну роботу.
- •9. Література
- •Лабораторна робота 4.
- •3.2. Операції із прапорами процесора:
- •3.3 Команди розповсюдження знаку
- •4. Методичні вказівки з оформлення звіту
- •5. Рішення типового прикладу.
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 5.
- •3.2. Команди зсуву
- •3.3 Команди сканування бітів
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 6.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні зведення.
- •3.1. Команди безумовної передачі управління
- •3.1.1. Команда безумовного переходу jmp
- •3.2. Команди умовної передачі управління Jcc
- •3.2.1. Перша група команд умовного переходу.
- •3.2.2 Друга група команд умовного переходу.
- •3.2.3. Третя група команд умовного переходу.
- •3.3. Команди управління циклами looPx
- •3.3.1. Команда loop — перехід по лічильнику
- •3.3.2. Команда loope (loopz) перехід по лічильнику і якщо дорівнює
- •3.3.3. Команда loopne (loopnz) перехід по лічильнику і якщо не дорівнює
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу.
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 7.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1. Реалізація основних операцій по обробці масивів мовою асемблера.
- •4. Методичні вказівки з оформлення звіту
- •5. Критерії оцінювання.
- •6. Завдання на лабораторну роботу.
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 8.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •4. Приклади виконання деяких типових задач обробки рядків
- •4. Завдання на лабораторну роботу.
- •Лабораторна робота 9.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролеві.
- •3. Короткі теоретичні відомості
- •3.1. Принципи організації підпрограм
- •3.2. Параметри процедур і значення, що повертаються
- •3.3. Використання загальних перемінних у процедурах
- •3.4. Особливості fasm по організації підпрограм (Windows - додатка).
- •Лабораторна работа 10-11.
- •3.1.2. Засобу bios
- •3.2. Уведення з клавіатури
Лабораторна работа 10-11.
Тема. Введення/виведення даних.
Ціль: Ознайомитися з методами введення даних з клавіатури та методами виведення даних на екран.
1. Підготовка до роботи.
з методами введення даних з клавіатури та методами виведення даних на екран, котрі наявні у BIOS та DOS [1, стор. 319-351], [3, стор. 580-594, 651-661].
2. Питання для самоконтролю.
Что такое прерывание?
Зачеп необходимы прерывания?
Чем отличаются прерывания BIOS и DOS?
3. Короткі теоретичні відомості
3.1. Вывод на экран в текстовом режиме
3.1.1. Засоби DOS. Згадаємо ще раз першу програму.
; hello. asm
org 100h ; початкове значення лічильника - 100h
use16
start: mov ah,9 ; номер функції DOS - в АН
mov dx, message; адреса рядка - у DX
int 21h ; виклик системної функції DOS
ret ; завершення Сома-програми
message db “Hello World!",0Dh,0Ah,'$'; рядок для виводу
Функція DOS 09h — Записати символ у STDOUT без перевірки на Ctrl-Break
Уведення: |
АН = 09h DL = ASCII-код символу (крім FFh) |
Вивід: |
? Ніякого?, відповідно до документації |
На прикладі першої програми на асемблері ми вже познайомилися з одним зі способів виводу тексту на екран — викликом функції DOS 09h. Це далеко не єдиний спосіб виводу тексту — DOS надає для цього кілька функцій.
Функція DOS 02h — Записати символ у STDOUT з перевіркою на Ctrl-Break
Уведення: |
АН=02h DL = ASCII-код символу |
Вивід: |
Ніякого, відповідно до документації, але насправді: AL = код останнього записаного символу (дорівнює DL, крім випадку, коли DL = 09h (табуляція), тоді в AL повертається 20h). |
Ця функція при виводі на екран обробляє деякі керуючі символи — вивід символу BEL (07h) приводить до звукового сигналу, символ BS (08h) приводить до руху курсору вліво на одну позицію, символ НТ (09h) заміняється на кілька пробілів, символ LF (0Ah) опускає курсор на одну позицію вниз, і CR (0Dh) приводить до переходові на початок поточного рядка.
Якщо в ході роботи цієї функції була натиснута комбінація клавіш Ctrl-Break, викликається переривання 23h, що за замовчуванням здійснює вихід із програми.
Наприклад, напишемо програму, що виводить на екран усі ASCII-символи, 16 рядків по 16 символів у рядку.
Приклад 1
; dosoutl. asm
; Виводить на екран усі ASCII-символи
;
org 100h ; початок Сома-файлу
use16
mov cx, 256 ; вивести 256 символів
mov dl,0 ; перший символ - з кодом 00
mov ah,2 ; номер функції DOS “вивід символу”
cloop: int 21h ; виклик DOS
inc dl ; збільшення DL на 1 - наступний символ
test dl,0Fh ; якщо DL не кратний 16,
jnz continue_loop ; продовжити цикл,
push dx ; інакше: зберегти поточний символ
mov dl,0Dh ; вивести CR
int 21h
mov dl,0Ah ; вивести LF
int 21h
pop dx ; відновити поточний символ
continue_loop:
loop cloop ; продовжити цикл
ret
Тут за допомогою команди LOOP оформляється цикл, що виконується 256 разів (значення регістра СХ на початку циклу). Регістр DL містить код символу, що дорівнює нулеві на початку циклу і збільшується щораз на 1 командою INC DL. Якщо значення DL відразу після збільшення на 1 кратно 16, воно тимчасово зберігається в стеці і на екран виводяться символи CR і LF, що виконують перехід на початок нового рядка. Перевірка виконується командою TEST DL,0Fh — результат операції AND над DL і 0Fh буде нулем, тільки якщо молодші чотири біти DL дорівнюють нулеві, що і відповідає кратності шістнадцяти.