Может кто-нибудь объяснить мне следующий фрагмент сборки:
mydiv:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx ; get x
movl %edx, %eax
sarl $31, %edx ; divide by y
idivl 12(%ebp) ; return %eax
popl %ebp
ret
Это эквивалентно следующей функции C:
int mydiv( int x, int y )
{
return x / y;
}
Часть, с которой у меня возникают проблемыпонимание - это инструкция sarl
: зачем вам сдвиг edx
?