在 Intelloop指令的以下偽代碼描述中,當運算元大小為 16 時,此描述似乎省略了DEST在采用情況下使用分支目標運算元:
IF BranchCond = 1
THEN
IF OperandSize = 32
THEN EIP ← EIP SignExtend(DEST);
ELSE IF OperandSize = 64
THEN RIP ← RIP SignExtend(DEST);
FI;
ELSE IF OperandSize = 16
?---> THEN EIP ← EIP AND 0000FFFFH;
FI;
FI;
IF OperandSize = (32 or 64)
THEN IF (R/E)IP < CS.Base or (R/E)IP > CS.Limit
#GP; FI;
FI;
FI;
ELSE
Terminate loop and continue program execution at (R/E)IP;
FI;
通過我添加?--->的箭頭(DEST
來自英特爾的文章:
https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
頁面“第 2A 卷 3-543”。
FelixCloutier 的代碼與 intel 相同:
https://www.felixcloutier.com/x86/loop:loopcc
如果這是英特爾規范中的錯字/錯誤,應該在哪里報告?
uj5u.com熱心網友回復:
是的,看起來像bug。該loop指令在 16 位模式下會跳轉,而不僅僅是截斷 EIP,就像在其他模式下一樣。
(R/E)IP < CS.Base也看起來像一個錯誤;線性地址是通過將 EIP 添加到 CS.Base 形成的。即有效的 EIP 值是從0到CS.Limit,無符號,不管非零 CS 基數。
我認為英特爾的論壇是報告手冊/指南中錯誤的一種方式,但在哪個部分報告并不明顯。
https://community.intel.com/t5/Intel-ISA-Extensions/bd-p/isa-extensions有一些關于內在函式指南的錯誤報告的帖子,這引起了英特爾人員的注意,他們可以對此做點什么。
也可能是https://community.intel.com/t5/Software-Development-Topics/ct-p/software-dev-topics或“軟體開發者”論壇的其他一些子論壇。“cpu”論壇似乎是關于使用CPU 的人,比如主板/RAM 兼容性等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430133.html
