7 CHK1 CALL CHKVAL ; (GR1 < 0)の場合は正負を反転させ、GR0 <- 1
9 LD GR4,GR0 ; マイナスフラグをオン
10 CHK2 PUSH 0,GR1 ; GR1を退避
11 LD GR1,GR2 ; GR2をGR1へロード
12 CALL CHKVAL ; (GR1 < 0)の場合は正負を反転させ、GR0 <- 1
14 LD GR2,GR1 ; GR1をGR2へロード
15 XOR GR4,GR0 ; マイナスフラグを反転
16 C2FIN POP GR1 ; GR1を復元
18 JUMP MLOOP ; MLOOPへジャンプ
21 MLOOP PUSH 0,GR3 ; ループ先頭。GR2の、GR3が示したビットが0の場合、MNEXTへジャンプ
25 ADDA GR0,GR1 ; GR0 <- GR0 + GR1
26 JOV MFIN ; オーバーフローした場合、ループ脱出
27 MNEXT SLA GR3,1 ; GR3を1回左シフト
28 AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出
30 CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出
32 SLA GR1,1 ; GR1を1回左シフト
33 JOV MFIN ; オーバーフローした場合、ループ脱出
35 MMIN AND GR4,GR4 ; マイナスフラグがオフの場合、MFINへジャンプ
37 LD GR1,GR0 ; GR1にGR0をロード
39 JOV MFIN ; オーバーフロー(GR1 = -32768)の場合、MFINへジャンプ
40 LD GR0,GR1 ; GR0にGR1をロード
44 ;;; GR1が0未満の場合は、絶対値に変換し、GR0に1を設定
47 AND GR1,GR1 ; (GR1 >= 0)の場合は、CFINへジャンプ
51 CALL MABS ; GR1を絶対値に変換
55 ;;; 例: -10 -> 10、10 -> -10
57 XOR GR1,=#FFFF ; GR1のビット値を反転
58 ADDA GR1,=1 ; GR1 <- GR1 + 1