projects
/
YACASL2.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
YACAL2: CASL2処理系
[YACASL2.git]
/
as
/
outi.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
JZE INEXT
10
JPL ILOOP
11
LAD GR0,1
12
CALL INV
13
ILOOP CPL GR1,TEN
14
JMI INEXT
15
CALL DIV10
16
ADDL GR4,ZCHAR
17
ST GR4,STR,GR2
18
LAD GR2,1,GR2
19
LD GR1,GR3
20
JUMP ILOOP
21
INEXT ADDL GR1,ZCHAR
22
ST GR1,STR,GR2
23
LAD GR2,1,GR2
24
CPL GR0,=1
25
JNZ PRT
26
LD GR1,MINUS
27
ST GR1,STR,GR2
28
LAD GR2,1,GR2
29
PRT ST GR2,LEN
30
LAD GR1,STR
31
LD GR2,LEN
32
CALL REV
33
OUT STR,LEN
34
POP GR4
35
POP GR3
36
POP GR2
37
RET
38
TEN DC 10
39
ZCHAR DC '0'
40
MINUS DC '-'
41
STR DS 6
42
LEN DS 1
43
END
44
;GR1を10で割ったときの商をGR3、剰余をGR4に格納
45
DIV10 LD GR4,GR1
46
LAD GR3,0
47
DLOOP CPL GR4,TEN
48
JMI DFIN
49
SUBL GR4,TEN
50
LAD GR3,1,GR3
51
JUMP DLOOP
52
DFIN RET
53
END
54
;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
55
;例: 12345 -> 54321
56
REV START
57
PUSH 0,GR3
58
PUSH 0,GR4
59
PUSH 0,GR5
60
LAD GR3,1
61
RPU CPL GR2,GR3
62
JMI RNEXT
63
LD GR4,GR1
64
ADDL GR4,GR3
65
LD GR4,-1,GR4
66
PUSH 0,GR4
67
LAD GR3,1,GR3
68
JUMP RPU
69
RNEXT LAD GR3,1
70
RPO CPL GR2,GR3
71
JMI RFIN
72
POP GR4
73
LD GR5,GR1
74
ADDL GR5,GR3
75
ST GR4,-1,GR5
76
LAD GR3,1,GR3
77
JUMP RPO
78
RFIN POP GR5
79
POP GR4
80
POP GR3
81
RET
82
END
83
;GR1の内容をマイナス値にする
84
;例: 10 -> -10, -20 -> 20
85
INV START
86
XOR GR1,=#FFFF
87
LAD GR1,1,GR1
88
RET
89
END
90
;GR1に格納された数値を表示
91
OUTI START
92
PUSH 0,GR2
93
PUSH 0,GR3
94
PUSH 0,GR4
95
LAD GR0,0
96
LAD GR2,0
97
AND GR1,GR1
98
JZE INEXT
99
JPL ILOOP
100
LAD GR0,1
101
CALL INV
102
ILOOP CPL GR1,TEN
103
JMI INEXT
104
CALL DIV10
105
ADDL GR4,ZCHAR
106
ST GR4,STR,GR2
107
LAD GR2,1,GR2
108
LD GR1,GR3
109
JUMP ILOOP
110
INEXT ADDL GR1,ZCHAR
111
ST GR1,STR,GR2
112
LAD GR2,1,GR2
113
CPL GR0,=1
114
JNZ PRT
115
LD GR1,MINUS
116
ST GR1,STR,GR2
117
LAD GR2,1,GR2
118
PRT ST GR2,LEN
119
LAD GR1,STR
120
LD GR2,LEN
121
CALL REV
122
OUT STR,LEN
123
POP GR4
124
POP GR3
125
POP GR2
126
RET
127
TEN DC 10
128
ZCHAR DC '0'
129
MINUS DC '-'
130
STR DS 6
131
LEN DS 1
132
END
133
;GR1を10で割ったときの商をGR3、剰余をGR4に格納
134
DIV10 LD GR4,GR1
135
LAD GR3,0
136
DLOOP CPL GR4,TEN
137
JMI DFIN
138
SUBL GR4,TEN
139
LAD GR3,1,GR3
140
JUMP DLOOP
141
DFIN RET
142
END
143
;アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
144
;例: 12345 -> 54321
145
REV START
146
PUSH 0,GR3
147
PUSH 0,GR4
148
PUSH 0,GR5
149
LAD GR3,1
150
RPU CPL GR2,GR3
151
JMI RNEXT
152
LD GR4,GR1
153
ADDL GR4,GR3
154
LD GR4,-1,GR4
155
PUSH 0,GR4
156
LAD GR3,1,GR3
157
JUMP RPU
158
RNEXT LAD GR3,1
159
RPO CPL GR2,GR3
160
JMI RFIN
161
POP GR4
162
LD GR5,GR1
163
ADDL GR5,GR3
164
ST GR4,-1,GR5
165
LAD GR3,1,GR3
166
JUMP RPO
167
RFIN POP GR5
168
POP GR4
169
POP GR3
170
RET
171
END
172
;GR1の内容をマイナス値にする
173
;例: 10 -> -10, -20 -> 20
174
INV START
175
XOR GR1,=#FFFF
176
LAD GR1,1,GR1
177
RET
178
END