符号拡張

割り算した部分の逆アセンブル結果を読んでいてsarが何をしているのかしばらくわからなかった。

mov    %eax,%edx
sar    $0x1f,%edx
idivl  -0xc(%ebp)

sarは符号付き右シフト命令であるからedxの最上位ビットが全ビットに広がる。idivlはてっきり32bitの除算だと思っていたのだがedxとeaxあわせて64bitの除算であった。よってこれはeaxの値を64bitに符号拡張しているわけだ。