0988b24c

Дополнительные инструкции работы с битами полей


Турбо Ассемблер может генерировать специальные последова- тельности инструкций для задания значений и извлечения значений из битовых полей, заданных с помощью оператора RECORD. Это позво- ляет вам писать код, независимый от фактического расположения по- ля в записи. При использовании их в сочетании с оператором ENUM, записи на языке ассемблера могут получить очень высокий уровень модульности. Список данных инструкций приведен в следующей табли- це:

Инструкции для установки и извлечения значения Таблица 13.5 ----------------T-----------------------------------------------¬ ¦ Инструкция ¦ Функция ¦ +---------------+-----------------------------------------------+ ¦ SETFIELD ¦ Устанавливает значение поля записи. ¦ ¦ ¦ ¦ ¦ GETFIELD ¦ Извлекает значение из поля записи. ¦ L---------------+------------------------------------------------

Инструкция SETFIELD

Инструкция SETFIELD генерирует код, устанавливающий значение поля записи. Она имеет синтаксис:

SETFIELD имя_поля регистр/память_приемник, регистр_источник

где "имя_поля" - имя поля записи, "регистр/память_приемник" для SETFIELD представляет собой регистр или адрес в памяти типа BYTE или WORD (DWORD для процессора 80386). "Регистр_источник" должен быть регистром того же или меньшего размера. Если источник мень- ше, чем приемник, то регистр-источник должен быть младшей частью другого регистра, имеющего тот же размер, что и приемник. Этот полный регистр называется рабочим регистром. Используйте данный регистр для сдвига значения в регистре-источнике, благодаря чему оно выравнивается по приемнику. Например:

FOO RECORD R0:1,R1:4,R2:3,R3:1 . . . SETFIELD F1 AX,BL ; рабочим регистром является BX SETFIELD F1 AX,BH ; недопустимо!

SETFIELD сдвигает регистр-источник, чтобы эффективно выров- нять его на поле приемника, выполняет операцию OR и помещает ре- зультат в регистр-приемник.

Примечание: Операция SETFIELD уничтожает все содержи- мое рабочего регистра.

Чтобы выполнить свою функцию, инструкция SETFIELD генерирует эффективную и расширенную последовательность инструкций XOR, XCHG, ROL, ROR, OR и MOVZX.

Операция SETFIELD не пытается очистить целевое поле перед выполнением над его значением операции OR. Если это необходимо, вы можете очистить поле явным образом, используя инструкцию MASKFLAG.



Содержание раздела