6f03a677733fc4d36987117d1db0981ef989b992
[YACASL2.git] / as / casl2lib / src / abs.casl
1 ;;; GR1を符号付き整数とみなし、絶対値に変換
2 ;;; 入力 GR1: -32768から32767の整数
3 ;;; 出力 GR1: 入力された整数の絶対値
4 ;;;       OF: 入力されたGR1が-32768の場合、1
5 ;;;       SF: 入力されたGR1が負数(-32767〜-1)の場合、1
6 ABS     START
7         AND     GR1,GR1         ; GR1が0以上の場合は、FINへジャンプ
8         JPL     FIN             ; ↓
9         JZE     FIN             ; ↓
10         XOR     GR1,ALLON       ; GR1のビットを反転
11         ADDA    GR1,ONE         ; GR1に1を追加
12         JOV     FIN             ; 足し算でオーバーフローの場合は、OF:1を保持してFINへジャンプ
13         CPL     GR1,ALLON       ; SF:1を設定
14 FIN     RET
15 ONE     DC      1
16 ALLON   DC      #FFFF
17         END