测试地址对准n字节,只是检查低8位而不是整个位

问题描述 投票:0回答:1

我有一个关于测试地址的问题,是否在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&...

assembly alignment
1个回答
0
投票

我找到了答案...。当我们要检查地址是否与16字节边界对齐时,重要的是检查地址的前4位是否为零...因此可以只检查地址的低8位...

© www.soinside.com 2019 - 2024. All rights reserved.