LDDQU - 載入未對齊整數 128 位

 

指令

說明

 

LDDQU xmm, m128

將 128 位從 Mem 載入到 XMM 暫存器。

說明

此指令在功能上等同於 MOVDQU xmm, m128。它將雙四字從記憶體源運算元(第二個運算元)移動到目標暫存器(第一個運算元)。源運算元可能未對齊 16 位元組邊界,而不會導致產生一般保護性異常 (#GP)。如果源運算元跨越快取線邊界,則此指令可能會提高與 MOVDQU 有關的效能。如果載入要求進行儲存至載入轉發,則此指令可能會降低效能。對於已知與對齊 16 位元組邊界的記憶體位置,要在其中移入/移出雙四字,請使用 MOVDQA 指令。

實現備註

如果按上文所述(對齊兩個 16 位元組邊界)實現的 LDDQU 會導致效能不及 MOVDQU,特定的處理器可能會按照 MOVDQU 一模一樣去實現 LDDQU。

操作

xmm[127-0] = m128;

數值異常

保護模式異常

#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。
#SS(0) - SS 段中的地址非法。
#PF(錯誤程式碼) - 頁錯誤;
#UD - 如果 CR0.EM = 1。
#NM - 如果 CR0 中的 TS 設定為 1;
#UD - 如果 CR4.OSFXSR(bit 9) = 0。
#UD - 如果 CPUID.PNI(ECX bit 0) = 0。LDDQU:載入未對齊整數 128 位(續)

實地址模式異常

中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。
#NM - 如果 CR0 中的 TS 設定為 1。
#UD - 如果 CR0.EM = 1。 如果 CR4.OSFXSR(bit 9) = 0。 如果 CPUID.PNI(ECX bit 0) = 0。

虛 8086 模式異常

中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。
#NM - 如果 CR0 中的 TS 設定為 1。
#UD - 如果 CR0.EM = 1。如果 CR4.OSFXSR(bit 9) = 0。如果 CPUID.PNI(ECX bit 0) = 0。#PF(錯誤程式碼) - 頁錯誤。

註釋

此指令可能會使用兩個 128 位對齊的載入(例如載入 32 位元組)模擬未對齊的記憶體訪問,只要這樣的實現方案比使用 MOVDQU 載入 16 位元組更有效能優勢。如果源運算元對齊 16 位元組邊界,基於實現方案,16 位元組可能會載入多次。由於以上原因,在使用不可快取或結合寫入 (WC) 的記憶體區域時,應避免使用 LDDQU。對於不可快取或 WC 記憶體區域,請繼續使用 MOVDQU。快取線拆分嚴重影響效能時,此指令可以替代 MOVDQU(載入)。它不應用於儲存至載入轉發效能非常關鍵的位置。如果儲存至載入轉發的效能對於應用程式而言非常關鍵,則數據對齊 128 位時,請使用 MOVDQA 儲存載入對,數據未對齊 128 位時,請使用 MOVDQU 儲存載入對。對於偏移量必須在未對齊(特別是 16 位元組未對齊)基址或極限的 15 個位元組以內的要求,LDDQU 的行為取決於具體實現的版本;此情形下可能會發出 #GP 異常。基於段的定義(基址、極限值),訪問的位元組可能會有所不同。數據訪問跨越 16b(32b) 邊界時,16b(32b) 定址模式中 LDDQU 的行為也取決於具體實現的版本,可能會、也可能不會發出 #GP 異常。基於段的定義(基址、極限值),訪問的位元組可能會有所不同。