私は次のアセンブリコードを見つけましたが、それが何をしているのかわかりません(主にcmovgがmovl命令に従うため):
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl %edx, %eax
sarl $31, %eax
testl %edx, %edx
movl $1, %edx
cmovg %edx, %eax
popl %ebp
ret
これが私がこれまでに解釈した方法です:スタックにプッシュします
新しいポインタ(スタックポインタ)は、ベースポインタと同じ場所を指すように作成されます
入力を取得します(xと呼びましょう)
xをレジスタ%eaxにコピーします(res = x)
res = res>>31符号拡張
テストx
x=1を設定します
>の場合、res = x
ポインタを復元します
resを返します
ただし、このサブルーチンの重要性はわかりません。私にはそれは役に立たないようです。ここで何が行われているのかご指摘いただければ幸いです。