Тестовый адрес выровнен по n байту, просто проверяет младшие 8 бит, а не целые биты - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть вопрос о проверке адреса, выровнен ли он по границе N-BYTE ....

считают, что мы находимся в режиме 64-БИТ ....

на C языке, мы делаем что-то вроде этого:

if(((unsigned long) str & 15) == 0) {}

здесь мы проверяем весь 64-битный адрес (тестовая строка & 15)

но я видел сгенерированный ассемблерный код и сгенерированный код:

test dil, 15

на самом деле, он собирается протестировать только младший 8-битный !!! так почему бы просто протестировать младший 8-битный и это не что-то вроде

test rdi, 15

или даже этого

test edi, 15

?

1 Ответ

1 голос
/ 29 февраля 2020

я нашел свой ответ .... когда мы хотим проверить, что адрес выровнен по 16-байтовой границе или нет, просто важно проверить первые 4-битные адреса, независимо от того, равен нулю или нет ... так что это хорошо, чтобы проверить только младший 8-битный адрес ...

...