Использование инструкции AND с 32-битным операндом в 64-битном - PullRequest
0 голосов
/ 20 ноября 2018

У меня вопрос по инструкции AND в 64-битном режиме. У меня есть это руководство, в котором говорится, что 32-разрядный оператор AND должен быть расширен до 64-разрядного знака. Но я не могу этого сделать

и rax, 0x80000000

Что смешно, я думаю, потому что 0x800000 - идеальный операнд DWORD. Максимум, что я могу сделать, это

и rax, 0x7fffffff

Так что здесь происходит? Я не могу использовать MSb = 1 для подписи-расширения операнда? Если так, то как расширение знака должно работать против операнда, не используя его, как в 0x80000000?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 22 ноября 2018

«препятствуя людям делать что-то глупое, вы можете помешать им делать что-то умное»: отношение, рожденное из уважения и смирения; Вы не знаете всех ответов, поэтому не навязывайте случайную глупость, как указал Шут в комментариях.

fwiw, gcc / gnu, как понимает:

and $0x80000000, %rax

лязг, вселенный религиозно, настаивал на:

and $0xffffffff80000000, %rax

сейчас, быстро, достаточно ли там ф? Помогает ли это читабельности? Если вы не понимаете расширение знака, какую сборку вы все равно поймете?

...