Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум КТіООР.doc
Скачиваний:
4
Добавлен:
09.11.2019
Размер:
4.21 Mб
Скачать

2.6.1 Основні теоретичні відомості

ADD – додавання

(1-й операнд)  (1-й операнд) + (2-й операнд)

Цією командою додаєтья до першого другий операнд. Результат розміщується у місце зберігання першого операнду. Попереднє значення першого операнду втрачається. Вміст комірки другого операнду залишається незмінним.

Місцем зберігання першого операнду може бути регістр або комірка пам'яті; другого операнда – регістр або комірка пам'яті, або він може бути заданий безпосередньо числом. Не дозволяється використовувати для запису операндів сегментні регістри, а також комірки пам'яті для одночасного зберігання двох операндів. Операнди можуть бути числами із знаком або без нього і бути байтами або словами.

Приклад. Нехай регістр DL містить число 58Н, однобайтова комірка пам'яті TEST_BYTE містить 27Н, а в регістрі прапорців процесора записано число F046H. Після виконання команди ADD TEST_BYTE,DL в комірку пам'яті буде записане число 7FH.

Вміст регістра DL 0101 1000 = 58Н

Вміст комірки TEST_BYTE 0010 0111 = 27Н

Новий вміст комірки TEST_BYTE 0111 1111 = 7FH

Число одиничних бітів в комірці пам'яті TEST_BYTE після виконання команди рівне семи, тобто непарне число, тому прапор паритету PF скидається в нуль. Прапори SF і ZF обнуляються, оскільки результат операції – позитивне, відмінне від нуля число. Прапори CF і OF також обнуляються, зважаючи на відсутність перенесення і переповнювання відповідно. Прапор AF має нульове значення, оскільки немає перенесення з третього розряду.

Змінюються значення прапорів: OF, SF, ZF, AF, PF, CF.

ADC – додавання з перенесенням

(1-й операнд)  (1-й операнд) + (2-й операнд) + (прапор CF)

Командою здійснюється додавання першого і другого операндів і до результату додається значення прапорця перенесення CF. Результат записується в перший операнд, а початкове значення першого операнда втрачається. Другий операнд залишається незмінним.

Перший операнд може зберігатися в регістрі або комірці пам'яті. Другий операнд може бути заданий в регістрі, комірці пам'яті або безпосереднім числовим значенням. Не дозволяється задавати операнди в регістрах сегментів, а також зберігання двох операндів одночасно в комірках пам'яті. Операнди можуть бути байтами або словами, представляти числа із знаком або без знаку. Оскільки команда ADC використовує прапор перенесення CF, вона може застосовуватися для додавання чисел будь-якої довжини.

Приклад. Нехай регістр АХ містить число 4803Н, а прапор перенесення CF рівний 1. Після виконання команди ADC АХ,2517Н в регістрі АХ буде записане 6D1BH, а в регістрі прапорів буде нове значення F006H.

Вміст АХ 0100 1000 0000 0011 = 4803Н

0010 0101 0001 0111 = 2517Н

Прапор перенесення CF 1

Новий вміст АХ 0110 1101 0001 1011 = 6D1BH

Після виконання команди змінюються значення прапорів: OF; SF; ZF; AF; PF;CF.

INC-інкремент

(Операнд)  (Операнд) + 1

Цією командою початковий операнд збільшується на 1. Операнд може бути заданий в регістрі загального призначення або в комірці пам'яті. Сегментні регістри не можуть бути використані для зберігання операндів. Команда INC може використовуватися як з однобайтовими, так і двобайтовими операндами. Операнди інтерпретуються як числа без знаку.

Команда змінює прапори AF, OF, PF, SF і ZF.

Приклад. Нехай регістр ВХ задає двобайтову комірку пам'яті з вмістом FE00H і виконується команда INC WORD PTR [ВХ]. Новим вмістом пам'яті після виконання команди буде число FE01H. Оскільки результатом операції є негативне, відмінне від нуля число в додатковому коді, прапор SF встановлений в 1, а прапор ZF — в 0. Наявність тільки одного відмінного від нуля розряду в молодшому байті слова обумовлює скидання прапора паритету в 0.

Після виконання команди змінюються значення прапорів: OF, SF, AF, PF і ZF.

SUВ – віднімання

(1-й операнд) ← (1-й операнд) – (2-й операнд).

Вміст другого операнда при виконанні команди віднімається з вмісту першого операнда і результат розміщується на місце першого операнда. Перший операнд при цьому втрачається, а другий зберігається незмінним.

