Умножение двоичных чисел без знака
Таблица 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, можно обращаться к значению в этой области как к слову. В заключение можно исследовать в отладчике программу на разных наборах сомножителей.
Еще по теме Умножение двоичных чисел без знака:
- Умножение влияний
- БЕЗ СЛЕДОВ, БЕЗ ТЕНИ, БЕЗ ЭГО
- Трактовка чисел нумерологического эгрегора
- Характеристики чисел года соляра
- 2. Правовая охрана товарного знака (знака обслуживания)
- 2. Всестороннее развитие без детской любви – ничто. Гармония с самим собой немыслима без гармонических отношений с другими
- Звук -"ЭУОАИЫАОМ" - это энергетическая цепочка вибрации чисел 4-3-7-1-1-2-1-7-5.
- Звук "МН" - это вибрации чисел 5-6 (Юпитер-Венера).
- Звук "ЮЯ"- это вибрация чисел 5-6 (Юпитер-Венера).
- Звук "ИЯ" - это вибрации чисел 1-6 (Солнце-Венера).
- Звук "ОЙ" - это вибрации чисел 7-2 (Сатурн- Луна).
- Звук "ПА" - это вибрации чисел 8-1 (Уран - Солнце).
- Звук "ОЕ",- это вибрации чисел 7-6 (Сатурн-Венера).
- Звук "ПЕОХО" - это энергетическая цепочка вибрации чисел 8-6-7-5-7.
- Очень важный звук - "НГ" - это вибрации чисел 6-4 (Венера-Меркурий).
- КРУГ ЗНАКА
- 1.9.3. Специфика знака
- 3. Регистрация и использование товарного знака
- 1.1.3. Специфика знака
- 1.12.3. Специфика знака