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