Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet97/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   93   94   95   96   97   98   99   100   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Листинг 8.3. Вычисление суммы чисел
<1>
<2>
<3> model small
<4> stack 256
<5>
<6> a
db 254
<7>
;сегмент кода
<8> main:
<9> mov
<10> mov
xor
add
add
a
ml ;если нет переноса, то перейти на ml
adc
ах сумма с учетом переноса
<17> ml:
<18> exit:
<19> mov
выход
<20> int 21h
<21> end main ;конец программы
В строках 13-14 создана ситуация, когда результат сложения выходит за гра-
ницы операнда. Эта возможность учитывается строкой 15, где команда
(хотя
можно было обойтись и без нее) проверяет состояние флага CF. Если он установ-
лен в 1, то результат операции получился большим по размеру, чем операнд, и для
его корректировки необходимо выполнить некоторые действия. В данном случае
мы просто полагаем, что границы операнда расширяются до размера АХ, для чего


 Глава 8. Арифметические команды
учитываем перенос в старший разряд командой ADC (строка 16). Напомню, что ис-
следовать работу команд сложения без учета знака вы можете в отладчике. Для
этого введите в текстовом редакторе текст листинга 8.3, получите исполняе-
мый модуль, запустите отладчик и откройте в нем окна командами View Dump
и
Registers. Далее, в пошаговом режиме отладки можно более наглядно про-
следить за всеми процессами, происходящими в процессоре во время работы про-
граммы.
Сложение двоичных чисел со знаком
Теперь настала пора раскрыть небольшой секрет. Дело в том, что на самом деле
процессор не подозревает о различии между числами со знаком и числами без зна-
ка. Вместо этого у него есть средства фиксации возникновения характерных ситуа-
ций, складывающихся в процессе вычислений. Некоторые из них мы рассмотрели
ранее при обсуждении команд сложения чисел без знака — это учет флага перено-
са CF. Установка этого флага в 1 говорит о том, что произошел выход за пределы
разрядности операндов. Далее с помощью команды ADC можно учесть возможность
такого выхода (переноса из младшего разряда) во время работы программы.
Другое средство фиксации характерных ситуаций в процессе арифметических
вычислений — регистрация состояния старшего (знакового) разряда операн-
да, которое осуществляется с помощью флага переполнения OF в регистре EFLAGS
И).
В главе 4 мы рассматривали, как представляются числа в компьютере. При этом
отмечали, что положительные числа представляются в двоичном коде, а отрица-
тельные — в дополнительном. Рассмотрим различные варианты сложения чисел.
Примеры призваны показать поведение двух старших битов операндов и правиль-
ность результата операции сложения.
Первый вариант сложения чисел:
30566 =
+
00687 =
31253 = 0111101000010101.
Следим за переносами из 14-го и
разрядов и за правильностью результа-
та: переносов нет, результат правильный.
Второй вариант сложения чисел:
30566 =
+
30566 =
61132 =
Произошел перенос из 14-го разряда; из 15-го разряда переноса нет. Результат
неправильный, так как имеется переполнение — значение числа получилось боль-
ше, чем то, которое может иметь 16-разрядное число со знаком (+32 767).
Третий вариант сложения чисел:


Арифметические операции над целыми двоичными числами
-30566 = 10001000 10011010
+
-04875 =
-35441 =
Произошел перенос из 15-го разряда, из 14-го разряда нет переноса. Результат
неправильный, так как вместо отрицательного числа получилось положительное
(в старшем бите находится 0).
Четвертый вариант сложения чисел:
-4875 =
+
-9750 =
Есть переносы из 14-го и
разрядов. Результат правильный.
Таким образом, мы исследовали все случаи и выяснили, что ситуация перепол-
нения (установка флага OF в 1) происходит при переносе:
* из 14-го разряда (для положительных чисел со знаком);
в из 15-го разряда (для отрицательных чисел).
И, наоборот, переполнения не происходит (то есть флаг OF сбрасывается в
если есть перенос из обоих разрядов или перенос отсутствует в обоих разрядах.
Таким образом, ситуация переполнение регистрируется процессором с помо-
щью флага переполнения
Дополнительно к флагу OF при переносе из старшего
разряда устанавливается в 1 и флаг переноса CF. Так как процессор не знает о су-
ществовании чисел со знаком и без
то вся ответственность за правильность
действий с получившимися числами ложится на программиста. Теперь, наверное,
понятно, почему мы столько внимания уделили тонкостям сложения чисел со зна-
ком. Учтя все это, мы сможем организовать правильный процесс сложения чисел —
будем анализировать флаги CF и OF и принимать правильное решение! Проанали-
зировать флаги CF и OF можно командами условного
и
соот-
ветственно (глава 10).
Что же касается команд сложения чисел со знаком, то из изложенного ранее
понятно, что в архитектуре IA-32 сами команды сложения чисел со знаком те же,
что и для чисел без знака.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   93   94   95   96   97   98   99   100   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish