汎用ライブラリ・define_math.txt
多分色々使われると思われる物をまとめてみた。適宜適当に増やしていく。使用する変数を使いまわすことで、変数領域を圧迫しないのが利点。
define_math.txt
numalias math_param1 numalias math_param2 numalias math_result numalias math_temp1 numalias math_temp2 numalias math_loop ------ ------ ;============================== ; 絶対値。引数をそのまま絶対値に変換する。 ;============================== *abs getparam i%math_result if %%math_result < 0 mul %%math_result,(-1) return ;============================== ; 絶対値。第一引数に第二引数の絶対値を代入する。 ;============================== *abs2 getparam i%math_result,%math_param1 if %math_param1 < 0 mul %math_param1,(-1) mov %%math_result,%math_param1 return ;============================== ; 端数切り上げ割り算 ;============================== *div2 getparam i%math_result,%math_param1 mov %math_temp1,%%math_result div %math_temp1,%math_param1:mul %math_temp1,%math_param1 mov %math_temp2,0 if %%math_result <> %math_temp1 mov %math_temp2,1 div %math_temp1,%math_param1:add %math_temp1,%math_temp2 mov %%math_result,%math_temp1 return ;============================== ; 文字列の左側に追加をする。 ;============================== *left_add getparam s%math_result,$math_param1 add $math_param1,$%math_result mov $%math_result,$math_param1 return ;============================== ; 文字列を二つに分割する。右からn文字目で切り取る。 ;============================== *right_split getparam s%math_result,s%math_temp1,$math_param1,%math_param2 len %math_param1,$math_param1 sub %math_param1,%math_param2 mid $%math_result,$math_param1,0,%math_param1 mid $%math_temp1,$math_param1,%math_param1,%math_param2 return ;============================== ; 文字列を二つに分割する。右からn文字目で切り取る。2バイト文字用 ;============================== *right_split2 getparam s%math_result,s%math_temp1,$math_param1,%math_param2 len %math_param1,$math_param1 sub %math_param1,%math_param2*2 mid $%math_result,$math_param1,0,%math_param1 mid $%math_temp1,$math_param1,%math_param1,%math_param2*2 return ;============================== ; 奇数か偶数かを返す。 ;============================== *is_even getparam i%math_result,%math_param1 mov %math_param2,%math_param1 div %math_param2,2 mul %math_param2,2 mov %%math_result,0 if %math_param1 = %math_param2 mov %%math_result,1 return *is_odd getparam i%math_result,%math_param1 mov %math_param2,%math_param1 div %math_param2,2 mul %math_param2,2 mov %%math_result,1 if %math_param1 = %math_param2 mov %%math_result,0 return