Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
BT
Влияние команды на флаги и форматы команды:
? |
? |
? |
? |
? |
* |
0F A3 |
BT r/m16,r16 |
Сохранить выбираемый r16 бит r/m16 в CF |
Intel386 |
bt [di],ax |
0F A3 |
BT r/m32,r32 |
Сохранить выбираемый r32 бит r/m32 в CF |
Intel386 |
bt edi,eax |
0F BA /4 ib |
BT r/m16,imm8 |
Сохранить выбираемый imm8 бит r/m16 в CF |
Intel386 |
bt bx,3 |
0F BA /4 ib |
BT r/m32,imm8 |
Сохранить выбираемый imm8 бит r/m32 в CF |
Intel386 |
bt edx,17 |
Описание:
Команда BT сохраняет значение одного бита из первого операнда во флаге CF. Позиция сохраняемого бита из первого операнда находится во втором операнде.
Значение индекса выбираемого бита может быть представлено непосредственным значением в команде BT или значением в общем регистре. В этой команде используется только 8-битное непосредственное значение. Значение этого операнда берется по модулю 32, таким образом смещение битов находится в диапазоне от 0 до 31. Это позволяет выбирать любой бит внутри регистра. Для битовых строк в памяти это поле непосредственного значения дает только смещение внутри слова или двойного слова.
Некоторые ассемблеры поддерживают значения битовых смещений больше 31, используя поле непосредственного значения imm8 в комбинации с полем смещения операнда в памяти disp. В этом случае ассемблером младшие 3 или 5 битов (3 для 16-битных операндов, 5 для 32-битных операндов) смещения бита (второй операнд команды) сохраняются в поле непосредственного операнда, а старшие биты сдвигаются и комбинируются с полем смещения. Процессор же игнорирует ненулевые значения старших битов поля imm8.
При доступе к памяти процессор обращается к четырем байтам, начинающимся по полученному следующим образом адресу:
Effective Address + (4 * (BitOffset DIV 32))
для размера операнда 32 бита, или к двум байтам, начинающимся по адресу:
Effective Address + (2 * (BitOffset DIV 16))
для 16-битного размера операнда. Такое обращение происходит, даже если необходим доступ только к одиночному байту. Поэтому, избегайте ссылок к областям памяти, близким к пустым адресным пространствам. В частности, избегайте ссылок на распределенные в памяти регистры ввода-вывода. Вместо этого используйте команду MOV для загрузки и сохранения значений по таким адресам и регистровую форму команды BT для работы с данными.
Операция:
CF = BIT[LeftSRC, RightSRC];
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS или GS;
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru