Assembly IA-32汇编除法

Assembly IA-32汇编除法,assembly,intel,Assembly,Intel,有人能给我解释一下下面的汇编代码片段吗 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 %eb

有人能给我解释一下下面的汇编代码片段吗

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

这是一个问题

idivl
有一个64位参数(
edx:eax
),因此您需要确保MSB包含正确的符号位,基于
eax
的MSB

因此,如果
eax
为正,则其msb将为
0
,例如5->
0000。。。0101
。如果为负值,则其msb将为
1
,例如-5->
1111。。。1011
sarl
执行算术右移,因此
edx
将为
0000。。。0000
1111。。。1111

这是一个

idivl
有一个64位参数(
edx:eax
),因此您需要确保MSB包含正确的符号位,基于
eax
的MSB


因此,如果
eax
为正,则其msb将为
0
,例如5->
0000。。。0101
。如果为负值,则其msb将为
1
,例如-5->
1111。。。1011
sarl
执行算术右移,因此
edx
将为
0000。。。0000
1111。。。1111

你能给我举个例子吗?你能给我举个例子吗?