CASLファイルのフォルダを変更
[YACASL2.git] / as / fe_tests / 2009_04 / Q12 / muls2.casl
diff --git a/as/fe_tests/2009_04/Q12/muls2.casl b/as/fe_tests/2009_04/Q12/muls2.casl
new file mode 100644 (file)
index 0000000..b4143cf
--- /dev/null
@@ -0,0 +1,45 @@
+;平成21年 春期 基本情報技術者 午後 問12-2
+MUL     START              ; 32ビット×32ビット→32ビット
+        RPUSH
+        PUSH  0,GR3
+        PUSH  0,GR2
+        LD    GR2,1,GR2    ; 乗数下位語を取り出してGR2に設定
+        CALL  MULS         ; 被乗数×乗数下位語→積(A)
+        POP   GR2
+        LD    GR2,0,GR2
+        LAD   GR3,SV       ; 結果の格納先として作業領域を設定
+        CALL  MULS         ; 被乗数×乗数上位語→積(B)
+        LD    GR6,1,GR3
+        POP   GR3
+        ADDL  GR6,0,GR3    ; 積(A)の上位語と積(B)の下位語を加算
+        ST    GR6,0,GR3
+        RPOP
+        RET
+SV      DS    2
+        END
+MULS    START              ; 32ビット×16ビット→32ビット
+        RPUSH
+        LAD   GR6,0        ; 積 上位語の初期化
+        LAD   GR7,0        ; 積 下位語の初期化
+        LD    GR4,0,GR1    ; 被乗数 上位語の取出し
+        LD    GR5,1,GR1    ; 被乗数 下位語の取出し
+LP      SRL   GR2,1        ; 乗数を1ビット右にシフト
+        JOV   ADD32
+        JZE   FIN
+        JUMP  NEXT         ; 加算処理をスキップ
+ADD32   ADDL  GR6,GR4      ; 32ビット+32ビット→32ビット
+        ADDL  GR7,GR5
+        JOV   ADJ1
+        JUMP  NEXT 
+ADJ1    ADDL  GR6,=1       ; けた上げ処理
+NEXT    SLL   GR4,1        ; 被乗数(32ビット)を1ビット左にシフト
+        SLL   GR5,1
+        JOV   ADJ2
+        JUMP  LP
+ADJ2    OR    GR4,=1
+        JUMP  LP
+FIN     ST    GR6,0,GR3    ; 乗算結果の格納
+        ST    GR7,1,GR3
+        RPOP
+        RET
+        END