BT - 位測試

操作碼

指令

說明

0F A3

BT r/m16,r16

將所選的位儲存到 CF 標誌

0F A3

BT r/m32,r32

將所選的位儲存到 CF 標誌

0F BA /4 ib

BT r/m16,imm8

將所選的位儲存到 CF 標誌

0F BA /4 ib

BT r/m32,imm8

將所選的位儲存到 CF 標誌

說明

按照位偏移量運算元(第二個運算元)指定的位置,從位串(由第一個運算元指定,稱為位基址)中選擇位,並將該位的值儲存到 CF 標誌。位基址運算元可以是暫存器或記憶體位置;位偏移量運算元可以是暫存器或立即數。如果位基址運算元指定一個暫存器,則指令按 16 或 32(取決於暫存器大小)對位偏移量運算元求模,以便任何位的位置都可以分別在 16 位或 32 位暫存器中選擇。如果位基址運算元指定一個記憶體位置,則它代表包含位串中位基址(指定位元組的位 0)的位元組的記憶體地址(請參閱影響的標誌)。然後,對於暫存器偏移量,偏移量運算元選擇在 -231 231 - 1 範圍內位的位置;對於立即偏移量,則選擇在 0 到 31 範圍內位的位置。

有些彙編器通過結合使用立即數位偏移量欄位與記憶體運算元位移量欄位支援大於 31 的立即數位偏移量。在這種情況下,立即數位偏移量的低 3 位或低 5 位(對於 16 位運算元是 3 位,對於 32 位運算元是 5 位)儲存在立即數位偏移量欄位中,高位則由彙編器進行移位,並與定址模式中的位元組位移量相結合。如果高位不為零,處理器將忽略它們。

訪問記憶體中的位時,對於 32 位運算元,處理器可能會訪問從相應記憶體地址開始的 4 個位元組,根據以下關係:

Effective Address + (4 * (BitOffset DIV 32))

或者,對於 16 位運算元,處理器可能會訪問從相應記憶體地址開始的 2 個位元組,根據以下關係:

Effective Address + (2 * (BitOffset DIV 16))

即便只需訪問一個位元組就可以訪問到給定的位,處理器還是可能會這樣做。使用這種位定址機制時,軟體應避免引用地址空間漏洞附近的記憶體區域。特別是,軟體應該避免引用記憶體對映的 I/O 暫存器。相反,軟體應使用 MOV 指令從這些地址載入,或是儲存到這些地址,並使用暫存器形式的這些指令處理數據。

操作

CF Bit(BitBase, BitOffset)

影響的標誌

CF 標誌包含所選位的值。OF、SF、ZF、AF 及 PF 標誌未定義。

保護模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS 或 GS 暫存器包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。

實地址模式異常

#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS - 如果記憶體運算元有效地址超出 SS 段限制。

虛 8086 模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。