我有一个关于测试地址的问题,是否在N-BYTE边界处对齐...。
考虑到我们处于64位模式....
用C语言,我们做这样的事情:
if(((unsigned long) str & 15) == 0) {}
这里我们检查整个64位地址(test str&15)
但是我看到了生成的汇编代码,并且生成的代码是:
test dil, 15
实际上,它将仅测试较低的8位!!!所以为什么只测试较低的8位,却不是这样[]
test rdi, 15
甚至是这个
test edi, 15
?
我有一个关于测试地址是否在N-BYTE边界对齐的问题....考虑我们处于64位模式....在C语言中,我们这样做是这样的:if(((unsigned long )str&...
我找到了答案...。当我们要检查地址是否与16字节边界对齐时,重要的是检查地址的前4位是否为零...因此可以只检查地址的低8位...