X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fcasl2lib%2Fouta.casl;h=c5ee7d187048029057f022d330776a1e60f80fe1;hp=4d0f1615d9254c969da2d7b84d17a0be639c793b;hb=473906d23322ef829ee8dad807895235d645981c;hpb=5a84169c51f754a58929ce360e9e1a358e0ca74e diff --git a/as/casl2lib/outa.casl b/as/casl2lib/outa.casl index 4d0f161..c5ee7d1 100644 --- a/as/casl2lib/outa.casl +++ b/as/casl2lib/outa.casl @@ -42,6 +42,23 @@ STR DS 17 LEN DS 1 NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' END +;;; GR1を符号付き整数とみなし、絶対値に変換 +;;; 入力 GR1: -32768から32767の整数 +;;; 出力 GR1: 入力された整数の絶対値 +;;; OF: 入力されたGR1が-32768の場合、1 +;;; SF: 入力されたGR1が負数(-32767〜-1)の場合、1 +ABS START + AND GR1,GR1 ; GR1が0以上の場合は、FINへジャンプ + JPL FIN ; ↓ + JZE FIN ; ↓ + XOR GR1,ALLON ; GR1のビットを反転 + ADDA GR1,ONE ; GR1に1を追加 + JOV FIN ; 足し算でオーバーフローの場合は、OF:1を保持してFINへジャンプ + CPL GR1,ALLON ; SF:1を設定 +FIN RET +ONE DC 1 +ALLON DC #FFFF + END ;;; 0〜65535の範囲にある正数の割算(筆算方式)を行う ;;; 入力 GR1:被除数 GR2:除数 ;;; 出力 GR0:商 GR3:剰余 @@ -116,20 +133,3 @@ PO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ル FIN RPOP RET END -;;; GR1を絶対値に変換する -;;; 入力 GR1:-32768〜32767の整数 -;;; 出力 GR1:入力された整数の絶対値 -;;; OF:入力されたGR1が-32768の場合、1 -;;; SF:入力されたGR1が負数(-32767〜-1)の場合、1 -ABS START - AND GR1,GR1 - JPL FIN - JZE FIN - XOR GR1,ALLON - ADDA GR1,ONE - JOV FIN - CPL GR1,ALLON -FIN RET -ONE DC 1 -ALLON DC #FFFF - END