
- •Практична робота №1 Перевід чисел із однієї системи числення в іншу
- •1.1 Мета роботи
- •1.2 Короткі теоретичні відомості
- •Представлення цілих чисел
- •Перевід правильних дробів
- •Представлення неправильних дробів
- •1.3 Порядок виконання роботи
- •1.4 Таблиця індивідуальних завдань
- •1.5 Контрольні запитання
- •Практична робота №2 Оболонка Turbo Debugger
- •1.1 Основні теоретичні відомості
- •2 Варіанти завдань
- •Практична робота №3 Арифметичні операції в позиційних системах числення
- •3.1 Основні теоретичні відомості
- •Методичні вказівки
- •3.2 Порядок виконання роботи
- •1.3 Контрольні запитання
- •Практична робота №4-5
- •Основні теоретичні відомості
- •1 Фоpмати чисел з плаваючою комою
- •2 Аpифметичнi опеpацiї додавання та вiднiмання чпк
- •3 Множення чпк
- •4 Дiлення чпк
- •5 Арифметичні операції між чпк та числами із фіксованою комою
- •6 Пеpетвоpення чпк до двiйково-десяткової фоpми
- •Контрольна робота №2
- •1.1 Порядок виконання роботи
- •1.2 Контрольні запитання Програмна модель мікропроцесора
- •16 Користувальницькі регістри
- •Користувальницькі регістри
- •Регістри загального призначення
- •Сегментні регістри
- •Приклад оформлення звіту
- •Опис команд пересилки даних між регістрами та комірками пам’яті
- •3.2 Завдання на роботу
- •3.3 Варіанти завдань
- •3.4 Приклад оформлення звіту
- •Практична робота №7
- •Основні теоретичні відомості
- •Директиви асемблера
- •Команди пересилки. Способи адресації
- •Моделі пам’яті
- •Структура коду команди
- •2.2 Порядок виконання роботи
- •Програма на мові Assembler:
- •Стани регістрів в процесі виконання програми:
- •2.3 Контрольні запитання
- •Практична робота №7
- •7.1 Основні теоретичні відомості Логічні команди
- •Команди передачі управління по значеннях флагів zf, sf, pf
- •7.2 Порядок виконання роботи
- •Стани регістрів в процесі виконання програми:
- •7.3 Завдання
- •7.4 Контрольні запитання
Моделі пам’яті
Модель |
Тип коду |
Тип даних |
Призначення моделі |
TINY |
near |
near |
Код і дані об’єднані в одну группу з іменем DGROUP. Використовується для створення програм формата .com. |
SMALL |
near |
near |
Код займає один сегмент, дані об’єднані в одну групу з іменем DGROUP. Цю модель використовують для більшості програм на асемблері |
MEDIUM |
far |
near |
Код займає кілька сегментів, по одному на кожен програмний модуль. Всі посилання на передачу управління — типу far. Дані об’єднані в одній групі; всі посилання на них — типу near |
COMPACT |
near |
far |
Код в одному сегменті; посилання на дані — типу far |
LARGE |
far |
far |
Код в кількох сегментах, по одному на кожен програмний модуль посилання на дані — типу far |
Структура коду команди
Довжина команд МП 86 складає від 1 до 6 байт в залежності від способу адресації (рис.1.2). Кодування способу адресацiї операнду та конкретних складових, що утворюють виконавчу адресу, здiйснюється в другому байтi команди - постбайтi, який подiлений на три поля. Двобiтове поле mod визначає наявнiсть змiщення в способi адресацiї : mod = 00 - змiщення вiдсутнє (за одним винятком), mod=01 - змiщення 8-розрядне, mod=10 - змiщення 16-розрядне, mod = 11 - обидва операнди (або один - у випадку однооперандної команди) знаходяться в регiстрах МП, тобто звертання до пам'ятi немає - регiстрова адресацiя. Трьохбiтове поле reg кодує один з восьми регiстрiв оперативного призначення, якщо операнд (або обидва операнди ) знаходяться в РОП. В цьому випадку бiт d першого байту команди визначає мiсцезнаходження результату операцiї або напрямок руху операнду, що знаходиться в регiстрi iз кодом reg : d = 1 - результат операцiї розмiщається в регiстрi з кодом reg ( або операнд пересилається до регiстру з кодом reg ), d = 0 - результат операцiї ( або операнд, що пересилається) розмiщається поза регiстром з кодом reg. Трьохбiтове поле r/m ( register/memory ) або визначає конкретнi складовi, що формують виконавчу адресу ( для mod = 00, або 01, або 10 ), або адресує регiстр оперативного призначення при регiстровiй адресацiї ( для mod = 11 ). В табл.1.2 зведенi значення полiв постбайту для рiзних способiв адресацiї та складових, що формують виконавчу адресу.
1-й байт 2-й байт 3-й байт 4-й байт 5-й байт 6-байт
┌─┬─┬─┬─┬─┬─┬─┬─┼─┬─┬─┬─┬─┬─┬─┬─┼ ─ ─ ─ ─ ─┼ ─ ─ ─ ─ ─┼ ─ ─ ─ ─┼ ─ ─ ─ ┐
├─┴─┴─┴─┴─┴─┼─┼─┼─┴─┼─┴─┴─┼─┴─┴─┤ Мол.байт │ Cт.байт │Мол.байт│Ст.байт│
│ │d│w│mod│ reg │ r/m │змiщ./данi змiщ./данi даних даних
└─────┬─────┴┬┴┬┼─┬─┴──┬──┴──┬──┼ ─ ─ ─ ─ ─┼ ─ ─ ─ ─ ─┼ ─ ─ ─ ─┼ ─ ─ ─ ┘
│ │ │ │ │ └ регiстри,що формують виконавчу адресу /регicтр (mod=11)
│ │ │ │ └ регiстр / поширення коду команди
│ │ │ └ адресацiя до : регiстру ( 11 ), пам'ятi без змiщення
│ │ │ ( 00 ), змiщення 8 ( 01 ), змiщення 16 ( 10 )
│ │ └ операнд : слово ( 1 ), байт ( 0 )
│ └ напрямок : до регiстру reg ( 1 ) / з регiстру reg ( 0 )
└ код команди
Рисунок 1.2 – Структура постбайту та узагальнений формат команд МП 86.
Таблиця 1.2. – Значення полiв постбайту для рiзних способiв адресації.
┌─────┬─────────┬──────────────────┬───────────────────┬───────────────┐
│ r/m │mod = 00 │ mod = 01 │ mod = 10 │ mod = 11 │
│(reg)│ │ │ │ w = 0 │ w = 1 │
├─────┼─────────┼──────────────────┼───────────────────┼───────┼───────┤
│ 000 │ BX + SI │ BX + SI + disp 8 │ BX + SI + disp 16 │ AL │ AX │
│ 001 │ BX + DI │ BX + DI + disp 8 │ BX + DI + disp 16 │ CL │ CX │
│ 010 │ BP + SI │ BP + SI + disp 8 │ BP + SI + disp 16 │ DL │ DX │
│ 011 │ BP + DI │ BP + DI + disp 8 │ BP + DI + disp 16 │ BL │ BX │
│ 100 │ SI │ SI + disp 8 │ SI + disp 16 │ AH │ SP │
│ 101 │ DI │ DI + disp 8 │ DI + disp 16 │ CH │ BP │
│ 110 │ disp 16 │ BP + disp 8 │ BP + disp 16 │ DH │ SI │
│ 111 │ BX │ BX + disp 8 │ BX + disp 16 │ BH │ DI │
└─────┴─────────┴──────────────────┴───────────────────┴───────┴───────┘
Приклад структури асемблер-програми (зі спрощеними директивами сегментації в режимі ideal)
а) com-програма
model tiny
codeseg
org 100h
start:
(текст програми)
mov ax,4c00h
int 21h
; дані в сегменті коду:
a db 5 ; 1байтова змінна, ініціалізована значенням 5
b dw ? ; 2байтова неініціалізована змінна
c db 5 dup(0) ;масив з 5 1байтових елементів, ініціалізованих значенням 0
d dw 5 dup(?) ; масив з 5 двобайтових неініціалізованих елементів
end start
end
б) exe-програма
model small
stack 100h
dataseg
a db 5
d dw 5 dup(?)
codeseg
start:
(текст програми)
mov ax,4c00h
int 21h
end start
end
Створення та відладка виконуваних модулів
1) створити текстовий файл з розширенням .asm з текстом програми.
2) за допомогою компілятора Turbo Assembler створити об’єктний модуль:
tasm.exe <ім’я файлу>.asm
3) за допомогою компоновщика (редактора зв’язків) Turbo Linker створити виконуваний модуль:
для створення програми типу .exe:
tlink.exe <ім’я файлу>.obj
для створення програми типу .com:
tlink.exe <ім’я файлу>.obj /t
4) для відладки використовується відладчик Turbo Debugger:
td.exe <ім’я файлу>.exe (або td.exe <ім’я файлу>.com)
Виконання програми здійснюється за допомогою клавіш:
F7 – виконання однієї команди
F8– виконання однієї команди (з ігноруванням виклику підпрограм)
F9 – виконання всієї програми
F4 – виконання програми від поточної команди до курсора
Ctrl+F2 – перезапуск програми
Якщо в команді є звертання до комірки пам’яті, її вміст відображається у правому верхньому куті вікна кодового сегменту (коли курсор знаходиться на цій команді). Переглянути вміст комірок можна також у вікні сегменту даних (ліве нижнє).