這部分包含指令的演算法說明(使用偽程式碼編寫)。偽程式碼使用類似 Algol 或 Pascal 語言的表示法。演算法由以下元素組成:
註釋括在成對的符號 "(*" 與 "*)" 中。複合語句括在關鍵字中,如 if 語句的 IF、THEN、ELSE 及 FI;do 語句的 DO 與 OD;或是 case 語句的 CASE ...OF 及 ESAC。暫存器名稱暗示暫存器的內容。方括號內的暫存器名稱暗示該暫存器包含其地址的位置的內容。例如,ES:[DI] 表示 ES 段相對地址在暫存器 DI 中的位置的內容。[SI] 表示暫存器 SI 包含的相對於 SI 的預設段 (DS) 或覆蓋段的地址的內容。通用暫存器名稱中 "E" 兩側的圓括號(如 (E)SI)表示:如果目前地址大小屬性是 16,則從 SI 暫存器讀取偏移量;如果地址大小屬性是 32,則從 ESI 暫存器讀取。方括號也用於記憶體運算元,此時表示記憶體位置的內容是相對於段的偏移量。例如,[SRC] 表示源運算元的內容是相對於段的偏移量。A B; 表示將 B 的值賦給 A。符號 =、、 及 是用於比較兩個值的關係型操作符,分別表示等於、不等於、大於或等於、小於或等於。如果 A 的值等於 B,則 A B 這樣的關係型表達式為 TRUE;否則為 FALSE。表達式 "<< COUNT" 與 ">> COUNT" 表示根據計數運算元指出的位數,分別左移或右移目標運算元。
以下識別符號會在演算法說明中用到:
OperandSize 與 AddressSize - OperandSize 識別符號代表指令的運算元大小屬性:16 或 32 位。AddressSize 識別符號代表地址大小屬性:16 或 32 位。例如,以下偽代碼表示運算元大小屬性取決於所用 CMPS 指令的形式。
IF instruction CMPSW THEN OperandSize 16; ELSE IF instruction CMPSD THEN OperandSize 32; FI; FI; 如需有關如何確定這些屬性的一般指導資訊,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 3 章中的“運算元大小與地址大小屬性”。
StackAddrSize - 代表與指令關聯的堆疊地址大小屬性,其值為 16 或 32 位(請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 6 章中的“堆疊的地址大小屬性”)。
SRC - 代表源運算元。
DEST - 代表目標運算元。
以下函式會在演算法說明中用到:
ZeroExtend(value) - 返回根據指令的運算元大小屬性進行零擴充套件的值。例如,如果運算元大小屬性是 32,對位元組值 -10 進行零擴充套件時,會將位元組從 F6H 轉換成雙字值 000000F6H。如果傳遞給 ZeroExtend 函式的值的大小與運算元大小屬性相同,則 ZeroExtend 返回未加修改的值。
SignExtend(value) - 返回根據指令的運算元大小屬性進行符號擴充套件的值。例如,如果運算元大小屬性是 32,對包含值 -10 的位元組進行符號擴充套件時,會將位元組從 F6H 轉換成雙字值 FFFFFFF6H。如果傳遞給 SignExtend 函式的值的大小與運算元大小屬性相同,則 SignExtend 返回未加修改的值。
SaturateSignedWordToSignedByte - 將有符號 16 位值轉換成有符號 8 位值。如果有符號 16 位值小於 -128,則使用飽和值 -128 (80H) 表示;如果大於 127,則使用飽和值 127 (7FH) 表示。
SaturateSignedDwordToSignedWord - 將有符號 32 位值轉換成有符號 16 位值。如果有符號 32 位值小於 -32768,則使用飽和值 -32768 (8000H) 表示;如果大於 32767,則使用飽和值 32767 (7FFFH) 表示。
SaturateSignedWordToUnsignedByte - 將有符號 16 位值轉換成無符號 8 位值。如果有符號 16 位值小於 0,則使用飽和值零 (00H) 表示;如果大於 255,則使用飽和值 255 (FFH) 表示。
SaturateToSignedByte - 使用有符號 8 位值表示操作結果。如果結果小於 -128,則使用飽和值 -128 (80H) 表示;如果大於 127,則使用飽和值 127 (7FH) 表示。
SaturateToSignedWord - 使用有符號 16 位值表示操作結果。如果結果小於 -32768,則使用飽和值 -32768 (8000H) 表示;如果大於 32767,則使用飽和值 32767 (7FFFH) 表示。
SaturateToUnsignedByte - 使用有符號 8 位值表示操作結果。如果結果小於 0,則使用飽和值零 (00H) 表示;如果大於 255,則使用飽和值 255 (FFH) 表示。
SaturateToUnsignedWord - 使用有符號 16 位值表示操作結果。如果結果小於 0,則使用飽和值零 (00H) 表示;如果大於 65535,則使用飽和值 65535 (FFFFH) 表示。LowOrderWord(DEST * SRC) - 將兩個字運算元相乘,雙字結果中的最低有效字儲存到目標運算元。HighOrderWord(DEST * SRC) - 將兩個字運算元相乘,雙字結果中的最高有效字儲存到目標運算元。
Push(value) - 將值壓入堆疊。壓入的位元組數由指令的運算元大小屬性確定。如需有關壓入操作的詳細資訊,請參閱 PUSH - 將字或雙字壓入堆疊中的“操作”部分。
Pop() 從棧頂刪除值並返回它。語句 EAX Pop(); 將棧頂的 32 位值賦給 EAX。Pop 將返回字或雙字,具體取決於運算元大小屬性。如需有關彈出操作的詳細資訊,請參閱 POP - 將值彈出堆疊中的“操作”部分。
PopRegisterStack - 將 FPU ST(0) 暫存器標記為空,並使 FPU 暫存器堆疊指針 (TOP) 遞增 1。
Switch-Tasks - 執行任務切換。
Bit(BitBase, BitOffset) - 返回位串(記憶體或暫存器中的位序列)中某個位的值。位在暫存器與記憶體位元組中按照從低位到高位的順序編號。如果基址運算元是暫存器,偏移量可以在 0..31 範圍內。此偏移量代表指定的暫存器中的某個位。例如,函式 Bit[EAX, 21] 圖示如下:
如果 BitBase 是記憶體地址,則 BitOffset 可以在 -2 GBits 到 2 GBits 範圍內。確定地址的位編號為地址 (BitBase + (BitOffset DIV 8)) 上的位元組內的 (Offset MOD 8),其中 DIV 是向負無窮大取整的有符號除法,MOD 返回正數。
英特爾 C++ 編譯器等價內部函式是一些特殊的 C++ 編碼擴充套件,它允許使用 C 函式呼叫與 C 變數的語法替代硬體暫存器。通過使用這些內部函式,開發人員可以不再需要管理暫存器與編寫彙編程式。而且,編譯器優化了指令排程,從而使可執行檔案執行速度更快。
後續部分討論內部 API 與 MMX™ 技術及 SIMD 浮點內部函式。每個等價內部函式都隨指令說明一起列出。此外可能也有一些內部函式沒有等價指令。強烈推薦讀者參考編譯器文件,以獲取支援的內部函式的完整列表。請參閱 Intel C++ Compiler User's Guide With Support for the Streaming SIMD Extensions 2 【英特爾 C++ 編譯器(含第二代數據流單指令多數據擴充套件指令集支援)使用者指南】(訂購編號 718195-2001)。如需有關使用內部函式的詳細資訊,請參閱附錄 C“編譯器內部函式與功能等價物”。