これを試してください。これには、単一の条件付きブランチのみが必要であり、無条件のジャンプは必要ありません。
mov bx, ax // copy ax to bx
sarw bx, 15 // arithmetic shift - any -ve => -1, 0 or +ve => 0
cmp ax, 0 // compare original number to zero
jle end // if it's <=, we're done
mov bx, 1 // else bx = 1
end:
注意-私のx86コードは非常に錆びています。また、そのバージョンはsar
8086にはありませんでしたが、286以降にあり、80386まで特に高速になりませんでした。
編集私はブランチのない386+のより良いバージョンを見つけたと思います:
mov bx, ax // copy ax to bx
sarw bx, 15 // arithmetic shift - any -ve => -1, 0 or +ve => 0
cmp ax, 0 // compare original to zero
setg bl // if it was greater, bl = 1 (bh already == 0 from above)