どんなサブルーチンかと言いますと、数値の範囲を整えるタイプのやつです。変数に値が入っているんですが、本来は0から255の範囲で納めたいのですが、どーしてもマイナスの値とか255を超える値が返ってくるんですよね。
で、if文でマイナスだったら0に、255を超えてたら255に、てな処理を入れてるんですが、何箇所でも使うのでサブルーチン化しております。そんなサブルーチンの中身は、
cmp eax ,0
jns STEP_1
mov eax ,0
STEP_1:
cmp eax ,255
jb STEP_2
mov eax ,255
STEP_2:
てな感じですかね。実際はちょっと違うんですけど大体こんな感じです。eaxに値が入ってる感じです。でもなんかこー分岐せずにできないものかと床屋とか風呂とかで考えた結果、
mov dl,255
ror eax,8
mul dl
rol eax,8
or al,ah
rol eax,8
not al
and ah,al
ror eax,8
とゆー方法を考えました。同じくeaxに値が入ってる感じです。dlも使ってますけど。
だが、遅い!てか、長い!
なんかこー4ステップくらいでまとまらないものでしょーか。教えて分かる人。