![]() | |
![]() |
Электронные компоненты Мануалы ® мы Так, в случае отказа от организации вычислительного цикла программа из примера 7.4 будет при = 6 иметь L,, = 48 ячеек и Твып = 208 тактов, т. е. время выполнения программы сократится на Э0% за счет увеличения числа ячеек ПЗУ в три раза. Рассмотрим теперь выполнение операций сложения и вычитания чисел со знаками. Знак числа принято размещать в старшем разряде старшего байта. В МП серии К580 значение разряда а, дублируется во флаге знака S, если результат выполнения команды влияет на этот флаг. Положительным числам соответствует значение 5 = 0, а отрицательным - 5=1. При обработке чисел со знаками непосредственно сложению и вычитанию предшествует анализ знаков операндов. Блок-схема алгоритма вычисления у = а±р представлена на рис. 7.4. Здесь предполагается, что операнды и результат хранятся в прямом коде. Операция вычитания отличается от операции сложения лишь инверсией знака числа р. Отметим, что во многих случаях оказывается целесообразным хранить числа не в прямом, а в дополнительном коде, так как это позволяет уменьшить общее число переходов от прямого кода к обратному и наоборот. О наличии переполнения разрядной сетки, которое может произойти при сложении как двух положительных, так и двух отрицательных чисел свидетельствует факт неравнозначности значений флагов CY. и S; QY@S- I переполнения; 1 I, если есть переполнение. Отметим, что такое использование флагов СУ и iS соответствует представлению чисел в модифицированном дополнительном коде, в котором для записи знака числа отводятся два старших разряда. Если же складываются числа разных знаков, то переполнение не может произойти, а значение флага СУ игнорируется. Умножение и деление. Умножение чисел ар = Y в МП реализуется с помощью команд суммирования и сдвига. Для получения у к сумме частичных произведений 2 добавляется а, если очередной разряд р=1, после чего осуществляется сдвиг 2 ; указанная процедура повторяется для каждого разряда р. При этом анализ Р можно начинать сО старших разрядов и соответственно сдвигать влево, либо действовать наоборот. Знак у обычно формируют независимо от описанной процедуры умножения на основе анализа знаков сомножителей, а при осуществлении умножения используют прямые коды сомножителей без знака. В этом случае необходимо учитывать, что освобож- Сброс регистра L Установка счетчика В I Шаг I Влево ВВой старшего разряда в CY
Рис. 7.5. Блок-схема умножения восьмиразрядных двоичных чисел дающиеся разряды при сдвигах 2 должны заполняться нулями. Пример 7.5. Умножение двух восьмиразрядных двоичных чисел ар=7. Поскольку для представления суммы частичных произведений 2 и самого результата 7 потребуется 16 разрядов, то вознииает необходимость в осуществлении сдвига двухбайтовых слов. Для этого удобно воспользоваться командой DAD Н, которая осуществляет логический сдвиг содержимого пары регистров H-L на один разряд влево, т. е. в сторону старших разрядов. Множитель 3 целесообразно расположить в аккумуляторе, с тем чтобы осуществлять анализ разрядов 3 с помощью команд циклического сдвига влево и условного перехода по CY. Операцию добавления а к S можно производить с помощью команды DAD D, если а поместить в регистр Е, а в регистр D записать «О». Итак, получаем следующее распределение внутренних регистров ЦПЭ: А содержит 3; D-Е - а; Н-L - S, а после выполнения программы - результат у; В - счетчик циклов. Блок-схема алгоритма дана на рис. 7.5, далее приведена соответствующая ей программа умножения. Сброс регистра суммы частичных произведений Начальная установка счетчика циклов. Сдвиг S влево. Ввод очередного разряда Р и CY. Переход, если очередной разряд р равен нулю. Добавление а к S. Счет циклов. Переход, если вычисления не закончены. * Программа занимает 15 ячеек памяти и ее выполнение длится максимально 409 тактов. Деление двоичных чисел основывается на последовательном вычитании делителя из разрядов делимого и остатка от деления. Таким образом, деление реализуется с помощью операций сдвига, вычитания и анализа результата вычитания. По аналогии с умножением здесь целесообразно осуществлять деление чисел без знаков, а знак частного определять отдельно на основе анализа знаков операндов. Перед выполнением деления необходимо убедиться, что делитель не равен нулю. Пример 7.6. Деление двух целых положительных восьмиразрядных чисел а:Р = 7(6), где 7 - частное, а б - остаток от деления а на 3. В этом случае также целесообразно использовать команду DAD Н для реализации сдвига а влево. Поэтому получаем следующее распределение регистров: L - содержит а, С содержит Р, В - счетчик циклов, D и £ - соответственно выделены для записи 7 и 6, а Я должен содержать О до начала вычислений, а затем - частичное делимое - а. Блок-схема алгоритма деления дана на рис. 7.6, а соответствующая программа приведена далее.
® Начальная установка Вин DCR В ; Блок 5. Счет циклов вычисления. JNZ М2 ; Переход, если счет не закончен. MOV Е, Н ; Блок 6. Пересылка В в Е. Дадим дополнительные пояснения к составленной программе. Блок 1- Устанавливается начальное состояние регистров В и Н. Блок 2. В каждом из восьми циклов в И формируется частичное делимое а путем сдвига влево содержимого H-L. При этом каждый раз в fi вводится из L очередной разряд aj делимого а. Затем в А производится вычисление частичного остатка б = а-3. Блок 3. Производится анализ содержимого флага CY по следующим правилам: если CY = = 1, т. е. а < 3 и займ имел место, то следует записать очередной разряд частного Vi = О и перейти к счету циклов; если CY = О, т. е. а > Р и займ отсутствовал, то следует записать У1= 1, и перед переходом к счету циклов необходимо запомнить значение & в Н, чтобы использовать его при формировании значения а Б следующем цикле вычислении. Блок 4. Частичное частное 7 сдвигается влево и к нему дописывается очередной разряд Уг = CY. Блок 5. Производится счет циклов и определяется окончание вычислений. Блок 6. Полученный в Н остаток б пересылается в Е. Отметим, что частное 7 сформировано в D, а делимое а отсутствует, так как регистр L заполнен нулями, и /У - содержит последнее значение частичного делимого а = б. Программа деления занимает 18 ячеек памяти и требует для своего выполнения максимально 555Г. Уормиробаиие ос и Вычисление a-j5 3 Нет I Пересылка О В Н Запись D I Сиет В В Пересылка 66 Е Рис. 7.6. Блок-схема деления восьмиразрядны* двоичных чисел Рассмотренные варианты выполнения арифметических действий с помощью МП подразумевают представление чисел в форме с фиксированной запятой (точкой). Обработку данных с плавающей запятой выполняют путем раздельной обработки порядков и мантисс чисел на основе рассмотренных алгоритмов и программ выполнения операций над числами, представленными в форме с фиксированной запятой. Следует отметить, что программы реализаций арифметических операций над числами, представленными в форме с плавающей запятой, достаточно сложны и их выполнение занимает большое время, в результате чего такие программы редко применяются в МПВУ. Программная реализация комбинационных логических схем. В системе команд МП предусмотрены команды, реализующие основные логические операции: инверсию, конъюнкцию, дизъюнкцию и сумму по модулю два. В совокупности с командами, обеспечивающими хранение и перемещение данных, а также с командами условных переходов логические команды позволяют реализовать любую комбинационную логическую схему и любой конечный автомат с памятью. Комбинационная схема представляет собой аппаратную реализа- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 [ 68 ] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||