【发布时间】:2014-08-17 15:08:15
【问题描述】:
英特尔 MPX,在以下文档中为刚接触它的人描述:https://software.intel.com/sites/default/files/managed/68/8b/319433-019.pdf
我不确定我是否了解 BNDLDX 和 BNDSTX 的工作原理。以 BNDSTX 为例。
来自文档(第 855 页):
BNDSTX 用于存储与缓冲区关联的边界和 指向绑定表条目的缓冲区的指针的“指针值” 通过使用两级结构的地址转换,请参阅第 9.3.8。例如,软件有一个缓冲区,其边界存储在 BND0 中,指向缓冲区的指针在 ESI 中,以下序列将 将“指针值”(缓冲区)和边界存储到 使用线性地址转换配置绑定表条目 与 SIB 寻址形式的基相关联的地址,包括 基址寄存器和变址寄存器:
MOV ECX, Dword ptr [ESI] ; store the pointer value in the index register ECX MOV EAX, ESI ; store the pointer in the base register EAX BNDSTX Dword ptr [EAX+ECX], BND0 ; perform address translation from the linear address of the base EAX and store bounds and pointer value ECX onto a bound table entry.
示例说明 ESI 包含一些指针,如果是,则第一条指令 mov ecx, dword ptr [esi] 通过间接寻址执行简单的 mov 并获取 esi 指向的任何 dword 到 ecx 中,这就是我认为他们的意思是 指针值,还是他们的意思是别的?这样做的目的是什么,这与 BNDSTX 执行的地址转换有何关系?
第二条指令看起来很直观,它只是想将此指针存储到缓冲区并复制它。然而,为什么这是严格需要的也有点奇怪。 BND0 不是已经包含缓冲区的开始了吗?它不是简单地复制下界指针吗?再说一次,我不清楚这个指针值的具体用途。
【问题讨论】: