--- /dev/null
+; 符号なし乗算
+; 入力
+; GR0 = 被乗数
+; GR1 = 乗数
+; 出力
+; GR3 = 結果
+MULL START
+; レジスタを退避
+ PUSH 0,GR1
+ PUSH 0,GR2
+; 初期化
+ XOR GR3,GR3 ; GR3 = 積
+; 被乗数をシフトしながら加算していく
+LOOP SRL GR2,1 ; 最下位ビットが
+ JOV ONE ; 1なら加算
+ JUMP ZERO ; 0なら加算しない
+ONE ADDL GR3,GR1 ;
+ZERO SLL GR1,1 ; 被乗数をシフト
+ AND GR2,GR2 ; 乗数に1のビットが
+ JNZ LOOP ; あれば続行
+; レジスタを復元
+ POP GR2
+ POP GR1
+ RET
+ END