;;; GR1を符号付き整数とみなし、絶対値に変換
-;;; 入力 GR1:-32768から32767の整数
-;;; 出力 GR1:入力された整数の絶対値
-;;; OF:入力されたGR1が-32768の場合、1
-;;; SF:入力されたGR1が負数(-32767〜-1)の場合、1
+;;; 入力 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
+ 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