Инструкция 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”, то есть “очистить”.



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su