YACAL2: CASL2処理系
[YACASL2.git] / as / outi0.casl
1 ;GR1に格納された数値を表示
2 OUTI    START
3         PUSH 0,GR2
4         PUSH 0,GR3
5         PUSH 0,GR4
6     LAD GR0,0
7     LAD GR2,0
8     AND GR1,GR1
9     JPL ILOOP
10     JZE ILOOP
11     LAD GR0,1
12     CALL INV
13 ILOOP   CPA     GR1,TEN
14         JMI     INEXT
15         CALL    DIV
16     ADDA        GR4,ZCHAR
17     ST  GR4,STR,GR2
18     LAD GR2,1,GR2
19     LD  GR1,GR3
20     JUMP        ILOOP
21 INEXT   ADDA    GR1,ZCHAR
22         ST      GR1,STR,GR2
23         LAD     GR2,1,GR2
24     CPA GR0,=1
25     JPL PRT
26     JMI PRT
27     LD  GR1,MINUS
28         ST      GR1,STR,GR2
29         LAD     GR2,1,GR2
30 PRT     ST      GR2,LEN
31         LAD     GR1,STR
32     LD  GR2,LEN
33     CALL REV
34         OUT     STR,LEN
35         POP GR4
36         POP GR3
37         POP GR2
38         RET
39 TEN     DC      10
40 ZCHAR DC '0'
41 MINUS DC '-'
42 STR     DS      6
43 LEN     DS      1
44     END
45 ;GR1を10で割ったときの商をGR3、剰余をGR4に格納
46 DIV     LD      GR4,GR1
47         LAD     GR3,0
48 DLOOP   CPA     GR4,TEN
49         JMI     DFIN
50     SUBL GR4,TEN
51     LAD GR3,1,GR3
52     JUMP        DLOOP
53 DFIN RET
54         END
55 ;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
56 ;例: 12345 -> 54321
57 REV     START
58         PUSH    0,GR3
59     PUSH        0,GR4
60     PUSH        0,GR5
61         LAD     GR3,1
62 RPU     CPA     GR2,GR3
63         JMI     RNEXT
64     LD  GR4,GR1
65     ADDA        GR4,GR3
66     LD  GR4,-1,GR4
67         PUSH 0,GR4
68     LAD GR3,1,GR3
69     JUMP        RPU
70 RNEXT    LAD    GR3,1
71 RPO     CPA     GR2,GR3
72         JMI     RFIN
73     POP GR4
74     LD GR5,GR1
75     ADDA GR5,GR3
76     ST GR4,-1,GR5
77     LAD GR3,1,GR3
78     JUMP RPO
79 RFIN POP GR5
80         POP     GR4
81     POP GR3
82         RET
83         END
84 ;GR1の内容をマイナス値にする
85 ;例: 10 -> -10, -20 -> 20
86 INV     START
87         XOR     GR1,=#FFFF
88     LAD GR1,1,GR1
89     RET
90         END