Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Инструкция CLC
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Команда CLC в Ассемблере - это команда сброса флага CF, которая выполняет сброс флага переноса. Синтаксис:
CLC
После выполнения этой команды флаг CF сбрасывается (очищается, то есть будет равен 0). Остальные флаги не изменяются.
Сброс флага CF может потребоваться в каких-то отдельных случаях (хотя и не часто). Флаг переноса устанавливается (становится равен 1), когда после выполнения арифметической операции её результат слишком велик (или слишком мал), то есть не помещается в приёмник данных.
В показанном ниже примере мы как раз таки выполняем такую операцию: пытаемся сложить число 255 с единицей и поместить результат в регистр AL. Поскольку 255 + 1 = 256, а в байте не может быть числа более чем 255, то возникает переполнение и флаг переноса CF устанавливается. В двоичной системе это будет выглядеть так:
1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 1 = 1 0 0 0 0 0 0 0 0
Но единица в старшем разряде уже не поместится в байт, поэтому произойдёт перенос этой единицы в несуществующий старший разряд. Можно сказать, что единица будет перенесена во флаг CF, который и укажет нам на то, что произошёл перенос, то есть результат не поместился в приёмник. И если мы сомневаемся, что результат поместится в приёмник, то для верности после выполнения арифметических операций нам надо проверить флаг CF, и если он установлен - принять необходимые меры.
Ну а если нам надо выполнить ещё одну рискованную операцию, то для верности лучше принудительно сбросить флаг CF, чтобы иметь возможность снова проверить, не было ли переноса.
Пример - как сбросить флаг переноса:
.model tiny .code ORG 100h start: MOV AL, 255 ; AL = 255 ADD AL, 1 ; AL = 0, CF = 1 CLC ; CF = 0 RET END start
Напоследок, как всегда, о происхождении аббревиатуры CLC. Каких то сведений об этом я не нашёл, поэтому могу только предположить. Скорее всего, это сокращение от
CLear CF (очистить CF).
В русском языке мы обычно говорим “сбросить флаг”, но в англоязычной литературе в таких случаях употребляют именно слово “clear”, то есть “очистить”.
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |