Програмна реалізації операції ділення 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Програмна реалізації операції ділення



Подібно до того, як операція множення в МП К580ИК80 реалізується послідовностями операцій «додавання–зсув», так і операція ділення виконується послідовністю операції «віднімання–зсув». Нижче розглядаються найбільш вживані способи програмної реалізації операції ділення для цілих чисел без знаку. При діленні отримують цілу частина приватного і позитивний залишок.

Приклад 5.5. Ділення однобайтних чисел (цілих без знаку) із зсувом ділимого (або залишків) вліво.

При діленні дільник послідовно віднімається зі все більшої частини ділимого і після кожного віднімання аналізується біт займу С. Якщо дільник більше тієї частини ділимого, з якої він віднімається, то С=1. В цьому випадку цифра результату рівна нулю, і дільник сумується з результатом віднімання для відновлення початкової частини ділимого (залишку). Якщо при відніманні заєму не виникає (С=0), то цифра результату рівна 1, а результат використовується як нове проміжне ділиме.

Призначення робочих регістрів наступне: Е – ділиме; D – дільник; L – лічильник бітів; Н – результат; С – залишок.

 

DIV:   LXI   Н, 8   ; завантаження вказівника Н і  
  NXBIT: MVI MOV   С, 0 A, Е   ; скидання регістра С ; ділиме в акумулятор  
  RAL ; зсув ділимого вліво
    MOV   Е, А   ; повернення ділимого  
    MOV   А, С   ; проміжний залишок  
    RAL       ; зсув залишку  
    SUB   D   ; віднімання дільника  
    JNC   NOADD ; залишок додатний
    ADD   D   ; відновлення залишку  
NOADD:   MOV   С, А   ; запам’ятовування залишку  
    CMC       ; інвертування С (утворення біта результату)  
  MOV А, Н   ; запис цифри результату  
    RAL          
    MOV   Н, А      
    DCR   L      
    JNC   NXBIT ; ділення на наступний біт
    RET       ; повернення  

 

Примітки: 1. До входу в підпрограму DIV ознака переносу С повинна бути скинутою.

2. Довжина підпрограми DIV складає 23 байти.

ІНДИВІДУАЛЬНІ ЗАВДАННЯ

1. Скласти програму на основі команд арифметичних операцій з використанням команд пересилань. Програма повинна показати роботу всіх типів команд арифметики.

2. Закодувати програму і занести її в таблицю, аналогічну таблиці 3.1.

ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ

1. Завантажити в пам’ять мікро лабораторії програми, що розглянуті в теоретичному розділі, і перевірити правильність їх роботи.

2. Завантажити індивідуальну програму і здійснити її виконання в покроковому режимі. Заповнити таблицю, вказуючи стан кожного з регістрів, що використовуються, на кожному кроці виконання.

3. При читанні вихідних даних і запису результатів в пам’ять здійснити контроль вмісту цих вічок. Результати занести в таблицю.

4. Здійснити циклічне виконання програми задану кількість разів з зупинкою за фіксованою адресою. Для цього за адресами 83F0 і 83F1 занести молодший і старший байти адреси команди, що контролюється, а за адресою 83F2 — кількість проходів.

5. Зробити висновки по роботі.

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

1. Відмінність команд арифметичних операцій без врахування і з врахуванням переносу.

2. Призначення команд зміни на ±1 вмісту пар регістрів.

3. Як виглядає алгоритм інкрементування пари регістрів, реалізований за допомогою команд INR r?

4. Як виконуються команди подвійного додавання?

5. Як виконується додавання операндів довжиною понад один байт?

6. Призначення безпосередніх арифметичних команд.

 

 

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

Тема: вивчення логічних команд

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

КОРОТКА ІНФОРМАЦІЯ

Група логічних команд призначена для виконання операцій логічного перетворення інформації, яка розміщена в регістрах. До них відносяться операції зсуву, логічного «І», «АБО» та інші. Перелік команд та їх коди показані на рис. 6.1.

 

