Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 182

Unknown Author

Очистка флага прерывания (clear interrupt flag): СЫ Установка флага прерывания (set interrupt flag): STI

По команде CLI флаг IF обнуляется (IF:=0), а по команде SIT флаг получает значение 1 (IF:=1).

Установка флага IF в 1 означает, что процессору разрешено реагировать на поступающие к нему прерывания, а при значении 0 процессор не будет реагировать на прерывания (кроме прерываний из-за ошибок в работе аппаратуры). Эти команды обычно используются в процедурах операционной системы, занимающихся обработкой прерываний (при обработке одного прерывания приходится игнорировать другие прерывания).

Прерывание при переполнении (interrupt if overflow): INTO

Если перед этой командой флаг переполнения OF оказался равным 1, то она вырабатывает прерывание с номером 4 (работает как команда INT 4).

В ПК при выполнении сложения и вычитания знаковых чисел возможно переполнение мантиссы (ее абсолютная величина превышает допустимый размер и "залезает" на знаковый бит, изменяя его на противоположный), при котором получается неправильный результат. Однако процессор не фиксирует в этом случае ошибку, а лишь засылает 1 в флаг OF. "Поймать" такую ошибку можно командой условного перехода, а можно и с помощью команды INTO. Она ставится сразу же за арифметической командой, например:

ADD АХ,Y INTO

и при переполнении мантиссы (при OF=l) вырабатывает прерывание с номером 4, которое можно обработать по-своему, если в 4-й элемент вектора прерываний (по адресу 0000:0010h) заранее записать начальный адрес процедуры обработки этого прерывания. (При начальной загрузке вектора прерываний в этот элемент записывается адрес некоторой ячейки, содержащей команду IRET, т. е. по умолчанию нет никакой реакции на это прерывание.)

"Пустая" команда (no operation): NOP

Команда NOP ничего не делает.

Эта однобайтовая команда обычно используется для того, чтобы "забить" команды, ставшие ненужными, не сдвигая при этом остальные команды программы, либо для того, чтобы сначала занять место в программе, в которое затем будут занесены "настоящие" команды.

Останов (halt): HLT

По этой команде процессор приостанавливает свою работу и ждет поступления любого прерывания. В этот момент регистры CS и IP указывают на следующую за HLT команду. При возникновении прерывания, как обычно, в стек записывается содержимое этих регистров и управление передается в операционную систему на соответствующую процедуру обработки прерывания. По завершении ее работы в регистрах CS и IP будет восстановлен адрес команды, следующей за HLT. С этой следующей команды и возобновится выполнение приостановленной программы.

Команда HLT используется, когда процессору нечего делать и он ожидает, например, нажатия какой-нибудь клавишы на клавиатуре.

Блокировка шины (lock the bus): LOCK

Эта команда блокирует передачу какой-либо информации по линиям связи, пока не будет полностью завершено выполнение следующей за ней команды (перед которой может находиться префикс повторения или префикс сегментного регистра).