- LD GR2,LEN ; GR2にLENの値をロード
- ST GR1,STR,GR2 ; STR+GR2 <- GR1
- LAD GR2,1,GR2 ; GR2 <- GR2 + 1
- ST GR2,LEN ; LENにGR2を格納
- POP GR2
- POP GR1
- RET
- END
-;;; GR1の値とGR2の値の、商をGR0、剰余をGR1に格納する
-;;; 0〜65535の範囲の数値を扱う
-ODIVL START
- PUSH 0,GR2
- PUSH 0,GR3
- LAD GR0,0 ; GR0の初期化。商
- ST GR2,ODY ; DYにGR2の初期値を保存
- LAD GR3,1 ; GR3の初期化。対象ビットを表す
-ODSL CPL GR2,GR1 ; ループ先頭。(GR3 > GR1)の場合、DLOOPへループ脱出
- JPL ODLOOP ; ↓
- SLL GR3,1 ; GR3を1回左シフト
+ PUSH 0,GR4
+ AND GR2,GR2 ; (GR2 = 0)の場合、DIVZEROへジャンプ
+ JZE DIVZERO ; ↓
+ ST GR2,Y ; YにGR2の初期値を保存
+ LAD GR0,0 ; GR0の初期化
+ LAD GR3,0 ; GR3の初期化
+ LAD GR4,1 ; GR4の初期化。対象ビットを表す
+SL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、LOOPへループ脱出
+ JPL LOOP ; ↓
+ SLL GR4,1 ; GR4を1回左シフト
+ ST GR2,TMP ; GR2の値をTMPに退避