Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Преобразование знакаДеление вычитанием В случае, если частное слишком велико, то деление можно выполнить с помощью циклического вычитания. Метод заключается в том, что делитель вычитается из делимого и в этом же цикле частное увеличивается на 1. Вычитание продолжается, пока делимое остается больше делителя. В следующем примере, делитель находится в регистре АХ, а делимое — в ВХ, частное вырабатывается в СХ: SUB СХ.СХ ;Очистка частного С20: СМР АХ,ВХ ;В случае, если делимое < делителя, JB СЗО ; то выйти SUB АХ,ВХ ;Вычитание делителя из делимого INC СХ ;Инкремент частного JMP C20 повторить цикл СЗО: RET ;Частное в СХ, остаток в АХ
В конце подпрограммы регистр СХ будет содержать частное, а АХ - остаток. Пример умышленно примитивен для демонстрации данной техники деления. В случае, если частное получается в регистровой паре DX:AX, то необходимо сделать два дополнения: 1.В метке С20 сравнивать АХ и ВХ только при нулевом DX. 2.После команды SUB вставить команду SBB DX,00. Примечание: очень большое частное и малый делитель могут вызвать тысячи циклов. Команда NEG обеспечивает преобразование знака двоичных чисел из положительного в отрицательное и наоборот. Практически команда NEG устанавливает противоположные значения битов и прибавляет 1. Примеры: NEG АХ NEG BL NEG BINAMT ;(байт или слово в памяти) Преобразование знака для 35-битового (или большего) числа включает больше шагов. Предположим, что регистровая пара DX:AX содержит 32-битовое двоичное число. Так как команда NEG не может обрабатывать два регистра одновременно, то ее использование приведет к неправильному результату. В следующем примере показано использование команды МОТ: NOT DX Инвертирование битов NOT AX Инвертирование битов ADD AX,1 Прибавление 1 к АХ ADC DX,0 Прибавление переноса к DX Остается одна незначительная проблема: над числами, представленными в двоичном формате, удобно выполнять арифметические операции, если сами числа определены в программе. Данные, вводимые в программу с дискового файла, могут также иметь двоичный формат. Но данные, вводимые с клавиатуры, представлены в ASCII-формате.
AAS (ASCII Adjust for Subtraction - коррекция для вычитания ASCII-кода) Эти команды кодируются без операндов и выполняют автоматическую коррекцию в регистре АХ. Коррекция необходима, так как ASCII-код представляет так называемый распакованный десятичный формат, в то время, как компьютер выполняет арифметические операции в двоичном формате. Сложение многобайтовых ASCII-чисел требует организации цикла, который выполняет обработку справа налево с учетом переноса.
Дата добавления: 2014-03-11; просмотров: 343; Нарушение авторских прав Мы поможем в написании ваших работ! |