Реферат: Арифметичні команди

Міністерство освіти і науки України

Чернівецький національний університет імені Юрія Федьковича

Факультет комп’ютерних наук

Реферат

Арифметичні командита безумовні-умовні переходимови Ассемблер

 

2010


План

Арифметичнікоманди

Безумовні-умовніпереходи мови Асемблер

Командипорівняння

Списоклітератури

 


Арифметичні команди

Процесорисерії 80х86 містять у складі своєї системи команд спеціальні команди длявиконання арифметичних операцій над цілими числами. При цьому підтримуються триформи представлення цілих чисел: двійкова, двійково-десяткова (яку ще називаютьBCD, абревіатура від англійського Binary Coded Decimal) та ASCІІ-код (число якланцюжок десяткових цифр). У свою чергу, формат BCD може бути як упакованим,так і неупакованим. У рамках цих форматів цілі числа, що обробляються, можутьмати різну розрядність: байт (8 біт), слово (16 біт, або 2 байти), подвійнеслово (32 біти, або 4 байти, або 2 слова), учетверенне слово (64 біти, або 8байт, або 4 слова, або 2 подвійних слова). Формати з більшою розрядністюпроцесором безпосередньо не підтримуються, але можуть оброблятися програмно. Тавказаних форматів з надлишком вистачає для представлення всього діапазону цілихчисел, що зустрічаються на практиці. Необхідно додати, що всі типи цілих чиселв мовах високого рівня спираються на підтримувані процесором типи (char,short, int, long – прямі аналоги byte, word, dword, gword). Такожрозрізняються процесором випадки знакових та беззнакових чисел (для нихпередбачено різні команди множення та ділення). Робота з дійсними числамипроцесором безпосередньо не підтримується, але може бути покладена наспеціалізований математичний співпроцесор, який розширює систему команд РСопераціями над числами з плаваючою крапкою.

Необхідно бути особливо уважним при застосування однобайтовихрегістрів. Знакові значення тут можуть бути від -128 до +127.

Длябагатослівного сумування використовуйте команд ADC для врахування переносів відпопередніх сум. Якщо операція виконується в циклі, то з допомогою команди СLSвстановіть ознаку переносу в 0.

При діленнінеобхідно бути обережним з переповненнями. Якщо нульовий дільник є можливим, тозабезпечите перевірку цієї операції. Крім того, дільник повинен бути більшимвід вмісту регістра АН (для байту) або DX (для слова).Для множення або діленняна степінь двійки використовуйте зсуви.

Основніарифметичні команди над цілими двійковими числами:

inc операнд –операція інкремента, тобто збільшення значення операнда на 1;

add операнд_1,операнд_2 – команда додавання з принципом дії операнд_1 = операнд_1 +операнд_2;

adc операнд_1,операнд_2 – команда додавання з врахуванням ознаки переносу cf; принцип діїкоманди;

операнд_1 =операнд_1 + операнд_2 + значення cf,

dec операнд –операції декремента, тобто зменшення значення операнда на 1;

sub операнд_1,операнд_2 – команда віднімання з принципом дії операнд_1 = операнд_1 –операнд2;

sbb операнд_1,операнд_2 – команда віднімання з врахуванням позичання (ознака cf);

mul співмножник_1– команда множення чисел без знаку; знаходження співмножника_2 задано неявно:

Співмножник_1 Співмножник_2 Результат Байт al 16 біт в ах:al – молодша частина результату; ah – старша Слово ax 32 біт в парі dx:ax: ax – молодша частина результату; dx – старша Подвійне слово eax 64 біт в парі edx:eax: eax – молодша частина результату; edx – старша

imul операнд_1 (,операнд_2, операнд_3) – команда множення чисел зі знаком; виконується так само,як і команда mul;

div дільник –команда ділення чисел без знаку; дільник може знаходитися в пам’яті або врегістрі і мати розмір 8, 16 або 32 біти.

 


Знаходженняділеного задано неявно:

Ділене Дільник Частка Остача Слово 16 біт в регістрі ах Байт-регістр або комірка пам’яті Байт в регістрі al Байт в регістрі ah

32 біт

dx – старша частина

ах – молодша частина

16 біт – регістра бо комірка пам’яті Слово 16 біт в регістрі ах Слово 16 біт в регістрі dx

64 біт

edx – старша частина

еах – молодша частина

Подвійне слово

32 біт – регістр або комірка пам’яті

Подвійне слово

32 біт в регістрі еах

Подвійне слово

32 біт в регістрі edx

idiv дільник –команда ділення чисел зі знаком; виконується так само, як і команда div.

Арифметичні діїнад неупакованими BCD-числами:

aaa – корекціярезультату додавання для представлення в символьному вигляді; працює неявно зрегістром аl;

aas – корекціярезультату віднімання для представлення в символьному вигляді; працює неявно зрегістром al;

aam – корекціярезультату множення для представлення в символьному вигляді; працює неявно зрегістром ах;

aad – корекціярезультату ділення для представлення в символьному вигляді; працює неявно зрегістром ах.

Арифметичні діїнад упакованими BCD-числами:

daa – корекціярезультату додавання для представлення у десятковому вигляді;

das – корекціярезультату віднімання для представлення у десятковому вигляді.

Безумовні-умовні переходимови Асемблер

