Инструкция 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

Яндекс.Метрика