Перший операнд може бути заданий в регістрі або комірці пам'яті. Другий операнд може бути заданий в регістрі, комірці пам'яті або безпосередньо. Не допускається використовування сегментного регістра або одночасний запис обох операндів в комірках пам'яті. Операнди можуть бути як знаковими, так і беззнаковими числами. Можливе виконання 8- і 16-розрядних операцій.

Приклад. Розглянемо випадок, коли регістр DL містить число 58Н, регістр DH – число 20Н і регістр прапорів процесора – число F046H. Після виконання команди SUB DL, DH в регістрі DL буде записано число 38Н, а в регістрі прапорів – число F002H.

Після виконання команди змінюються значення прапорів: OF, SF, ZF, АF, PF, CF.

SBB-віднімання із запозиченням

(1-й операнд) ← (1-й операнд) – (2-й операнд) – (прапор перенесення CF).

Командою SBB виконується віднімання значення прапора CF і другого операнда з першого операнда. Результат розміщується на місце першого операнда, попереднє значення якого втрачається. Вміст другого операнда не змінюється.

Перший операнд може бути заданий в регістрі або комірці пам'яті. Другий операнд, крім того, може бути заданий безпосередньо. Не допускається використовувати для запису операндів сегментні регістри або задавати обидва операнди в комірках пам'яті. Операнди можуть бути однобайтовими або двобайтовими числами із знаком або без знаку. Можливість займу, дозволяє використовувати команду SBB для організації віднімання чисел з розрядністю, що перевищує 16 біт.

Приклад. Нехай регістр АХ містить число 4803Н, регістр прапорців – F047H, прапор CF встановлений в 1. Після виконання команди SBB AX, 1500H в регістрі АХ буде записано 3302Н, а вміст регістру прапорів буде дорівнювати F002H.

Після виконання команди змінюються значення прапорів: OF, SF, ZF, АF, PF, CF.

DEC-декремент

(Операнд)  (Операнд) — 1

Цією командою початковий вміст операнда, визначеного в команді, зменшується на 1. Операнд може берегтися в регістрі загального призначення або елементі пам'яті. Не допускається завдання операндів в регістрах сегментів. Операція виконується як над однобайтовими, так і над двобайтовими числами. Операнд розглядається як беззнакове число. Команда DEC не впливає на прапор CF.

Приклад. Хай в регістрі BL записано 00 і виконується командиа DEC BL. Новим вмістом регістра BL буде число FFH. Оскільки результат є відмінним від нуля числом в додатковому коді, прапор знаку SF встановлюється в 1, а прапор нуля ZF скидається в 0. Оскільки в результаті присутні вісім відмінних від нуля бітів, тобто парне число, прапор паритету PF теж встановлений в 1.

Після виконання команди змінюються значення прапорів: OF; SF; ZF; AF; PF.

MUL-множення

Командою MUL виконується беззнакове множення вмісту акумулятора і операнду – джерела. Якщо операнд є байтом, то він множиться на вміст регістру AL і результат подвійної довжини (слово) записується в регістр АХ. Якщо операнд – слово, то він множиться на вміст регістру АХ і результат (подвійне слово) записується в пару регістрів DX і АХ, причому регістр DX містить старші розряди результату. Операнд може бути заданий в регістрі загального призначення або комірці пам'яті і інтерпретується як число без знаку.

Якщо вміст регістру АН після однобайтового множення або вміст регістру DX після двобайтового множення не рівні нулю, прапори CF і OF встановлюються в 1. Інакше вони скидаються в 0. Значення прапорів AF, PF, SF і ZF після виконання команди MUL не визначено.

Приклад. Нехай регістр AL містить число 30Н, однобайтова комірка пам'яті NEXT_L містить 12Н і виконується команда MUL NEXT_L. Результат множення (12Н  30Н = 360Н) записується в регістр АХ. Оскільки вміст регістру АН відмінний від 0 прапори CF і OF встановлені в 1.

Нехай тепер регістр АХ містить число 1000Н, регістр ВХ – число 550Н. Тоді після виконання команди MUL ВХ результат множення (1000Н  550Н = 550000Н) буде записаний в пару регістрів DX і АХ. Оскільки нове значення регистру DX(0055H) відмінне від нуля, прапори CF і OF встановлюються в 1.

Після виконання команди змінюються значення прапорів: OF; SF; ZF; AF; PF; CF.