Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_з_АК_пр1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
4.15 Mб
Скачать

Моделі пам’яті

Модель

Тип коду

Тип даних

Призначення моделі

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 – перезапуск програми

Якщо в команді є звертання до комірки пам’яті, її вміст відображається у правому верхньому куті вікна кодового сегменту (коли курсор знаходиться на цій команді). Переглянути вміст комірок можна також у вікні сегменту даних (ліве нижнє).