我查看了 x86/i64 文档,找不到他们提到 (%rip) 使用指令缓存的地方。因此,我不能 100% 确定是这种情况。
我想知道我是否正确。如果是这样,我想做的是使用 RIP 访问 4KB 缓冲区,因为访问它的代码非常小(嗯,小到足以容纳额外的 4000 字节。)我知道如何用 g++ 做到这一点,但我还没有看到用 cl 做到这一点的方法。这是我非常感谢学习的另一件事!
使用 g++,我可以编写如下内容:
__asm__ __volatile__ (".align 4 \n\r"
".big_num: \n\r"
".long 0x01020304 \n\r"
".long 0x05060708 \n\r"
".long 0x01020304 \n\r"
".long 0x05060708 \n\r"
"movdqa .big_num(%rip), xmm0 \n\r");
Microsoft 程序中的等价物是什么?
__asm {
mov big_number(%rip), xmm7
jmp loop
big_number:
???
loop:
}
----- 更新(2013 年 1 月 24 日)
实际上,RIP 寻址模式仅限于偏移量:
mov offset(%rip), reg
所以它对我没有帮助,因为我需要一个索引,如下所示:
mov offset(%rip, %eax, 4), reg
无论如何这是不可能的。