1. Логічні   2. З безпосередніми даними   4. Спеціальні
Мнемоніка Код   Мнемоніка Код   Мнемоніка Код   Мнемоніка Код
ANA «І» A A7   ORA «АБО» A B7   ADI # C6   DAA  
B A0   B B0   ACI # CE   CMA 2F
C A1   C B1   SUI # D6   STC  
D A2   D B2   SBI # DE   CMC 3F
E A3   E B3   ANI # E6      
H A4   H B4   XRI # EE      
L A5   L B5   ORI # F6      
M A6   M B6   CPI # FE      
XRA «S mod 2» A AF   CMP «=?» A BF              
B A8   B B8              
C A9   C B9   3. Зсув      
D AA   D BA   Мнемоніка Код        
E AB   E BB   RLC          
H AC   H BC   RRC   0F      
L AD   L BD   RAL          
M AE   M BE   RAR   1F      
                                         

Рис. 6.1. Логічні команди МП.

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

Логічні команди операції «І» над вмістом акумулятора і регістра (ANA r) розміщують результат операції в регістрі А. При цьому скидається прапорець переносу C і встановлюється прапорець допоміжного переносу. Команда займає в пам’яті 1 байт. Зчитування її з пам’яті виконується за три перші такти циклу M1, а в такті Т4 команда виконується. Особливість команди ANA M полягає в тому, що операція «І» виконується з вмістом акумулятора і вмістом вічка пам’яті, адреса якого розміщена в парі регістрів H, L. Оскільки для зчитування з пам’яті операнду потрібен додатковий машинний цикл, то команда буде виконана за сім тактів. Операція «І» також може бути виконана над безпосереднім операндом за допомогою команди ANI #. Її результат також розміщується в регістрі акумулятора. Для зчитування команди потрібно два машинних цикли, або за сім тактів.

При виконанні команди «Виключаюче АБО» (сума за модулем 2) результат розміщується в акумуляторі. Для цих команд характерна очистка прапорців переносу і допоміжного переносу. Відрізняють групу команд XRA r, які виконуються за чотири такти, команду XRA M, що здійснює операцію над акумулятором і вмістом вічка пам’яті за адресою, яка міститься в парі регістрів H, L (два цикли, або сім тактів), і команду безпосередньої операції «Виключаюче АБО» XRI # (два цикли, або сім тактів). Особливу увагу треба приділити операції XRA A, за допомогою якої можна очистити акумулятор і прапорці переносу. Команда використовується програмістами для підготовки акумулятора і прапорців переносу перед виконанням арифметичних перетворень, коли є необхідність виконувати аналіз переповнень.

Для формування логічного байту на основі вмісту кількох регістрів (наприклад, виконання зчеплення бітів) застосовуються команди логічного додавання («АБО»). Команди ORA r забезпечують логічне додавання акумулятора з регістром r, причому скидаються прапорці основного та допоміжного переносів (один цикл і чотири такти). Команди ORA M і ORI # впливають на тригери переносу аналогічно і виконуються за два цикли, або сім тактів.

Порівняння вмісту акумулятора і операнду, яким може бути вміст регістра, вічка пам’яті або безпосередній операнд, робиться командами порівняння. При виконанні цих команд, якщо операнди рівні, зводиться тригер нуля (Z=1), а якщо вміст акумулятора менше другого операнду команди, зводиться регістр переносу (C=1). Команди CMP r порівнюють акумулятор з регістром (один цикл, чотири такти), CMP M — вміст акумулятора і вічка пам’яті з адресою, що є в парі регістрів H, L (два цикли, сім тактів), CMI # — акумулятор з безпосереднім операндом (два цикли і сім тактів).

