<<
>>

Умножение двоичных чисел без знака

Для умножения чисел без знака предназначена команда mul сомножитель_l Как видите, в команде указан всего лишь один операнд-сомножитель. Второй операнд-сомножитель задан неявно. Его местоположение фиксировано и зависит от размера сомножителей.
Так как в общем случае результат умножения больше, чем любой из его сомножителей, то его размер и местоположение должны быть тоже определены однозначно. Варианты размеров сомножителей и мест размеще- ния второго операнда и результата приведены в табл. 8.2.
Таблица 8.2. Расположение операндов и результата при умножении t Все прилагаемые к книге файлы можно найти по адресу http://www.piter.com/download. — Примеч. ред.

Из таблицы видно, что произведение состоит из двух частей и в зависимости от размера операндов размещается в двух местах — на месте второго сомножителя (младшая часть) и в дополнительных регистрах АН, DX, EDX (старшая часть).

Как же динамически (то есть во время выполнения программы) узнать, что результат доста- точно мал и уместился в одном регистре или что он превысил размерность регист- ра и старшая часть оказалась в другом регистре? Для этого привлекаются уже из- вестные нам флаги переноса CF и переполнения OF: И если старшая часть результата нулевая, то после завершения операции CF = О иОF=О; is если же флаги CF и OF ненулевые, это означает, что результат вышел за пределы младшей части произведения и состоит из двух частей, что и нужно учитывать при дальнейшей работе. Рассмотрим следующий пример программы (листинг 8.5).
Листинг 8.5. Умножение

В строке 14 производится умножение значения в rez_l на число в регистре AL.

Согласно информации из табл. 8.2, результат умножения будет располагаться в регистре AL (младшая часть) и в регистре АН (старшая часть). Для выяснения размера результата в строке 15 командой условного перехода JNС анализируется состояние флага CF, и если оно не равно 1, то результат остается в рамках регистра AL. Если же CF = 1, то выполняется команда в строке 16, которая формирует в поле rez_h старшее слово результата. Команда в строке 18 формирует младшую часть результата. Теперь обратите внимание на сегмент данных, а именно на строку 6. В этой строке содержится директива label. Мы еще не раз будем сталкиваться с этой директивой. В данном случае она назначает еще одно символическое имя rez адре- су, на который уже указывает другой идентификатор rez_l. Различие заключается в типах этих идентификаторов — rez имеет тип слова, который ему назначается директивой label (имя типа указано в качестве операнда label). Введя эту директи- ву в программе, мы подготовились к тому, что, возможно, результат операции умножения будет занимать в памяти целое слово. Обратите внимание на то, что мы не нарушили принципа: младший байт по младшему адресу. Далее, используя имя rez, можно обращаться к значению в этой области как к слову. В заключение можно исследовать в отладчике программу на разных наборах сомножителей.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Умножение двоичных чисел без знака:

  1. Умножение влияний
  2. БЕЗ СЛЕДОВ, БЕЗ ТЕНИ, БЕЗ ЭГО
  3. Трактовка чисел нумерологического эгрегора
  4. Характеристики чисел года соляра
  5. 2. Правовая охрана товарного знака (знака обслуживания)
  6. 2. Всестороннее развитие без детской любви – ничто. Гармония с самим собой немыслима без гармонических отношений с другими
  7. Звук -"ЭУОАИЫАОМ" - это энергетическая цепочка вибрации чисел 4-3-7-1-1-2-1-7-5.
  8. Звук "МН" - это вибрации чисел 5-6 (Юпитер-Венера).
  9. Звук "ЮЯ"- это вибрация чисел 5-6 (Юпитер-Венера).
  10. Звук "ИЯ" - это вибрации чисел 1-6 (Солнце-Венера).
  11. Звук "ОЙ" - это вибрации чисел 7-2 (Сатурн- Луна).
  12. Звук "ПА" - это вибрации чисел 8-1 (Уран - Солнце).
  13. Звук "ОЕ",- это вибрации чисел 7-6 (Сатурн-Венера).
  14. Звук "ПЕОХО" - это энергетическая цепочка вибрации чисел 8-6-7-5-7.
  15. Очень важный звук - "НГ" - это вибрации чисел 6-4 (Венера-Меркурий).
  16. КРУГ ЗНАКА
  17. 1.9.3. Специфика знака
  18. 3. Регистрация и использование товарного знака
  19. 1.1.3. Специфика знака
  20. 1.12.3. Специфика знака