Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Переполнения и прерывания
Повышение производительности Деление двойного слова на слово Деление слова на байт Деление Операция деления для беззнаковых данных выполняется командой DIV, а для знаковых — ID1V. Ответственность за подбор подходящей команды лежит на программисте. Существуют две основные операции деления:
Делимое находится в регистре АХ, а делитель — в байте памяти или а однобайтовом регистре. После деления остаток получается в регистре АН, а частное — в AL. Так как однобайтовое частное очень мало (максимально +255 (шест.РР) для беззнакового деления и +127 (шест.ТР) для знакового), то данная операция имеет ограниченное использование. Делимое находится в регистровой паре DX:AX, а делитель — в слове памяти или а регистре. После деления остаток получается в регистре DX, а частное в регистре АХ. Частное в одном слове допускает максимальное значение +32767 (uiecT.FFFF) для беззнакового деления и + 16383 (iuecT.7FFF) для знакового. В единственном операнде команд DIV и IDIV указывается делитель. Рассмотрим следующую команду: DIV DIVISOR В случае, если поле DIVISOR определено как байт (DB), то операция предполагает деление слова на байт. В случае, если поле DIVISOR определено как слово (DW), то операция предполагает деление двойного слова на слово. При делении, например, 13 на 3, получается результат 4 1/3. Частное есть 4, а остаток — 1. Заметим, что ручной калькулятор выдает в этом случае результат 4,333.... Значение содержит целую часть (4) и дробную часть (,333). Значение 1/3 и 333... есть дробные части, в то время как 1 есть остаток от деления. Беззнаковое деление: Команда DIV Команда DIV делит беззнаковые числа. Знаковое деление: Команда IDIV Команда IDIV (Integer Divide) выполняет деление знаковых чисел. При делении на степень числа 2 (2,4, и так далее) более эффективным является сдвиг вправо на требуемое число битов. В следующих примерах предположим, что делимое находится в регистре АХ: Деление на 2:
SHR AX,1 Деление на 8: MOV CL,3 SHR AX.CL Используя команды DIV и особенно IDIV, очень просто вызвать переполнение. Прерывания приводят (по крайней мере в системе, используемой при тестировании этих программ) к непредсказуемым результатам. В операциях деления предполагается, что частное значительно меньше, чем делимое. Деление на ноль всегда вызывает прерывание. Но деление на 1 генерирует частное, которое равно делимому, что может также легко вызвать прерывание. Рекомендуется использовать следующее правило: если делитель — байт, то его значение должно быть меньше, чем левый байт (АН) делителя: если делитель — слово, то его значение должно быть меньше, чем левое слово (DX) делителя. При использовании команды IDIV необходимо учитывать тот факт, что либо делимое, либо делитель могут быть отрицательными, а так как сравниваются абсолютные значения, то необходимо использовать команду NEG для временного перевода отрицательного значения в положительное.
Дата добавления: 2014-03-11; просмотров: 446; Нарушение авторских прав Мы поможем в написании ваших работ! |