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



Download 12,06 Mb.
Pdf ko'rish
bet262/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   258   259   260   261   262   263   264   265   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

х
 -  Исходное
значение х размещается в вершине стека сопроцессора в регистре
и должно
лежать в диапазоне
 х  1.
 у
 х в регистре
Эта команда
может быть
для вычисления различных показательных функций
(например, далее
как она используется для возведения числа в степень).
Единица вычитается для того, чтобы получить точный результат, когда значе-
ние х близко к
Вспомните, что нормализованное число всегда содержит
в качестве первой
цифры единицу. Поэтому, если в результате вычисле-
ния функции Т
число
то команда F2XM1, вычитая 1
из этого числа и
нормализуя результат, формирует больше значащих цифр,
то есть делает его
точным. Неявное вычитание единицы командой
ком-
пенсируется
FADD с единичным операндом.


492 Глава
Архитектура и программирование сопроцессора
Команда
— команда вычисления значения функции 2 у
Исход-
ное значение х размещается в вершине стека сопроцессора, а исходное значение
у — в регистре
Значение х должно лежать в диапазоне 0  х
а значение
у — в диапазоне
Перед тем как осуществить запись результата z в вер-
шину стека, команда
выталкивает значения х и у из стека и только после
этого производит запись z в регистр
Команды сопроцессора F2XM1 и
очень полезны, в частности, для реализа-
ции операции возведения в степень любого числа по любому основанию. Спе-
циальной команды в сопроцессоре для возведения в степень нет. Поэтому про-
граммисту нужно искать подходящую формулу приведения, которая позволит
реализовать отсутствующую операцию имеющимися программно-аппаратными
средствами сопроцессора. Возведение в произвольную степень числа с любым ос-
нованием производится по формуле:
Вычисление значения выражения у •
для любого у и х  О производится
специальной командой сопроцессора
рассмотренной ранее. Вычисление 1
х
производится командой
(лишнее вычитание единицы пока не замечаем, так
как его всегда можно компенсировать сложением с единицей). Но в последнем
действии есть тонкий момент, который связан с тем, что величина аргумента х долж-
на лежать в диапазоне: -1
1. А как быть в случае, если х превышает это значе-
ние (например,
При вычислении выражения 3 •
командой
вы
получите в стеке значение 12. Попытка вычислить значение
командой F2XM1 ни
к чему не приведет — результат окажется неопределенным (по моим наблюдени-
ям, значение
попросту не изменяется). В этой ситуации логично вспомнить
о другой команде сопроцессора, FSCALE, которая также вычисляет значение выра-
жения Т, но для целых значений х со знаком. Применив формулу
 = •
по-
лучаем решение проблемы. Разделяем дробный показатель степени, больший |1|,
на две части — целую и дробную. После этого вычисляем отдельно командами
FSCALE и F2XM1 степени двойки и перемножаем результаты (не забываем компен-
сировать вычитание единицы в команде
последующим сложением резуль-
тата с единицей).
Далее представлен обобщенный алгоритм вычисления степени произвольного
числа х по произвольному показателю у (он не претендует на оптимальность ре-
шения; его основное назначение — раскрытие принципов реализации этой опера-
ции).
Загрузить в стек основание степени х.
2. Загрузить в стек показатель степени у и проверить его знак. Если у < О, то за-
помнить этот факт (для шага 8) и заменить в стеке значение у его модулем (это
следует из формулы
=
3. Командой FYL2X вычислить значение выражения z = у
4. Проверить z:
П если значение
то обозначить z как
п если значение \z\ > 1, то представить z в виде двух слагаемых г\ +
где  —
целое значение, a z2 — значение меньше единицы (например, число 16,84


Система команд сопроцессора 493
следует
в виде суммы 16 + 0,84); в программе это можно выпол-
нить путем
вычитания единицы из начального значения г до
тех пор, пока оно не станет меньше единицы (количество вычитаний нужно
запомнить,
через п).
5. Выполнить команду
с аргументом z2.
6. Выполнить
FLD1 и FADD, компенсирующие единицу, которая была вы-
чтена из
функции
на шаге 5 командой
7. Выполнить
FSCALE с аргументом zl. Переменную
нужно инициали-
зировать нулем,
позволит получить корректный результат, даже если ис-
ходное значение z было меньше единицы.
8. Перемножить
полученные на шагах 6 и 7, — в вершине стека ока-
жется результат
в степень. Если показатель степени, проверяемый
на шаге 2, был
необходимо единицу разделить на этот резуль-
тат. Для этого в
загружаем единицу командой FLD1 и применяем команду
FDIV.
Данный алгоритм
программа листинга
Листинг
Возведение числа в произвольную степень
db
0
2.0
proc
masm
model
flag
dd
у dt
x dt
. code
main
mov ax
mov ds
f i n i t
у
x
ftst
f
sahf
jnc ml
inc flag
fabs
ml: fxch
fyl2x
fst st(l)
fabs
;сравним |z|
fcom
f stsw
sahf
jnc
small
данных
степени
степени
процедуры main
@data
ах
ах
переход, если х >=0
flag, если х<0
с единицей:
ax
не сравнимы
1 |z|то переход на тЗ
то приводим к формуле z=zl+z2, где zl - целое,
f дробное и z2xor ecx,
вычитаний


494 Глава 17. Архитектура и программирование сопроцессора
Листинг
st(l), st(0)
ax
не сравнимы
jz
jnc ra2 ;если |z|jmp
;если
то переход на
mov
1
jmp $+7
mov
ecx
1
степени
fscale
fldl
fscale
fxch
на отрицательную степень
cmp flag, 1
jnz exit
fldl
fxch
fdiv
e x i t :
mov ax,
int
main endp
end main
Используя тождество
-

можно вычислить логарифм
любого числа по любому основанию. Значения
и некоторых дру-
гих логарифмических функций вычисляются соответствующими командами со-
процессора: FLDL2T, FLDL2E,
FLDLN2.
Еще одна команда FYL2XP1 — команда вычисления значения функции z =
 у
+
Исходное значение х размещается в вершине стека сопроцессора —
регистре
а исходное
 у — в регистре
 х должно лежать
в диапазоне 0  \х\  1
, а значение у — в диапазоне
 у
Перед тем
как записать результат z в вершину стека — регистр ST(0), команда FYL2XP1 вытал-
кивает из стека значения х и у.
Очень интересную программу можно найти среди файлов, прилагаемых к кни-
ге, в подкаталоге
каталога данной главы. Программа преобразует содер-
жимое вершины стека в символьный вид и выводит его на экран. В этом примере
иллюстрируется работа многих уже рассмотренных команд.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   258   259   260   261   262   263   264   265   ...   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