BOUND - 檢查陣列下標邊界

操作碼

指令

說明

62 /r

BOUND r16, m16&16

檢查 r16(陣列下標)是否在 m16&16 指定的邊界內。

62 /r

BOUND r32, m32&32

檢查 r32(陣列下標)是否在 m32&32 指定的邊界內。

說明

確定第一個運算元(陣列下標)是否在第二個運算元(邊界運算元)指定的陣列邊界內。陣列下標是暫存器中的有符號整數。邊界運算元是記憶體位置,它包含一對有符號雙字整數(運算元大小屬性為 32 時)或一對有符號字整數(運算元大小屬性為 16 時)。第一個雙字(或字)是陣列的下限,第二個雙字(或字)是陣列的上限。陣列下標必須大於或等於下限,且小於或等於上限加上運算元大小(以位元組計)。如果下標不在邊界內,則會發出超出 BOUND 範圍異常 (#BR) 的訊號。(產生此異常時,儲存的返回指令指針將指向 BOUND 指令)。

邊界限制數據結構(包含陣列上限與下限的兩個字或雙字)通常就放在陣列本身的前面,這樣從陣列開始處偏移一定的量就可以找到此限制的地址。由於陣列的地址已經在暫存器中,因此這種做法可以避免花費額外的匯流排週期去獲取陣列邊界的有效地址。

操作

IF (ArrayIndex < LowerBound OR ArrayIndex > UpperBound)
(* Below lower bound or above upper bound *)
THEN
#BR;
FI;

影響的標誌

無。

保護模式異常

#BR - 如果邊界測試失敗。

#UD - 如果第二個運算元不是記憶體位置。

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

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

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

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

實地址模式異常

#BR - 如果邊界測試失敗。

#UD - 如果第二個運算元不是記憶體位置。

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

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

虛 8086 模式異常

#BR - 如果邊界測試失敗。

#UD - 如果第二個運算元不是記憶體位置。

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

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

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

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