инструкция по сборке - PullRequest
       13

инструкция по сборке

5 голосов
/ 22 сентября 2011

У меня вопрос по поводу bt инструкции по сборке. Я выделил часть книги, чтобы представить контекст. Пожалуйста, посмотрите последний пример, bt Testme, bx. Почему эта копия TestMe+8? Разве это не должно копировать TestMe+65?

Большое спасибо за помощь!

6.6.4.2 Инструкции по проверке битов: BT, BTS, BTR и BTC

На процессоре 80386 или новее вы можете использовать инструкцию bt (бит тест), чтобы проверить один бит. Его второй операнд определяет битовый индекс в первый операнд. Bt копирует указанный бит в перенос флаг. Например, инструкция

  bt  ax, 12

копирует двенадцатый бит топора в флаг переноса.

Команды bt / bts / btr / btc работают только с 16- или 32-битными операндами. Это не ограничение инструкции. В конце концов, если вы хотите проверить бит три из регистра al, вы можете так же легко проверить бит три топора регистрируются. С другой стороны, если индекс больше чем размер операнда регистра, результат не определен.

Если первый операнд является ячейкой памяти, команда bt проверяет бит с заданным смещением в памяти, независимо от значения индекс. Например, если bx содержит 65, тогда

  bt  TestMe, bx

скопирует один бит местоположения TestMe + 8 в перенос флаг. Еще раз, размер операнда не имеет значения. Для всех намерения и цели, операнд памяти является байтом, и вы можете проверить любой бит после этого байта с соответствующим индексом. Фактический бит бт тесты с индексом позиции бита mod 8 и смещением памяти, действующим адрес + индекс / 8.

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

Когда в книге написано «бит один из местоположения TestMe+8», «8» относится к смещению адреса , которое измеряется в байтах.Имеется 64 бита в 8 байтах, поэтому 65-й бит - это один бит из 8 байтов после TestMe.

  • Байт в TestMe имеет биты 7..0
  • Байт в TestMe+1 имеет биты 15..8
  • Байт в TestMe+2 имеет биты 23..16
  • ...
  • Байт в TestMe+8 имеет биты 71..64

Так что «65» относится к «биту 1» (второй отсчет справа) байта по адресу TestMe+8.

2 голосов
/ 22 сентября 2011

bt TestMe, bx, где bx содержит 65 - доступ на 8 байт (64 бита плюс 1) за пределами адреса TestMe.Байт там не копируется, только второй бит в этом байте (для флага переноса, CF).

...