WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Програмування на мові Асемблер - Реферат

Програмування на мові Асемблер - Реферат

cf встановлюється в 1, якщо в попередньому додаванні виникло переповнення . Тому adc частіше виконується після add, яке додає багатобайтові значення, повідомляючи про переноси , які виникають при додаванні окремих байтів.
3) Для сумування в регістрі ах окремих байтів 16-бітового значення записуємо по адресу sum, можна використовувати слідуючі команди які подвоюють слово sum:
mov ax, [wordsum] ;переслати в ax знач.[sum]
add al, [byte snm] ;додати молодший байт
adc ah [byte sum+1] ; додати старший байт з мож-
ливим переносом
mov [wordsum] , ax ;переслати одержане значення
назад в пам'ять
Пам'ятаєм, що в слові байти зберігаються в зворотньому порядку 1.к. загружає значення слова в ах;
2.к.задає один з другим молодші значущі байти, записуючи в al, і вип.переп. виснаження переносу встановлює cf в1; 3.к. додає цей можливий перенос до суми старших знач.байтів.4.к.записує кінцевий результат назад в пам'ять
Оскільки 8086 може безпосередьо працювати з словами ,то ці ж дії можна виконати двома командами:
mov ax, [word sum] ;переслати в ах значення
[sum]
add [word sum] ,ax ; додати [sum] до самого
себе
add не може додавати два значення , записані в пам'яті , тому потрібно визначити хоч один регістр
в який і заслати [sum].
В цих випадках оператори byte i word інформують асемблер про тип даних, які адресує[sum]. В деяких
випадках їх можна не використовувати, проте вони не зашкодять.
4) add i adc можуть додавати до регістра і значення в пам'яті безпосередні (літеральні) значення:
add bx,5 ;bx bx+5
5) Щоб швидше додати 1 до деякого значення замість add використаємо inc, яка вимагає лише одного операнда.
inc ax ; ax ax+1
inc bx ; bx bx+1
inc cx ; cx cx+1
inc dx ; dx dx+1
Ці команди збільшують на 1 значення 4-х регістрів загального призначення (16-бітові)
Можна на 1 збльшити 8-бітовий регістр:
inc dh ; dh dh+1
КОМАНДИ ВІДНІМАННЯ
По своїй формі віднімання в Ас.схоже з додаванням
Команда sum віднімає значення байтів або слів.
Команда sbb діє аналогічно, проте враховує можливу
помилку при попередньому відніманні багатобайтових
значень.
1) sub ax , bx ax ax-bx
2) Можна віднімати два регістри також можна віднімати безпосередні значення:
sub cx,5 ;cx cx-5
sub dx,[score] ; dx dx-[score]
sub [answer],3 ;[answer] [answer]-3
sub ax,1 ; ax ax-1
3) Останню команду можна замінити командою dec,
яка віднімає 1 з регістра або значення в пам'яті
На 1 можна зменшити також значення представлені байтом або словом.
dec ax ;ax ax-1
dec dl ;dl dl-1
dec si ;si si-1
ДИВНІ ВІДНІМАННЯ
Чому команди Neg (змінює знак двійкового значення) і Cmp (порівнює дві величини) стоять разом з командами віднімання ?
1) В випадку з neg CPU 8086 віднімає відповідні значення з 0.Це значення може бути записане в регістрі або пам'яті. При відніманні значень з 0 одержується значення в додатковому коді , або інакше двійкове доповнення цього значення, що
еквівалентне заміні всіх 0 на 1, а 1на 0 додаємо 1 Простіше скористатися командою neg:
neg ax ; одержання двійкового доповнення ах
neg [value] ;одер. Двійкового доповнення [value]
2) Більшість процесорів цифрових виконують порівняння шляхом віднімання одного значення з другого, а потім порівнюють результат. При цьому встановлюють біти різних прапорів описуючи тим самим результат наприклад, є він 0, від'ємним або додатнім. Cmp виконує віднімання аналогічно ком. Sub, проте зберігає при цьому тільки значення прапорів, які можуть перевірятись іншими командами,
МНОЖЕННЯ І ДІЛЕННЯ БЕЗНАКОВИХ ЗНАЧЕНЬ.
МНОЖЕННЯ І ДІЛЕННЯ ЗНАКОВИХ ЗНАЧЕНЬ.
Для правильного виконання множення і ділення вимагається бути уважним. Потрібно слідкувати за тим, щоб помістити значення в потрібні регістри. Після виконання операції потрібно уважно одержувати результат.
За роботою команд mul, imul, div, i idiv прослідкуємо на прикладі програми MULTDIV.ASM
Команди знакового множення (imul) і ділення (idiv)
працюють аналогічно mul div і використають ті ж регістри.(Буква "i" в символічному імені використовується для цілих чисел, показуючи, що допускаються як додатні так і від'ємні значення)
Різні допустимі діапазони значень.
Знаковий байт змінюється від -128 до +127
Знакове слово змінюється -32768 до 32767
в програмі, в якій використовується imul i idiv потрібно пам'ятати що:
1) від'ємний результат представляється в двійковому додатньому коді,
2) Будь-який залишок має той же знак, щой частка
3) Якщо попробувати виконати ділення на 0, і якщо результат від ділення не буде поміщатись в заданий операнд призначення, то буде генеруватись переривання ділення на 0, яке зупинить програму.
ПЕРЕТВОРЕННЯ БАЙТІВ , СЛІВ І ПОДВІЙНИХ СЛІВ
При використанні знакових двійкових значень часто потрібно перетворювати 8-бітові значення байтів в 16-бітові слова, зокрема, для підготовки до множення і ділення. Ці перетворення виконувати складно, тому для спрощення введено команди:
cbw-перетворити байт в слово
cwb-перетворити слово в двійкове слово
Команда cbw розширює 8- бітове значення до 16-бітового
Команда cwb розширює 16-бітове значення до 32-бітового двійкового слова.
Ці команди виконують однакові дії,за винятком кількості опрацьованих бітів.
Потрібно пам'ятати про обмеження:
Початкове значення для cbw повинно знаходитись в регістрі al 16-бітовий результат завжди поміщається в ах.
Початкове значення для cwd повинно зберігатись регістр ах 32-бітовий результат завжди поміщається в dx i ax.Як правило cbw i cwd використовуються разом з командами imul i idiv при необхідності ділення та множення байтової величини на слово.
Проте ці команди можна використовувати і в інших цілях.
Loading...

 
 

Цікаве