Я немного поигрался с выводом сборки GCC, попробовав его с быстрым целочисленным средним.Вот код C, который я использовал изначально:
unsigned int average (unsigned int x, unsigned int y) {
return (x&y)+((x^y)>>1);
}
Вот сборка, которую он испустил (используя синтаксис Intel):
average:
mov edx, edi
and edi, esi
xor edx, esi
shr edx
lea eax, [rdx+rdi]
ret
Когда я перевел его для NASM:
average:
mov edx, edi
and edi, esi
xor edx, esi
shr edx, 1
lea eax, [rdx+rdi]
ret
Он жалуется на эту ошибку, в строке с lea
:
<source>:6: error: impossible combination of address sizes
<source>:6: error: invalid effective address
Я не супер , знакомый со сборкой, но это кажется супер странным.Может ли кто-нибудь объяснить мне, что, черт возьми, здесь происходит?