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

Ссув та циклічний ссув розрядів

Асемблер має команди для ссуву та циклічного ссуву розрядів у байті або слові. Розряди можуть ссуватися вправо (у бік молодших розрядів) або вліво (у бік старших розрядів). Значення останнього висунутого за межі розрядної сітки розряду для усіх команд ссуву попадає у прапорець переносу.

Команди ссуву та циклічного ссуву розподіляються на дві групи. Логічні (або беззнакові) команди ссувають операнд, не звертаючи уваги на його знак; вони використовуються для дій над числами без знаку та над нечисловими значеннями. Арифметичні (або знакові) команди зберігають старший біт операнду; вони використовуються для дій над числами зі знаком.

На наступному малюнку показана дія 8 команд ссуву та циклічного ссуву для 8-розрядних операндів.

SHL (логічний або беззнаковий ссув уліво)

7 0

CF 0

SHR (логічний або беззнаковий ссув вправо)

7 0

0 CF

SAL (арифметичний ссув вліво)

7 0

CF 0

SAR (арифметичний ссув вправо)

7 0

CF

ROL (циклічний ссув вліво)

7 0

CF

ROR (циклічний ссув вправо)

7 0

CF

RCL (циклічний ссув вліво через прапорець CF або з переносом)

7 0

CF

RCR (циклічний ссув вправо через прапорець CF або з переносом)

7 0

CF

Команди SHL та SAL відрізняються тільки дією на прапорці.

У операнді – приймачі знаходиться значення, що необхідно ссунути. Після виконання команди в ньому ж буде знаходитись результат. В операнді – джерелі повинне знаходитись число, що визначає необхідну кількість ссувів. Це число може бути задане як безпосереднє значення “1” або як вміст регістра CL.

Команда SAR зберігає знак операнду, репродукуючи його під час виконання ссуву. Команда SAL не зберігає знак, але заносить "1" в прапорець переповнення OF у разі зміни знаку операнда.

Нехай AL містить 0B4h, а CF=1

; AL=1011 0100b

SAL AL,1 ; AL=0110 1000 CF=1

SAR AL,1 ; AL=1101 1010 CF=0

SHL AL,1 ; AL=0110 1000 CF=1

SHR AL,1 ; AL=0101 1010 CF=0

ROL AL,1 ; AL=0110 1001 CF=1

ROR AL,1 ; AL=0101 1010 CF=0

RCL AL,1 ; AL=0110 1001 CF=1

RCR AL,1 ; AL=1101 1010 CF=0

Ссув вправо на 1 еквівалентен діленню на 2, ссув вліво на 1 – множенню на 2. Ця особливість може бути використана для множення та ділення на константи, що часто зустрічаються, наприклад, на 2n. У разі подвійного ссуву виконується множення (ділення) на 4, під час потрійного – на 8 і так далі.

SHR використовується для ділення беззнакових чисел, SAR – для знакових. Множення за допомогою ссуву є однаковим для знакових та беззнакових чисел, тому можна користуватися як SAL, так і SHL.

MOV CL,2

SHL AX,CL ;множити число без знаку на 4

SAL AX,CL ;множити число зі знаком на 4

SHR AX,CL ;ділити число без знаку на 4

SAR AX,CL ;ділити число зі знаком на 4

Кожна з цих команд з врахуванням завантаження CL виконується у 6-8 разів скоріше відповідної команди множення та ділення.

Коли необхідно ссунути значення, яке занадто велике для регістру, можно ссувати кожну частину окремо, передаючи висунуті розряди через прапорець переносу. Для передачі переносу з першого регістру у другий повинні використовуватись команди RCR або RCL.

Наприклад:

SHL AX,1 ;32-розрядне число в регістрах AX та DX

RCL DX,1 ;множимо на 2

ПІДГОТОВКА ДО РОБОТИ

  1. Вивчити короткі теоретичні відомості та рекомендовану літературу.

  2. Написати текст програми, що відповідає вашому варіанту завдання.

РОБОЧЕ ЗАВДАННЯ

Набрати, странслювати,скомпонувати та налагодити програму, що підготовлена.

КОНТРОЛЬНІ ЗАПИТАННЯ.

  1. Який тип переходу припускає команда LOOP.

  2. Як працює команд LOOP.

  3. Де задається кількість повторень циклу, що організований за допомогою команди LOOP.

  4. Як, окрім команди LOOP, можна організувати циклічний процес.

  5. У командах ссуву куди потрапляє останій розряд, висунутий за межі розрядної сітки.

