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

Unknown Author

Команда LOCK нужна для реализации многозадачного режима работы ПК, когда одновременно выполняется несколько программ. Она используется, чтобы запретить другим программам прерывать текущую программу в тот момент, когда та выполняет сложную операцию (типа пересылки строки из одного места памяти в другое), чтобы другие программы не могли в "середине" такой операции испортить ее операнды.

Переключение на сопроцессор (escape): ESC opl,op2

По этой команде посылается сигнал арифметическому сопроцессору (8087, 80287 и т. п.), чтобы он выполнил одну из своих операций: opl задает код этой операции, а ор2 указывает местоположение ее операнда. После этого сопроцессор начинает выполнять заказанную операцию, а центральный процессор, не дожидаясь ее окончания, переходит к выполнению команды, следующей за ESC.

Отметим, что в ЯА предусмотрены специальные мнемокоды для разных вариантов команды ESC (например, мнемокод FADD, если нужно выполнить сложение вещественных чисел), поэтому в программах на ЯА в явном виде команда ESC обычно не указывается.

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

Переход в состояние ожидания: WAIT

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

14*3* Дополнительные операторы*

В этом разделе вкратце описываются те операторы ЯА, которые не были рассмотрены в предыдущих главах книги.

<константное выражение> SHR <константное выражение>

<константное выражение> SHL <константное выражение>

Это операторы сдвига, они относятся к константным выражениям. Оператор SHR (SHL) сдвигает значение своего первого операнда, трактуемое как шката из 16 битов, вправо (влево) на число разрядов, равное значению второго операнда, которое должно быть неотрицательным целым. Биты, сдвигаемые за пределы шкалы, теряются.

Примеры:

MOV CX,N SHL 2 AND AH,N SHR 1 OR AH,N SHL 5

MOV CX,101100b AND AH,101b

ошибка (2-й операнд - 160h - не байт)

Операторы SHR и SHL обычно используются для построения одних масок по другим при работе с упакованными данными, записями.

Действие этих операторов совпадает с действием одноименных команд ПК, однако не надо путать их: операторы вычисляются на этапе трансляции программы и в машинной программе их уже нет, а команды выполняются на этапе счета программы.

LENGTH <имя переменной>

Этот оператор относится к константным выражениям. Его операнд должен быть именем переменной, описанной в директиве DB, DW, DD или директиве, определяющей структуру или запись. Значение оператора - коэффициент кратности в конструкции DUP, если она является первым операндом этой директивы, и 1 во всех остальных случаях.