2be0a45fc090ee2b7bf5a4bef5a9580e0cd6f2d0
[YACASL2.git] / as / yakuwa / binout.casl
1 ;;; BINOUT: 主プログラムから渡された1語の内容を、
2 ;;;         ゼロ抑制を行った2進表記で出力する
3 ;;;     八鍬幸信『基本情報処理試験 らくらく突破 CASL II』172ページ
4 BINOUT  START
5         PUSH    0,GR1           ; レジスタの退避
6         PUSH    0,GR2           ; ↓
7         PUSH    0,GR3           ; ↓
8         PUSH    0,GR4           ; ↓
9         LAD     GR2,0           ; 出力ポインタの初期化
10         LAD     GR3,15          ; カウンタの初期化
11         LD      GR4,GR1         ; 全ビット = 0?
12         JZE     OUT1
13 LOOP1   JMI     ONE             ; 先行するビット処理
14         LAD     GR3,-1,GR3      ; ↓
15         SLL     GR1,1           ; ↓
16         JUMP    LOOP1
17 LOOP2   JMI     ONE             ; 符号ビットの判定
18 ZERO    LAD     GR0,48          ; '0'→GR0
19         JUMP    STORE
20 ONE     LAD     GR0,49          ; '1'→GR1
21 STORE   ST      GR0,OBUF,GR2
22         LAD     GR2,1,GR2
23         LAD     GR3,-1,GR3
24         CPA     GR3,NZERO
25         JMI     OUT2            ; 全ビット終了?
26         SLL     GR1,1
27         JUMP    LOOP2
28 OUT1    LAD     GR0,48
29         ST      GR0,OBUF,GR2
30         LAD     GR2,1,GR2
31 OUT2    ST      GR2,OLNG
32         OUT     OBUF,OLNG
33         POP     GR4             ; レジスタの復元
34         POP     GR3             ; ↓
35         POP     GR2             ; ↓
36         POP     GR1             ; ↓
37         RET
38 OBUF    DS      16
39 OLNG    DS      1
40 NZERO   DC      0
41         END