汎用ライブラリ・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