ЛАБОРАТОРНА РОБОТА № 7

ПЕРЕРИВАННЯ

Мета роботи: ознайомитися з основними принципами маханізму переривань.

КОРТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

ПЕРЕРИВАННЯ – це подія, що примушує центральний процесор перервати виконання поточної роботи та перейти на виконання програми, що зветься ОБРОБНИКОМ ПЕРЕРИВАННЯ. Цей перехід виконується за малий час за допомогою спеціально розроблених апаратних засобів.

Обробник переривання визначає причину переривання, виконує заплановані дії, після чого повертає керування програмі, що була перервана.

Звичайно переривання викликаються подіями зовнішніми відносно до центрального процесора (ЦП) та потрбуючими термінових дій. Наприклад:

  • завершення операціїї вводу/вивіду;

  • виявлення апаратного перебою;

  • “катастрофа” (відмова живлення).

Більшисть сучасних процесорів підтримують механізм типів та рівнів переривань. Кожному типу звичайно відповідає чарунку у пам’яті, що зветься ВЕКТОРОМ ПЕРЕРИВАННЯ, яка визначає місце знаходження програми обробника переривання цього типу. Концепція типів переривань дозволяє призначати перериванням приоритети. Переривання групуються за рівнями, що мають однаковий приоритет.

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

Процесор 8086 підтримує 256 типів переривань, що викликаються подіями трьох груп:

  • внутрішні апаратні переривання:

  • зовнішні апаратні переривання:

  • програмні переривання.

Кожному типу переривання відповідає свій номер.

Внутрішні апаратні переривання або відмови генеруються визначеними подіями, що виникають в процесі виконання програми (ділення на 0, невірний код операції). Закріплення номерів переривань за визначеними причинами жорстко “зашите” у процесорі.

Зовнішні апаратні переривання ініціалізуються контролерами перифірийного обладнання та співпроцесорами.

Програмні переривання. Будь яка програма може ініціалізувати синхронне програмне переривання за допомогою виконання команди Int з вказівкою номера переривання., наприклад,

Int 10h

Розподіл номерів програмних переривань умовний і не закріплений апаратно.

Нижні 1024 байти системної пам’яті звуться ТАБЛИЦЕЮ ВЕКТОРІВ ПЕРЕРИВАНЬ. Вектор займає 4 байти: сегмент та зміщення відповідного обробника переривання.

ЦП, який отримав сигнал або команду переривання, розміщує у стеці вміст регістру прапорців, очищає прапорці TF та IF, заносить до стеку вміст регістрів CS та IP та блокує систему переривань. Потім за допомогою 8-бітового числа – номера переривання – встановленного на внутрішній шині, добуває з таблиці векторів переривань адресу необхідного обробника переривання (базу і зміщення), заносить їх відповідно у регістри CS та IP і таким чином передає керування обробнику переривання.

Звичайно, обробник разблокує систему переривань, зберігає регістри, які будуть їм використовуватись, і обробляє переривання. У кінці обробника повинна стояти команда IRET – повернення з переривання. Ця команда добуває зі стеку початкове значення регістрів CS та IP та регістру прапорців і записує їх на попереднє місце.

Як приклад розглянемо, як можна використовувати командні переривання для виводу інформації на екран дісплея.

Усі необхідні екранні операції можна виконати за допомогою команди Int 10h, яка передає керування безпосередньо у BIOS. ДО виклика переривання Int 10h необхідно задати у регістрі AH номер підфункції виводу. В інших регістрах слід встановити потрібні для цієї функції параметри. Номера підфункцій, їх параметри, а також регістри, у які їх потрібно встановлювати, наведені у довідковій інформації по BIOS.

Для виконання деяких складнійших операцій існує переривання більш високого рівня Int 21h, яке викликає функції DOS.

Екран дісплея можна уявити у вигляді двовимірного простору з позиціями, що мають адресу. У будь яку позицію може бути встановлений курсор або виведен символ. Відеомонітор, наприклад, може мати 25 рядків (що нумеруються від 0 до 24) та 80 стовбчиків (що нумеруються від 0 до 79). Нумерація рядків виконується, починаючи з лівого верхнього кута екрану униз, нумерація стовбчиків , починаючи також з лівого верхнього кута екрану вправо.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]