Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Переполнения
Сложение и вычитание Обработка двоичных данных Операции Арифметические Лекция 4. С (Перенос) Р (Контроль четности) А (Внешний перенос) Содержит перенос из 3-го бита для 8-битных данных используется для специальных арифметических операций. Показывает четность младших 8-битовых данных (1 — четное и О — нечетное число). Содержит перенос из старшего бита, после арифметических операций, а также последний бит при сдвигах или циклических сдвигах. При программировании на Ассемблере наиболее часто используются флаги О, S, Z, и С для арифметических операций и операций сравнения, а флаг D для обозначения направления в операциях над строками.
Несмотря на то, что мы привыкли к десятичной арифметике (база 10), компьютер работает только с двоичной арифметикой (база 2). Кроме того, ввиду ограничения, накладываемого 16-битовыми регистрами, большие величины требуют специальной обработки. Команды ADD и SUB выполняют сложение и вычитание байтов или слов, содержащих двоичные данные. Вычитание выполняется в компьютере по методу сложения с двоичным дополнением: для второго операнда устанавливаются обратные значения бит и прибавляется 1, а затем происходит сложение с первым операндом. Во всем, кроме первого шага, операции сложения и вычитания идентичны. Поскольку прямой операции память-память не существует, данная операция выполняется через регистр. В следующем примере к содержимому слова WORDB прибавляется содержимое слова WORDA, описанных как DW: MOV AX.WORDA ADD AX,WORDB MOV WORDB,AX Опасайтесь переполнений в арифметических операциях. Один байт содержит знаковый бит и семь бит данных, то есть, значения от -128 до+127.
Результат арифметической операции может легко превзойти емкость однобайтового регистра. Например, результат сложения в регистре AL, превышающий его емкость, автоматически не переходит в регистр АН. Предположим, что регистр AL содержит шест.60, тогда результат команды ADD AL.20H генерирует в AL сумму — шест.80. Но операция также устанавливает флаг переполнения и знаковый флаг в состояние «отрицательно». Причина заключается в том, что шест.80 или двоичное 1000 0000 является отрицательным числом, то есть, в результате, вместо +128, мы получим -128. Так как регистр AL слишком мал для такой операции и следует воспользоваться регистром АХ. В следующем примере команда CBW (Convert Byte to Word — преобразовать байт в слово) преобразует шест.60 в регистре AL в шест.0060 в регистре АХ, передавая при этом знаковый бит (0) через регистр АН. Команда ADD генерирует теперь в регистре АХ правильный результат: шест.0080, или +128: CBW ;Расширение AL до АХ ADD AX.20H прибавить к АХ Но полное слово имеет также ограничение: один знаковый бит и 15 бит данных, что соответствует значениям от -32768 до +32767.
Дата добавления: 2014-03-11; просмотров: 458; Нарушение авторских прав Мы поможем в написании ваших работ! |