среда, 13 февраля 2013 г.

команда деление в информатике

Умножение чисел без знакаДля умножения чисел без знака предназначена командаmul сомножитель_1Как видите, в команде указан всего лишь один операнд-сомножитель. Второй операнд-сомножитель_2 задан неявно. Его местоположение фиксировано и зависит от размера сомножителей. Так как в общем случае результат умножения больше, чем любой из его сомножителей, то его размер и местоположение должны быть тоже определены однозначно. Варианты размеров сомножителей и размещения второго операнда и результата приведены в таблице 10.Таблица 10. Расположение операндов и результата при умноженииИз таблицы видно, что произведение состоит из двух частей и в зависимости от размера операндов размещается в двух местах на месте сомножитель_2 (младшая часть) и в дополнительном регистре ah, dx, edx (старшая часть). Как же динамически (т.Pе. во время выполнения программы) узнать, что результат достаточно мал и уместился в одном регистре или что он превысил размерность регистра и старшая часть оказалась в другом регистре? Для этого привлекаются уже известные нам по предыдущему обсуждению флаги переноса cf и переполнения of:1)Pесли старшая часть результата нулевая, то после операции произведения флаги cf = 0 и of = 0;2)Pесли же эти флаги ненулевые, то это означает, что результат вышел за пределы младшей части произведения и состоит из двух частей, что и нужно учитывать при дальнейшей работе.Умножение чисел со знакомДля умножения чисел со знаком предназначена команда[imul операнд_1, операнд_2, операнд_3]Эта команда выполняется так же, как и команда mul. Отличительной особенностью команды imul является только формирование знака.Если результат мал и умещается в одном регистре (т.Pе. если cf = of = 0), то содержимое другого регистра (старшей части) является расширением знака все его биты равны старшему биту (знаковому разряду) младшей части результата. В противном случае (если cf = of = 1) знаком результата является знаковый бит старшей части результата, а знаковый бит младшей части является значащим битом двоичного кода результата.Деление чисел без знакаДля деления чисел без знака предназначена командаdiv делительДелитель может находиться в памяти или в регистре и иметь размер 8, 16 или 32 бит. Местонахождение делимого фиксировано и так же, как в команде умножения, зависит от размера операндов. Результатом команды деления являются значения частного и остатка.Варианты местоположения и размеров операндов операции деления показаны в таблице 11.Таблица 11. Расположение операндов и результата при деленииПосле выполнения команды деления содержимое флагов неопределенно, но возможно возникновение прерывания с номером 0, называемого «деление на нуль». Этот вид прерывания относится к так называемым исключениям. Эта разновидность прерываний возникает внутри микропроцессора из-за некоторых аномалий во время вычислительного процесса. Прерывание О, «деление на нуль», при выполнении команды div может возникнуть по одной из следующих причин:1)Pделитель равен нулю;2)Pчастное не входит в отведенную под него разрядную сетку, что может произойти в следующих случаях:а)Pпри делении делимого величиной в слово на делитель величиной в байт, причем значение делимого в более чем 256 раз больше значения делителя;б)Pпри делении делимого величиной в двойное слово на делитель величиной в слово, причем значение делимого в более чем 65 536 раз больше значения делителя;в)Pпри делении делимого величиной в учетверенное слово на делитель величиной в двойное слово, причем значение делимого в более чем 4 294 967 296 раз больше значения делителя.Деление чисел со знакомДля деления чисел со знаком предназначена командаidiv делительДля этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком. Отметим лишь особенности возникновения исключения 0, «деление на нуль», в случае чисел со знаком. Оно возникает при выполнении команды idiv по одной из следующих причин:1)Pделитель равен нулю;2)Pчастное не входит в отведенную для него разрядную сетку.Последнее в свою очередь может произойти:1)Pпри делении делимого величиной в слово со знаком на делитель величиной в байт со знаком, причем значение делимого в более чем 128 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от 128 до + 127);2)Pпри делении делимого величиной в двойное слово со знаком на делитель величиной в слово со знаком, причем значение делимого в более чем 32 768 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от 32 768 до +32 768);3)Pпри делении делимого величиной в учетверенное слово со знаком на делитель величиной в двойное слово со знаком, причем значение делимого в более чем 2 147 483 648 раз больше значения делителя (таким образом, частное не должно находиться вне диапазона от 2 147 483 648 до +2 147 483 647).Вспомогательные команды для целочисленных операцийВ системе команд микропроцессора есть несколько команд, которые могут облегчить программирование алгоритмов, производящих арифметические вычисления. В них могут возникать различные проблемы, для разрешения которых разработчики микропроцессора предусмотрели несколько команд.Команды преобразования типовЧто делать, если размеры операндов, участвующих в арифметических операциях, разные? Например, предположим, что в операции сложения один операнд является словом, а другой занимает двойное слово. Выше сказано, что в операции сложения должны участвовать операнды одного формата. Если числа без знака, то выход найти просто. В этом случае можно на базе исходного операнда сформировать новый (формата двойного слова), старшие разряды которого просто заполнить нулями. Сложнее ситуация для чисел со знаком: как динамически, в ходе выполнения программы, учесть знак операнда? Для решения подобных проблем в системе команд микропроцессора есть так называемые команды преобразования типа. Эти команды расширяют байты в слова, слова в двойные слова и двойные слова в учетверенные слова (64-разрядные значения). Команды преобразования типа особенно полезны при преобразовании целых со знаком, так как они автоматически заполняют старшие биты вновь формируемого операнда значениями знакового бита старого объекта. Эта операция приводит к целым значениям того же знака и той же величины, что и исходная, но уже в более длинном формате. Подобное преобразование называется операцией распространения знака.Существуют два вида команд преобразования типа.1.PКоманды без операндов. Эти команды работают с фиксированными регистрами:1)Pcbw (Convert Byte to Word)P команда преобразования байта (в регистре al) в слово (в регистре ах) путем распространения значения старшего бита al на все биты регистра ah;2)Pcwd (Convert Word to Double)P команда преобразования слова (в регистре ах) в двойное слово (в регистрах dx: ax) путем распространения значения старшего бита ах на все биты регистра dx;3)Pcwde (Convert Word to Double)P команда преобразования слова (в регистре ах) в двойное слово (в регистре еах) путем распространения значения старшего бита ах на все биты старшей половины регистра еах;31

Изменить стиль (Регистрация необходима)Выбрать главу (82) Закрыть

Комментариев нет:

Отправить комментарий