- •Лабораторний практикум
- •Та організація обчислювальних робіт”
- •1.Основи комп’ютерної техніки
- •1.1.1. Основні теоретичні відомості
- •1.1.2. Варіанти завдань
- •1.2.1 Основні теоретичні відомості
- •1.2.2 Варіанти завдань
- •1.3.1 Основні теоретичні відомості
- •1.3.2 Варіанти завдань
- •1.4.1 Основні теоретичні відомості
- •1.4.2 Варіанти завдань
- •2.Мова assembler
- •2.5.1 Основні теоретичні відомості
- •Movs-пересилка рядка
- •2.5.2. Варіанти завдань
- •2.6.1 Основні теоретичні відомості
- •Imul – цілочисельне множення
- •IDlV-цілочисельне ділення
- •2.6.2. Варіанти завдань
- •2.7.1 Основні теоретичні відомості
- •Ja/jnbe – перехід, якщо більше/перехід, якщо не менше або рівно
- •Jae/jnb/jnc – перехід, якщо більше чи рівно/перехід, якщо не менше/перехід, якщо нема переносу
- •Jb/jnae/jc – перехід, якщо менше/перехід, якщо не більше або рівно/перехід,тобто, перенесення
- •Jbe/jna-перехід, якщо менше або рівно/перехід, якщо не більше
- •Jcxz-перехід, якщо вміст регістра сх рівний нулю
- •Je/jz-перехід, якщо рівно/перехід по нулю
- •Jg/jnle-переход, якщо більше ніж/переход, якщо не менше ніж або рівно
- •Jge/jnl-nepexід, якщо більше або рівно/перехід, якщо не менше ніж
- •Jl/jnge-перехід, якщо меньше/перехід, якщо не більше або рівно
- •Jle/jng-перехід, якщо менше або рівно/перехід, якщо більше
- •Jne/jnz-переход по нерівності /переход, якщо не нуль
- •Jnp/jpo-переход за відсутності парності
- •Jp/jpe-перехід по парності
- •2.7.2. Варіанти завдань
- •2.8.1. Основні теоретичні відомості
- •Основні засоби bios для роботи з відеоадаптером
- •Зовнішні регістри контролера vga (03c2h – 03cFh):
- •Регістри контролера атрибутів (03c0h – 03c1h):
- •Регістри графічного контролера (03cЕh – 03cFh):
- •Регістри контролера crt (03d4h – 03d4h):
- •Регістри синхронізатора (03с4h – 03c5h):
- •Регістри vga dac (03c6h – 03c9h):
- •Вибір режиму роботи відеоадаптера
- •Зміна форми курсора
- •Зміна положення курсору
- •Визначення положення і форми курсору
- •Зміна активної сторінки відеопам'яті
- •Згортка текстового вікна вверх
- •Згортка текстового вікна вниз
- •Читання символу і його атрибутів
- •Запис символу з атрибутами в поточній позиції курсору
- •Запис символу в поточній позиції курсору
- •Запис символу в режимі телетайпу
- •Визначення поточного режиму роботи відеоадаптеру
- •2.8.2. Варіанти завдань
- •3.Розрахунки в mathcad
- •Інтерфейс користувача
- •Основне меню
- •Панелі інструментів
- •Довідникова інформація
- •3.9.1. Основні теоретичні відомості
- •3.9.2. Варіанти завдань
- •3.10.1. Основні теоретичні відомості
- •3.10.2. Варіанти завдань
- •3.11.1. Основні теоретичні відомості
- •3.11.2. Варіанти завдань
- •3.12.1. Основні теоретичні відомості
- •3.12.2. Варіанти завдань
- •4.Табличний процеcор excel
- •4.13.1. Основні теоретичні відомості
- •4.13.2. Варіанти завдань
- •4.14.1. Основні теоретичні відомості
- •4.14.2. Варіанти завдань
- •4.15.1. Основні теоретичні відомості
- •4.15.2. Варіанти завдань
- •4.16.1. Основні теоретичні відомості
- •4.16.2. Завдання
1.4.2 Варіанти завдань
Виконати операції NOT, AND, OR:
Варіант |
Числа |
Варіант |
Числа |
1 |
1011010001101101 11011011 |
9 |
1111010001111101 10011001 |
2 |
11110100011010101 10011001 |
10 |
1011110001101001 11011011 |
3 |
1011010101001101 11011011 |
11 |
1011011001100101 11111111 |
4 |
1011010011111101 11101110 |
12 |
1011010001101101 10001101 |
5 |
1011010001101101 10011001 |
13 |
1011011101111101 11001011 |
6 |
1010110001100111 10010101 |
14 |
1011011001101001 10111111 |
7 |
1111011001101111 11001111 |
15 |
1011010101100001 11001001 |
8 |
1011110001100101 11001001 |
16 |
1011010011001101 10011001 |
2.Мова assembler
У даний час найрозповсюдженими мовами програмування є C/C++, Pascal/Delphi, Basic/Visual Basic. Ми будемо розглядати мову асемблера. Мовою асемблера пишуть:
все, що потребує максимальної швидкості виконання (основні компоненти ігор, ядра операційних систем рельного часу і росто критичні частини програм);
все, що взаємодіє з зовнішніми пристроями (драйвери, програми, що використовують порти вводу-виводу), звуковими т відео платами;
все, що повністю використовує можливості процесора (ядра багатозадачних операційних систем);
все, що повністю використовує можливості операційної системи (віруси і антивіруси, захист від несанкціонованого доступу)
та багато іншого.
Асемблер – це програма, яка перетворює текст із зрозумілої людині мови у машинні коди. Разом з асемблером повинна бути ще одна програма – компоновщик (linker), яка створює виконувані файли (exe або com) із одного або кількох об’єктних модулів, які створює асемблер.
Важливою особливістю асемблера є можливість дизасемблювання, тобто, маючи виконуваний файл (exe або com) можна за допомогою спеціальної програми (дизасемблера) отримати текст програми мовою асемблера.
Програма виводу на екран повідомлення “Hello world” може мати вигляд:
.MODEL SMALL
.STACK 100h
.DATA
Message DB 'Hello!',13,10,'$'
.CODE
Start: mov ax,@DATA ;встановити регістр DS так,
mov dx,ax ;щоб він вказував на сегмент даних
mov ah,9 ;функція DOS виводу рядка
mov dx,OFFSET Message ;посилання на повідомлення "Hello!"
int 21h ;вивести "Hello!" на екран
mov ah,4ch ;функція DOS закінчення програми
int 21h ;закінчити програму
END Start
Цю програму необхідно записати у файл з розширенням asm, наприклад, Hello.asm. Для того, щоб створити exe-програму необхідно виконати наступну послідовність дій:
Програма мовою асемблера складається з рядків наступного вигляду
<мітка> <команда/директива> <операнди> ; коментар
Всі поля є необов’язковими, тобто можуть бути відсутні.
У програмі можна використовувати псевдокоманди. Псевдокоманда – це директива асемблеру, яка призводить до вставки даних або коду в програму, хоча сама вона ніякій команді процесора не відповідає.
Для визначення змінних використовуються псевдокоманди:
DB – 1 байт, DF – 6 байт,
DW – 2 байта, DQ – 8 байт,
DD – 4 байта, DT – 10 байт.
Поле значення може містити одно або кілька чисел, рядків символів, взятих в апострофи, символів ? і dup(). Всі задані таким чином дані будуть у файлі, а ім’я змінної буде відповідати адресі першого з вказаних значень.
Приклади запису констант:
text_string db ‘Hello world!’
number dw 7
table db 1,2,3,4,5,6,7,8,9,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
float_number db 3.5e7
Ці записи заповнюють даними 33 байта. Перші 12 байт містять ASCII-коди символів “Hello world!”. Змінна text_string вказує на першу букву. Команда mov al,text_string занесе в регістр al число 48h (код букви ‘H’).
Якщо замість значення записано ?, тоді змінна вважається неініціалізованою і на момент запуску програми може мати будь-яке значення. Для запису у пам’ять даних, що повторюються, використовують оператор dup. Наприклад, командою table_512w dw 512dup(?) створюється масив двобайтних слів, на перше із яких вказує змінна table_512w.
Дані і код програми можуть розміщуватись в окремих сегментах. Сегменти програми описуються директивами SEGMENT i ENDS:
ім’я_сегменту SEGMENT
…
ім’я_сегменту ENDS
У програмі вказуються сегменти даних, коду і стеку. Директива ASSUME вказує асемблеру з яким сегментом зв’язаний той чи інший сегментний регістр.
Для різних типів програм застосовують відповідні моделі пам’яті. Вони вказуються директивою MODEL. Формат запису .MODEL <модель>, де <модель> може мати значення:
TINY – код, дані і стек розміщуються в одному і тому ж сегменті, розміром до 64K (ця модель найчастіше використовується для написання невеликих програм);
SMALL – код розміщується в одному сегменті, а дані і стек – в іншому;
COMPACT – код в одному сегменті, а для даних можуть використовуватись декілька сегментів;
MEDIUM – код може бути розміщений в кількох сегментах, а дані – в одному;
LARGE i HUGE – і код і дані можуть розміщуватись в кількох сегментах.
Програмна модель процесора Intel Pentium містить:
8 32-розрядних регістрів загального призначення, які використовуються для зберігання даних або адрес;
6 16-розрядних регістрів сегментів, які зберігають адреси сегментів;
32-розрядний регістр управління і контролю EFLAGS, який дозволяє управляти станом виконання програми і станом процесора;
32-розрядний регістр EIP, який вказує на наступну команду процесора;
система команд процесора;
режими адресації даних в командах.
Регістри процесора Intel Pentium є основними операндами команд і використовуються програмах для обробки даних. Вони показані на рис. 3.
Регістри загального призначення
Сегментні регістри
Регістр прапорів
Лічильник команд
Рисунок 3 - Регістри процесора Intel Pentium
Регістри загального призначення можуть використовуватись як операнди арифметичних або логічних команд, операнди для обчислення адрес операндів, вказувачі на комірки пам’яті (адреси). Кожен із цих регістрів був придуманий для певних цілей, хоча вони можуть використовуватись і не за прямим призначенням:
EAX виконує функцію акумулятора і зберігає результат команди;
EBX вказує на дані, які знаходяться в сегменті даних, на який вказує регістр DS;
ECX - лічильник циклів і символів в командах обробки рядків символів;
EDX – вказувач на порти пристроїв вводу-виводу;
ESI – вказувач на дані, які знаходяться в сегменті даних, на який вказує регістр DS, а в командах обробки рядків символів містить зміщення рядка-джерела;
EDI – вказувач на дані, які знаходяться в сегменті даних, на який вказує регістр ES, а в командах обробки рядків символів містить зміщення рядка-приймача;
EBP вказує на дані стеку, на який вказує регістр SS;
ESP – вказувач стеку, на який вказує регістр SS.
У програмах молодші 16 біт 32-розрядних регістрів загального призначення можуть використовуватись як 16-розрядні регістри в процесорах 8086, а саме AX, BX, CX, DX, BP, SI, DI, SP. Перші 4 регістри також можуть використовуватись частинами. Старші 8-розрядні регітри: AH, BH, CH, DH, а молодші: AL, BL, CL, DL. Це показано на рис.4.
Рисунок 4 - Використання регістрів загального призначення
Сегментні 16-розрядні сегментні регістри CS, DS, SS, ES, FS,GS містять адреси сегментів пам’яті. Процесор Intel Pentium підтримує наступні типи сегментів:
Сегмент коду. Містить команди програми. Для доступу до цього сегмента служить регістр CS (code segment register) - сегментний регістр коду. Він містить адресу сегмента з командами, які виконує процесор.
Сегмент даних. Містить оброблювані програмою дані. Для доступу до цього сегмента служить регістр DS (data segment register) — сегментний регістр даних, що зберігає адресу сегмента даних програми.
Сегмент стека. Цей сегмент є частиною пам'яті, яку називають стеком. Роботу зі стеком процесор організує за принципом: останній записаний у цю пам’ять елемент вибирається першим. Адреса цього сегмента міститься в регістрі SS (stack segment register) — сегментний регістр стека.
Додатковий сегмент даних. Неявно алгоритми виконання більшості команд припускають, що оброблювані ними дані розташовані в сегменті даних, адреса якого перебуває в сегментному регістрі DS. Якщо програмі недостатньо одного сегмента даних, тоді вона має можливість використовувати додаткові сегменти даних. Але на відміну від основного сегмента даних, адреса якого зберігається в сегментному регістрі DS, при використанні додаткових сегментів даних їхні адреси потрібно вказувати явно за допомогою спеціальних префіксів перевизначення сегментів у команді. Адреси додаткових сегментів даних повинні міститись в регістрах ES, GS, FS (extension data segment registers).
Процесор Intel Pentium містить ще два регістри: EIP та EFLAGS У лічильнику команд EIP зберігається зміщення в сегменті коду, на який вказує сегментний регістра cs, наступної команди для виконання. Цей регістр безпосередньо недоступний програмістові, але завантаження або зміна його значення виконується командами керування, до яких відносяться команди умовних і безумовних переходів, виклику процедур і повернення із процедур. Виникнення переривань також приводить до зміни вмісту регістра EIP.
Використовуючи регістр EFLAGS, можна одержувати інформацію про результати виконання команд і впливати на стан процесора. Назви бітів-прапорів цього регістру зображено на рис.5.
Рисунок 5 - Регістр прапорів EFLAGS
Виходячи з функціонального призначення, прапори регістра EFLAGS можна розділити на три групи:
8 прапорів стану. Ці прапори можуть змінюватися після виконання команд. Прапори стану регістра EFLAGS відображають особливості результату виконання арифметичних або логічних операцій. Це дає можливість аналізувати стан обчислювального процесу й реагувати на нього за допомогою команд умовних переходів і виклику підпрограм. У табл.1 наведено прапори стану й зазначено їхнє призначення;
1 прапор керування. Позначається DF (Directory Flag). Він знаходиться в 10-му біті регістра EFLAGS і використовується ланцюговими командами. Значення прапора DF визначає напрямок поелементної обробки в цих командах: від початку рядка до кінця (DF = 0) або навпаки, від кінця рядка до його початку (DF = 1). Для роботи із прапором DF існують спеціальні команди: CLD (зняти прапор DF) і STD (установити прапор DF). Застосування цих команд дозволяє привести прапор DF у відповідність із алгоритмом і забезпечити автоматичне збільшення або зменшення лічильників при виконанні операцій з рядками символів;
5 системних прапорів, керуючих вводом/виводом, маскуванням переривань, налагодженням, перемиканням між завданнями й віртуальним режимом. Прикладним програмам не рекомендується модифікувати без необхідності ці прапори, тому що в більшості випадків це приведе до переривання роботи програми.
Для зручності та наглядного використання асемблерних команд використовується оболонка Turbo Debugger (td.exe). В основному вікні, що відображене нижче показані п’ять підекранів: команд, регістрів та прототипів стекової пам’яті, комірок оперативної пам’яті.
Для запису команди необхідно просто почати на клавіатурі її набір. Автоматично з’явиться підекран команд, котрі будуть виконуватися. Наприклад,
Після набору команди та натиску ОК ця команда появиться у списку-черзі команд, підготовлених до виконання.
Виконати команду можна вибравши набрану команду у вікні списку команд та натиснувши F8. Після виконання команди відразу ж можна переконатися у правильності виконання по стану регістрів та флажків. Щоб переключатися між екранними вікнаим оболонки необхідно користуватися клавішою Tab. В наведеному прикладі ми побачили, що змінилося значення регістру АХ та лічильник ІР набув значення 0103, котре в стеку відповідає наступній команді.
Лабораторна робота №5
Тема роботи: Команди пересилання даних.
Мета роботи: Навчитися використовувати команди MOV.