Від програм, якімають просту лінійну структуру, як правило, дуже мало користі. Практично кожнапрограма, яка має будь-яке практичне застосування, повинна аналізувати деякіумови, і залежно від виконувати ті чи інші дії, тобто містити розгалуження таумовні переходи. Класичним прикладом такої поведінки програми є так званий“захист від дурня”, коли програма перевіряє (знову з допомогою умовнихпереходів) коректність даних, що вводяться, або, скажімо, тип відеосистеми іверсію DOS чи факт успішного відкриття потрібного файлу.

У багатьохвипадках виникає необхідність багатократного повторення якихось одноріднихоперацій, тобто виконання циклу. Класичним прикладом циклічних програм єпрограми, що здійснюють обробку масивів (цикл по елементах масиву), файлі (циклпо записах файлу), керують подіями (цикл обробки подій), обчислюють щось заітераційними або рекурентними формулами. Для підтримки програм з циклічноюструктурою у складі системи команд процесорів 80х86 є спеціальні командиорганізації циклів. Але ці команди не володіють логічною повнотою (недозволяють організувати всі можливі і необхідні види циклів), тому в рядівипадків доводиться імітувати циклічну структуру вручну з допомогою умовних ібезумовних переходів по параметру циклу. Засоби мов високого рівня дляорганізації циклів всіх типів спираються на команди циклів процесора та накоманди умовного і безумовного переходів (при компіляції переводяться саме в цікоманди).

При використаннікоманди LOOP ініціалізуйте СХ додатнім числом, оскільки ця команда контролюєлише нульове значення: при від’ємному програма буде продовжувати роботу циклунескінченно.

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

Команда безумовногопереходу

jmp (модифікатор)адреса_переходу – безумовний перехід без збереження інформації про точкуповернення; адреса_переходу – мітка або адреса пам’яті.

Найчастішевикористовуються:

·         короткийвнутрішньосегментний перехід – відстань від команди jmp до адреси_переходу не більше ніж-128 або +127 байт:

jmp short ptr m1

не більше 35-40команд (127 байт)

m1:

або

m1

відстань небільше 35-40 команд (-128 байт)

jmp m1

·         внутрішньосегментнийперехід –дозволяються переходи в межах 64 Кбайт відносно наступної за jmp команди:

m1:

відстань більше128 байт і менше 64 Кбайт

jmp m1;

·         міжсегментнийперехід –для організації переходів між сегментами:

seg_1 segment

jmp far ptr m2;far обов’язкове

m1 label far

seg_1 ends

seg_2 segment

m2 label far

jmp m1; farобов’язкове

Модифікатори shortptr, near ptr i word ptr використовуються для організаціївнутрішньосегментних переходів, а far ptr i dword ptr – міжсегментних.

Командиумовного переходу:

·         jcxzмітка_переходу – перехід, якщо сх=0;

·         jecxz мітка_переходу– перехід, якщо есх=0.

Вонизручні про організації циклів. Але можуть адресувати лише короткі переходи – на-128 байтів або на +127 байтів від наступної за нею команди.

Командиорганізації циклів:

·         loop мітка_переходу– повторити цикл; команда зменшує вміст есх/сх на одиницю і якщо (есх/сх)>0, то керування передається на міткупереходу;

·         loop/loopzмітка_переходу – повторювати цикл, поки (есх/сх) <> 0 або zf=0;

·         loopne/loopnzмітка_переходу – повторювати цикл, поки (есх/сх) <> 0 або zf=1.

Командипорівняння

Командапорівняння сmр установлює ознаки залежно від значень операнда_1 та операнда_2.

Синтаксискоманди cmp:

cmp операнд_1,операнд_2.

Ознаки,які встановлює команда cmp, можна аналізувати спеціальними командами умовногопереходу:

jccмітка_переходу,

де сс визначаєконкретну умову, яка аналізується командою:

Типи операндів Мнемокод команди умовного переходу Критерій умовного переходу Значення ознак для здійснення переходу будь-які je операнд_1 = операнд+2 zf=1 будь-які jne операнд_1 <> операнд_2 zf=0 зі знаком jl/jnge операнд_1< операнд_2 s <> of зі знаком jle/jng операнд_1< = операнд_2 s <> of or zf=1 зі знаком jg/jnle операнд_1 > операнд_2 sf=of and zf=0 зі знаком jge/jnl операнд_1=> операнд_2 sf=of без знаку jb/jnae операнд_1< операнд_2 cf=1 без знаку jbe/jna операнд_1< = операнд_2 cf=1 or zf=1 без знаку ja/jnbe операнд_1 > операнд_2 cf=0 and zf=0 без знаку jae/jnb операнд_1 => операнд_2 cf=0

Командиумовного переходу та ознаки:

 

Назва ознаки Команда умовного переходу Значення ознаки для здійснення переходу Ознака переносу cf jc cf=1 Ознака парності pf jp pf=1 Ознака нуля zf jz zf=1 Ознака знаку sf js sf=1 Ознака переповнення of jo of=1 Ознака переносу cf jnc cf=0 Ознака парності pf jnp pf=0 Ознака нуля zf jnz zf=0 Ознака знаку sf jns sf=0 Ознака переповнення of jno of=0

Список літератури

П.Нортон, Д.Соухэ. Язык Ассемблерадля IBM PC. – Москва: “Компьютер”, 1993. – 352.

6. П.Нортон. Персональный компьютерфирмы IBM и операционная система MS DOS. – Москва: “Радио и связь”, 1992. – 416с.

7. В.Юров, С.Хорошенко. Assembler.Учебный курс. – Санкт-Петербург: “Питер Ком”, 1999. – 665 с.

еще рефераты
Еще работы по информатике, программированию