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