Відомо, що арифметичні операції над двійковими словами доцільно виконувати в зворотному або додатковому коді. Виконання операції перетворення кодів зручно здійснювати з використанням команди доповнення акумулятора CMA, при виконанні якої вміст акумулятора інвертується (біт, що дорівнює 1, стає рівним 0, а біт, що дорівнює 0, стає рівним 1). Прапорці при виконанні цієї команди не використовуються. Для її виконання треба один цикл, або чотири такти. Команда входить до складу спеціальних команд.

До спеціальних команд також відноситься команда, що встановлює прапорці переносу – STC (C=1), і команда, що доповнює прапорець переносу – CMC. При виконанні цих команд інші прапорці не використовуються. На їх виконання витрачається один машинний цикл М1, або чотири такти.

Часто виникає потреба виконати функцію зсуву вправо або вліво на один розряд. В системі команд МП КР580ИК80А є по дві команди лівого і правого зсуву. Зсув вмісту акумулятора вліво RLC і вправо RRC показані на рис. 6.2. При виконанні цих зсувів використовуються тільки прапорець переносу С, в якому дублюється вміст старшого або молодшого біту акумулятора.

Рис. 6.2. Виконання команди логічного зсуву акумулятора вліво RLC і вправо RRC.

Зсув може бути також виконаний з включенням в цей процес біту переносу С, як звичайного біту (рис. 6.3).

Рис. 6.3. Виконання команди логічного зсуву вмісту акумулятора з

включенням біту переносу вліво RAL і вправо RAR.

Адреса Мнемоніка команди
  LXI H, 8020
  MOV A, M
  INX H
  MOV B, M
  ANA B
  STA  
  Вміст вічка
  5F
  F5
   

З малюнка видно, що при лівому зсуві (RAL) вміст біта переносу С завантажується в біт D0, а біт переносу в свою чергу приймає значення D7. При правому зсуві (RAR) біт переносу передається в біт D7, а C приймає значення D0. Вміст інших бітів зсуваються звичайним способом. Для виконання всіх команд однобайтних зсувів потрібен однаковий час, який складає машинний цикл М1 із чотирьох тактів.

Розглянемо виконання деяких логічних команд. Нехай необхідно виконати операцію «І» над вмістом двох вічок пам’яті і її результат записати в ОЗП. Програма, що реалізує запропоновані перетворення, показана на рис. 6.4. Вихідні дані розміщені у вічках пам’яті за адресами 8020 і 8021. Результат виконання програми розмішується у вічку ОЗП за адресою 8022.

Перед виконанням програми запишемо вихідні дані, над якими виконується операція «І», у двійковому коді. Очевидно, що виконання цієї логічної операції над числами 01011111 і 11110101 дасть результат 01010101, тобто 55 в 16-ковому коді. Виконавши програму, прочитаємо вміст ОЗП за адресою 8022 і впевнимось, що в цьому вічку дійсно записане число 55. Змінивши коди вихідних даних, можна заново виконати програму і отримати у вічку ОЗП з адресою 8022 новий результат.

Якщо модифікувати програму, замінивши команду за адресою 8006 на команду «АБО»

ORA B

то при тих же вихідних даних (див. рис. 6.4) у вічку з адресою 8022 буде результат FF, що і повинно бути після виконання програми.

Приклад програми, що використовує команду зсуву, наведена на рис. 6.5. Програма виконує читання вічка ОЗП з адресою 8040 і, виконавши лівий зсув, розміщує результат в тому ж вічку ОЗП. Якщо занести у вічко байт AA, то після виконання програми в ній буде записаний байт 55. При повторному виконанні програми вміст вічка з адресою 8040 відновлюється.

 

Адреса Мнемоніка команди
  LDA  
  RLC  
  STA  
  JMP  
  Вміст вічка
  AA

Рис. 6.5. Приклад програми, що використовує команди зсуву.

В цій програмі можна використати команду RRC, тобто зсув вправо. Результат програми буде такий же, в чому повинні впевнитись користувачі мікро лабораторії.



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 263; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.224.103 (0.024 с.)