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



Download 12,06 Mb.
Pdf ko'rish
bet110/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   106   107   108   109   110   111   112   113   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Умножение
На примере сложения и вычитания неупакованных чисел мы выяснили, что стан-
дартных алгоритмов для выполнения этих действий над BCD-числами нет и про-
граммист должен сам, исходя из требований к своей программе, реализовать эти
операции. Реализация двух оставшихся операций — умножения и деления — еще
сложнее. В системе команд процессора присутствуют только средства для умно-
жения и деления одноразрядных неупакованных BCD-чисел. Для их умножения
необходимо воспроизвести описанную далее процедуру.
1. Поместить один из сомножителей в регистр AL (как того требует команда MUL).
2. Поместить второй сомножитель в регистр или память, отведя для него байт.
3. Перемножить сомножители командой
(результат, как и положено, окажет-
ся в регистре АХ).
4. Скорректировать результат, который, конечно, будет представлен в двоичном
коде.
Для коррекции результата после умножения в целях представления его в сим-
вольном виде применяется специальная команда
(ASCII Adjust for Multipli-
cation). Она не имеет операндов и работает с регистром АХ следующим образом.
1.
10.
2. Результат деления записывается так: частное — в AL, остаток — в АН.
В результате после выполнения команды
в регистрах AL и АН находятся
правильные двоично-десятичные цифры произведения двух цифр.
В листинге
приведен пример умножения BCD-числа произвольной раз-
мерности на однозначное BCD-число.
Листинг
Умножение неупакованных
;неупакованное число 76
;неупакованное число 4
входа в программу
сомножителя 1
сх длина наибольшего сомножителя 1
<1> masm
<2> model
<3> stack
<4>
<5> b db
<6> с db
proizv
<8>
small
256
6,7
4
db 4 dup (0)
<9> main:
<18>
ml:
mov
mov
xor
2
xor
xor
xor
mov
mov al,b[si]


Арифметические операции над двоично-десятичными числами
<20>
<21>
<22>
<23>
<25>
<26>
<27>
<28>
<29>
<30>
<31>
<32>
<33>
с
аат
ааа
mov
mov proizv[bx]
si
inc bx
loop
mov proizv[bx]
mov
int 21h
end main
умножения
предыдущий перенос
результат сложения с переносом
перенос
,al
;цикл на метку ml
,dT
последний перенос
Данную программу можно легко модифицировать для умножения BCD-чисел
произвольной длины. Для этого достаточно представить алгоритм умножения
в «столбик». Листинг 8.10 можно использовать для получения частичных произ-
ведений в этом алгоритме. После их сложения со сдвигом получится искомый ре-
зультат. Попробуйте написать эту программу самостоятельно. Если же данная за-
дача окажется для вас непосильной, ее решение вы можете найти в [8].
Перед окончанием обсуждения команды
необходимо отметить,
ее можно
применять для преобразования двоичного числа в регистре AL в неупакованное
BCD-число, которое окажется в регистре АХ: старшая цифра результата — в АН,
младшая — в AL. Понятно, что двоичное число должно быть в диапазоне 0...99.
Деление
Процесс деления двух неупакованных BCD-чисел несколько отличается от дру-
гих рассмотренных ранее операций с ними. Здесь также требуются действия по
коррекции, но они должны выполняться до основной операции, выполняющей
непосредственно деление одного BCD-числа на другое BCD-число. Предваритель-
но в регистре АХ нужно получить две неупакованные BCD-цифры делимого. Это
делает программист удобным для него способом. Далее для коррекции результата
деления в целях представления его в символьном виде нужно выполнить команду
A A D (ASCII Adjust for Division).
Команда AAD не имеет операндов и преобразует двузначное неупакованное BCD-
число в регистре АХ в двоичное число, которое впоследствии будет играть роль
делимого в операции деления. Кроме преобразования, команда AAD помещает по-
лученное двоичное число в регистр AL. Делимое, естественно, является двоичным
числом из диапазона
Алгоритм, по которому команда A A D осуществляет это
преобразование, выглядит следующим образом.
1. Умножить на 10 старшую цифру исходного BCD-числа в АХ (содержимое АН).
2. Выполнить сложение АН + AL, результат которого (двоичное число) занести в
3. Обнулить содержимое
Далее программисту нужно выполнить обычную команду деления DIV для де-
ления содержимого АХ
одну BCD-цифру, находящуюся в байтовом регистре или
байтовой ячейке памяти. Деление неупакованных BCD-чисел иллюстрирует лис-
тинг


 Глава 8. Арифметические команды
Листинг
Деление неупакованных BCD-чисел
<1>
< 2 >
<3>
данных
<4> b db 1,7
BCD-число 71
<5> с db 4
<б>
кода
<7> m a i n : ;точка входа в программу
<9>
al,b
<10> aad
перед делением
<11> div с ;в
BCD — частное, в ah BCD - остаток
<13> exit:
Аналогично
команде A A D можно найти и другое применение — использо-
вать ее для перевода неупакованных BCD-чисел из диапазона
в их двоичный
эквивалент.
Для деления чисел большей разрядности так же, как и в случае умножения,
нужно реализовывать, например, алгоритм деления в «столбик» или найти более
оптимальный путь. Любопытный и настойчивый читатель, возможно, самостоя-
тельно разработает эти программы. Но это делать совсем необязательно. Среди
файлов, прилагаемых к книге, в каталоге данной главы приведены тексты макро-
команд, которые выполняют четыре основных арифметических действия с BCD-
числами любой разрядности. Кроме этого в [8] вы найдете дополнительный мате-
риал по этому вопросу.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   106   107   108   109   110   111   112   113   ...   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