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
你能给我举个例子吗?你能给我举个例子吗?