--- /dev/null
+;GR1の値とGR2の値の積をGR0に格納
+MULL START
+ RPUSH
+ XOR GR0,GR0 ; 積
+ LAD GR3,1 ; 対象ビット
+MLOOP PUSH 0,GR3 ; ループ先頭。GR2の、GR3が示したビットが0の場合、MNEXTへジャンプ
+ AND GR3,GR2 ; ↓
+ POP GR3 ; ↓
+ JZE MNEXT ; ↓
+ ADDL GR0,GR1 ; GR0 <- GR0 + GR1
+ JOV MFIN ; オーバーフローした場合、ループ脱出
+MNEXT SLL GR3,1 ; GR3を1回左シフト
+ AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出
+ JZE MFIN ; ↓
+ CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出
+ JPL MFIN ; ↓
+ SLL GR1,1 ; GR1を1回左シフト
+ JOV MFIN ; オーバーフローした場合、ループ脱出
+ JUMP MLOOP ; ループ終端
+MFIN RPOP
+ RET
+ END