英特尔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 指向 ecx 的dword ,这就是我所假设的用"指针值"表示,或者它们是否代表其他东西?这是什么目的,这与BNDSTX执行的地址转换有何关系?
第二条指令似乎足够直观,它只是想将这个指针存储到缓冲区并复制它.然而,为什么这是严格需要也有点奇怪.BND0不包含缓冲区的开头吗?它不是简单地复制下限指针吗?而且,这个"指针值"的用途到底是什么目的还不清楚.