Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Разрядні операції




Складання та віднімання

В багатьох примірниках програм ми вже зустрічалися з операндами ADD (складання) та SUB (віднімання). Їх дія відповідає назві. Інструкція ADD виконує складання операнда джерела (правого операнда) зі змістом операнда-приймача. Інструкція SUB робить навпаки - відніме операнд – джерело з операнда-приймача.

Наприклад, інструкції

 

BaseVal DW 99

Adjust DW 10

 

mov dx,[baseval]

add dx,11

sub dx,[Adjust]

 

спочатку завантажують значення, записане у BaseVal, в регістр DX, потім додають до нього константу 11 (в результаті у DX виходить значення 110) та, зрештою, віднімають з DX значення 10, записане у змінній Adjust. Отримане в результаті значення 100 зберігається у регістрі DX.

Операції ADD та SUB працюють з 8-ми розрядними операндами. Якщо ви, наприклад, бажаєте скласти чи відняти 32-розрядні операції, ви повинні розбити операцію на ряд операцій зі значеннями розміром у слово та використовувати інструкції ADC та SBB.

Коли ви складаєте два операнда, процесор 8086 записує стан у флаг переносу (біт С у регістрі флагів), котре показує, чи був виконаний перенос з приймача. Ви знайомі з принципом переносу в десятковій арифметиці: якщо ви складаєте 90 та 10, то виходить перенос в третю цифру (розряд).

Інструкція ADC аналогічна інструкції ADD, але в ній не враховується флаг переносу (спочатку встановлений попереднім складанням). Всякий раз коли ви складаєте два значення, які перевищують по розміру слово, то молодші (менш значущі) слова треба скласти за допомогою інструкції ADD, а решта слів цих значень - за допомогою однієї чи декількох інструкцій ADC, останніми складаємо самі значущі слова. Наприклад, наступні інструкції складають значення у регістрах CX:BX, розміром у подвійне слово, зі значеннями, записаними у регістрах DX:AX:

add ax,bx

adc dx,cx

 

а в наступній групі інструкцій виконується складання четверного слова у змінній DuobleLong1 з четвертним словом у змінній DoubleLong2:

 

mov ax,[Doblelong1]

add [DoubleLong2],ax

mov ax,[DobleLong1+2]

adc [DoubleLong2+2],ax

mov ax,[DoubleLong1+4]

adc [DobleLong1+4],ax

mov ax,[DoubleLong1+6]

adc [DoubleLong2+6],ax

 

Інструкція SBB працює по тому ж принципу, що й інструкція ADC. Коли інструкція SBB виконує віднімання, в ній ураховується позика, яка відбулася у попередньому відніманні. Наприклад, наступні інструкції віднімають значення, записане у регістрах CX:BX, зі значення розміром в подвійне слово, записаного у регістрах DX:AX:

 

sub ax,bx

sbb dx,cx

 

При роботі з інструкціями ADC та SBB ви повинні упевнитися, що флаг переносу не змінився з моменту виконання останнього складання чи віднімання, інакше стан позики/переносу, який зберігається у флагу переносу, буде втрачено. Наприклад, у наступному фрагменті програми складення CX:BX з DX:AX виконується некоректно.

add ax,bx; скласти молодші слова

sub si,si; очистити SI (флаг переносу

;скидається в 0)

adc dx,cx; скласти старші слова

; так це буде працювати некоректно

; так як з моменту останньої

; операції складення зміст

; флаг переносу втрачено




Поделиться с друзьями:


Дата добавления: 2015-04-25; Просмотров: 447; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.