サンプルに、count1とcall_count1を追加
[YACASL2.git] / as / exam_fe / 2010_10 / Q12 / revl.casl
1 LREVRS  START
2         RPUSH
3         LD     GR3,GR1
4         LD     GR4,GR2
5         SUBA   GR4,=1
6         JZE    LOOP2
7         ADDA   GR4,GR1
8 LOOP1   LD     GR5,0,GR3      ;
9         LD     GR6,0,GR4      ; GR3 が指す語と GR4 が指す語の内容を
10         ST     GR5,0,GR4      ; 入れ替える
11         ST     GR6,0,GR3      ;
12         LAD    GR3,1,GR3      ; GR3 を次の語に位置付ける
13         LAD    GR4,-1,GR4     ; GR4 を一つ前の語に位置付ける
14         CPA    GR3,GR4
15         JMI    LOOP1
16 LOOP2   CALL   REVRS
17         LAD    GR1,1,GR1
18         SUBA   GR2,=1
19         JNZ    LOOP2
20 FIN3    RPOP
21         RET
22         END
23 REVRS   START
24         RPUSH
25         LD     GR4,=0     ; 結果のビット列を初期化
26         LAD    GR2,15     ; ループカウンタ
27         LD     GR3,0,GR1  ; GR3 ← ビット列
28 LOOP    SLL    GR4,1      ; 結果のビット列を左シフト
29         SRL    GR3,1      ; 元のビット列を右シフト
30         JOV    ON
31         JZE    FIN1       ; 元のビット列の残りのビットはすべてゼロ
32         JUMP   OFF
33 ON      OR     GR4,=#0001
34 OFF     SUBA   GR2,=1
35         JMI    FIN2       ; 16 ビット処理済み
36         JUMP   LOOP
37 FIN1    SLL    GR4,0,GR2  ; 結果のビット列を残りのビット数だけシフト
38 FIN2    ST     GR4,0,GR1
39         RPOP
40         RET
41         END