6cb4d54277f88d9f6b01426f1c0cfe15e623bf15
[YACASL2.git] / test / integration / casl2 / count_call / 0.txt
1 ../../../../casl2 -sla ../../../../as/FUNC/count1_call.casl ../../../../as/FUNC/count1.casl ../../../../as/FUNC/outa.casl
2
3 Assemble ../../../../as/FUNC/count1_call.casl (0)
4 ../../../../as/FUNC/count1_call.casl:    1:;; count1.casl(「アセンブラ言語の仕様」プログラム例)を呼び出し、出力結果を表示
5 ../../../../as/FUNC/count1_call.casl:    2:;; 使い方: casl2 count1_call.casl count1.casl outa.casl
6 ../../../../as/FUNC/count1_call.casl:    3:MAIN    START
7 ../../../../as/FUNC/count1_call.casl:    4:        LAD     GR2,0
8 ../../../../as/FUNC/count1_call.casl:    5:LOOP    CPA     GR2,MAX         ; ループ開始。GR2がMAXの値になったらループ脱出
9 ../../../../as/FUNC/count1_call.casl:    6:        JZE     FIN             ; ↓
10 ../../../../as/FUNC/count1_call.casl:    7:        LD      GR1,GR2         ; GR1にVALの値をロード
11 ../../../../as/FUNC/count1_call.casl:    8:        CALL    COUNT1          ; COUNT1を呼び出す。出力はGR0に格納
12 ../../../../as/FUNC/count1_call.casl:    9:        LD      GR1,GR0         ; GR1にGR0の値をコピー
13 ../../../../as/FUNC/count1_call.casl:   10:        CALL    OUTA            ; OUTAを呼び出す
14 ../../../../as/FUNC/count1_call.casl:   11:        LAD     GR2,1,GR2       ; GR2 <= GR2 + 1
15 ../../../../as/FUNC/count1_call.casl:   12:        JUMP    LOOP            ; ループ終端
16 ../../../../as/FUNC/count1_call.casl:   13:FIN     RET
17 ../../../../as/FUNC/count1_call.casl:   14:MAX     DC      256
18 ../../../../as/FUNC/count1_call.casl:   15:        END
19
20 Assemble ../../../../as/FUNC/count1.casl (0)
21 ../../../../as/FUNC/count1.casl:    1:COUNT1    START
22 ../../../../as/FUNC/count1.casl:    2:;       入力    GR1:検索する語
23 ../../../../as/FUNC/count1.casl:    3:;       処理    GR1中の'1'のビットの個数を求める
24 ../../../../as/FUNC/count1.casl:    4:;       出力    GR0:GR1中の'1'のビットの個数
25 ../../../../as/FUNC/count1.casl:    5:  PUSH    0,GR1
26 ../../../../as/FUNC/count1.casl:    6:    PUSH  0,GR2
27 ../../../../as/FUNC/count1.casl:    7:    SUBA  GR2,GR2
28 ../../../../as/FUNC/count1.casl:    8:    AND           GR1,GR1
29 ../../../../as/FUNC/count1.casl:    9:    JZE   RETURN
30 ../../../../as/FUNC/count1.casl:   10:MORE LAD  GR2,1,GR2
31 ../../../../as/FUNC/count1.casl:   11:  LAD             GR0,-1,GR1
32 ../../../../as/FUNC/count1.casl:   12:    AND           GR1,GR0
33 ../../../../as/FUNC/count1.casl:   13:    JNZ           MORE
34 ../../../../as/FUNC/count1.casl:   14:RETURN LD GR0,GR2
35 ../../../../as/FUNC/count1.casl:   15:  POP             GR2
36 ../../../../as/FUNC/count1.casl:   16:    POP           GR1
37 ../../../../as/FUNC/count1.casl:   17:    RET
38 ../../../../as/FUNC/count1.casl:   18:    END
39
40 Assemble ../../../../as/FUNC/outa.casl (0)
41 ../../../../as/FUNC/outa.casl:    1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
42 ../../../../as/FUNC/outa.casl:    2:OUTA    START
43 ../../../../as/FUNC/outa.casl:    3:        RPUSH
44 ../../../../as/FUNC/outa.casl:    4:        LAD     GR2,10          ; GR2に10進数の「10」を格納。
45 ../../../../as/FUNC/outa.casl:    5:        LAD     GR0,0           ; GR0 <- 0
46 ../../../../as/FUNC/outa.casl:    6:        LAD     GR4,0           ; 負数フラグ。GR1が負数の場合、GR4は1
47 ../../../../as/FUNC/outa.casl:    7:        LAD     GR5,0           ; 整数値の長さ
48 ../../../../as/FUNC/outa.casl:    8:        AND     GR1,GR1         ; GR1をテスト
49 ../../../../as/FUNC/outa.casl:    9:        JZE     ZPRT            ; GR1が0の場合、ZPRTにジャンプ
50 ../../../../as/FUNC/outa.casl:   10:        JPL     STI             ; GR1が正数の場合、STIにジャンプ
51 ../../../../as/FUNC/outa.casl:   11:        LAD     GR4,1           ; GR1が負数の場合、GR4をオン
52 ../../../../as/FUNC/outa.casl:   12:        CALL    OABS            ;                  GR1を正数に変換
53 ../../../../as/FUNC/outa.casl:   13:STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
54 ../../../../as/FUNC/outa.casl:   14:        JMI     STLST           ; ↓
55 ../../../../as/FUNC/outa.casl:   15:        CALL    ODIVL           ; GR1とGR2の、商をGR0、剰余をGR3に格納
56 ../../../../as/FUNC/outa.casl:   16:        LD      GR1,GR3         ; GR1にGR3をコピー
57 ../../../../as/FUNC/outa.casl:   17:        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
58 ../../../../as/FUNC/outa.casl:   18:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
59 ../../../../as/FUNC/outa.casl:   19:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
60 ../../../../as/FUNC/outa.casl:   20:        LD      GR1,GR0         ; GR0をGR1にコピー
61 ../../../../as/FUNC/outa.casl:   21:        JUMP    STI             ; ループ終端
62 ../../../../as/FUNC/outa.casl:   22:STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
63 ../../../../as/FUNC/outa.casl:   23:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
64 ../../../../as/FUNC/outa.casl:   24:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
65 ../../../../as/FUNC/outa.casl:   25:        AND     GR4,GR4         ; 正数の場合
66 ../../../../as/FUNC/outa.casl:   26:        JZE     PRT             ; ↓
67 ../../../../as/FUNC/outa.casl:   27:        LD      GR1,='-'        ; 負数の場合、「-」をSTR領域に格納
68 ../../../../as/FUNC/outa.casl:   28:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
69 ../../../../as/FUNC/outa.casl:   29:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
70 ../../../../as/FUNC/outa.casl:   30:        JUMP    PRT             ; PRTにジャンプ
71 ../../../../as/FUNC/outa.casl:   31:ZPRT    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
72 ../../../../as/FUNC/outa.casl:   32:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
73 ../../../../as/FUNC/outa.casl:   33:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
74 ../../../../as/FUNC/outa.casl:   34:PRT     ST      GR5,LEN         ; LEN <- GR5
75 ../../../../as/FUNC/outa.casl:   35:        LD      GR2,LEN         ; GR2にLENの値を格納
76 ../../../../as/FUNC/outa.casl:   36:        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
77 ../../../../as/FUNC/outa.casl:   37:        CALL    REV             ; 文字列を逆順に並べ替え
78 ../../../../as/FUNC/outa.casl:   38:        OUT     STR,LEN         ; 文字列を出力
79 ../../../../as/FUNC/outa.casl:   39:        RPOP
80 ../../../../as/FUNC/outa.casl:   40:        RET
81 ../../../../as/FUNC/outa.casl:   41:STR     DS      17
82 ../../../../as/FUNC/outa.casl:   42:LEN     DS      1
83 ../../../../as/FUNC/outa.casl:   43:NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
84 ../../../../as/FUNC/outa.casl:   44:        END
85 ../../../../as/FUNC/outa.casl:   45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
86 ../../../../as/FUNC/outa.casl:   46:;;; 0〜65535の範囲の数値を扱う
87 ../../../../as/FUNC/outa.casl:   47:ODIVL   START
88 ../../../../as/FUNC/outa.casl:   48:        PUSH    0,GR1
89 ../../../../as/FUNC/outa.casl:   49:        PUSH    0,GR2
90 ../../../../as/FUNC/outa.casl:   50:        PUSH    0,GR4
91 ../../../../as/FUNC/outa.casl:   51:        AND     GR2,GR2         ; GR2が0の場合、ODFINへジャンプ
92 ../../../../as/FUNC/outa.casl:   52:        JZE     ODFIN           ; ↓
93 ../../../../as/FUNC/outa.casl:   53:        ST      GR2,ODY         ; ODYにGR2の初期値を保存
94 ../../../../as/FUNC/outa.casl:   54:        LAD     GR0,0           ; GR0の初期化
95 ../../../../as/FUNC/outa.casl:   55:        LAD     GR3,0           ; GR3の初期化
96 ../../../../as/FUNC/outa.casl:   56:        LAD     GR4,1           ; GR4の初期化。対象ビットを表す
97 ../../../../as/FUNC/outa.casl:   57:ODSL    CPL     GR2,GR1         ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
98 ../../../../as/FUNC/outa.casl:   58:        JPL     ODLOOP          ; ↓
99 ../../../../as/FUNC/outa.casl:   59:        SLL     GR4,1           ; GR4を1回左シフト
100 ../../../../as/FUNC/outa.casl:   60:        SLL     GR2,1           ; GR2を1回左シフト
101 ../../../../as/FUNC/outa.casl:   61:        JOV     ODYOV           ; オーバーフローの場合は、ODYOVにジャンプ
102 ../../../../as/FUNC/outa.casl:   62:        JUMP    ODSL            ; ループ終端
103 ../../../../as/FUNC/outa.casl:   63:ODYOV   SRL     GR2,1
104 ../../../../as/FUNC/outa.casl:   64:        LAD     GR2,#8000,GR2
105 ../../../../as/FUNC/outa.casl:   65:        SRL     GR4,1
106 ../../../../as/FUNC/outa.casl:   66:        JUMP    ODLPIN
107 ../../../../as/FUNC/outa.casl:   67:ODLOOP  SRL     GR4,1           ; ループ先頭。GR4を1回右シフト
108 ../../../../as/FUNC/outa.casl:   68:        JZE     ODFIN           ; (GR4 = 0)の場合、ループ脱出
109 ../../../../as/FUNC/outa.casl:   69:        SRL     GR2,1           ; GR2を1回右シフト
110 ../../../../as/FUNC/outa.casl:   70:        CPL     GR1,ODY         ; (GR1 < ODY)の場合、ループ脱出
111 ../../../../as/FUNC/outa.casl:   71:        JMI     ODFIN           ; ↓
112 ../../../../as/FUNC/outa.casl:   72:        CPL     GR1,GR2         ; (GR1 < GR2)の場合、ループ先頭へジャンプ
113 ../../../../as/FUNC/outa.casl:   73:        JMI     ODLOOP          ; ↓
114 ../../../../as/FUNC/outa.casl:   74:ODLPIN  SUBL    GR1,GR2         ; GR1 <- GR1 - GR2
115 ../../../../as/FUNC/outa.casl:   75:        ADDL    GR0,GR4         ; GR0 <- GR0 + GR4
116 ../../../../as/FUNC/outa.casl:   76:        JUMP    ODLOOP          ; ループ終端
117 ../../../../as/FUNC/outa.casl:   77:ODFIN   LD      GR3,GR1
118 ../../../../as/FUNC/outa.casl:   78:        POP GR4
119 ../../../../as/FUNC/outa.casl:   79:        POP     GR2
120 ../../../../as/FUNC/outa.casl:   80:        POP     GR1
121 ../../../../as/FUNC/outa.casl:   81:        RET
122 ../../../../as/FUNC/outa.casl:   82:ODY     DS      1        
123 ../../../../as/FUNC/outa.casl:   83:        END
124 ../../../../as/FUNC/outa.casl:   84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
125 ../../../../as/FUNC/outa.casl:   85:;; 例: 12345 -> 54321、54321- -> -12345
126 ../../../../as/FUNC/outa.casl:   86:REV     START
127 ../../../../as/FUNC/outa.casl:   87:        RPUSH
128 ../../../../as/FUNC/outa.casl:   88:        LAD     GR3,0           ; GR3の初期化
129 ../../../../as/FUNC/outa.casl:   89:RPU     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
130 ../../../../as/FUNC/outa.casl:   90:        JZE     RNEXT           ; ↓
131 ../../../../as/FUNC/outa.casl:   91:        LD      GR4,GR1         ; GR4にGR1の値をコピー
132 ../../../../as/FUNC/outa.casl:   92:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
133 ../../../../as/FUNC/outa.casl:   93:        LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
134 ../../../../as/FUNC/outa.casl:   94:        PUSH    0,GR5           ; GR5をプッシュ
135 ../../../../as/FUNC/outa.casl:   95:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
136 ../../../../as/FUNC/outa.casl:   96:        JUMP    RPU             ; ループ終端
137 ../../../../as/FUNC/outa.casl:   97:RNEXT   LAD     GR3,0           ; GR3の初期化
138 ../../../../as/FUNC/outa.casl:   98:RPO     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
139 ../../../../as/FUNC/outa.casl:   99:        JZE     RFIN            ; ↓
140 ../../../../as/FUNC/outa.casl:  100:        POP     GR5             ; GR5にポップ
141 ../../../../as/FUNC/outa.casl:  101:        LD      GR4,GR1         ; GR4にGR1の値をコピー
142 ../../../../as/FUNC/outa.casl:  102:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
143 ../../../../as/FUNC/outa.casl:  103:        ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
144 ../../../../as/FUNC/outa.casl:  104:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
145 ../../../../as/FUNC/outa.casl:  105:        JUMP    RPO             ; ループ終端
146 ../../../../as/FUNC/outa.casl:  106:RFIN    RPOP
147 ../../../../as/FUNC/outa.casl:  107:        RET
148 ../../../../as/FUNC/outa.casl:  108:        END
149 ../../../../as/FUNC/outa.casl:  109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
150 ../../../../as/FUNC/outa.casl:  110:;; 例: -10 -> 10, -20 -> 20
151 ../../../../as/FUNC/outa.casl:  111:OABS    START
152 ../../../../as/FUNC/outa.casl:  112:        XOR     GR1,=#FFFF      ; GR1の値を反転
153 ../../../../as/FUNC/outa.casl:  113:        LAD     GR1,1,GR1       ; GR1 <- GR1 + 1
154 ../../../../as/FUNC/outa.casl:  114:        RET
155 ../../../../as/FUNC/outa.casl:  115:        END
156
157 Label::::
158 ODIVL.ODY ---> #00FC
159 COUNT1 ---> #0012
160 OUTA.LEN ---> #009D
161 ODIVL.ODLOOP ---> #00E6
162 ODIVL.ODLPIN ---> #00F3
163 OUTA.ZPRT ---> #0064
164 OUTA.STI ---> #0044
165 REV.RFIN ---> #0128
166 OUTA.STR ---> #008C
167 ODIVL.ODFIN ---> #00F7
168 REV.RPO ---> #011C
169 REV.RPU ---> #010D
170 COUNT1.MORE ---> #001A
171 ODIVL.ODYOV ---> #00DE
172 REV ---> #00FD
173 MAIN.FIN ---> #0010
174 REV.RNEXT ---> #011A
175 OABS ---> #0130
176 OUTA.NCHAR ---> #009E
177 ODIVL.ODSL ---> #00D3
178 OUTA.STLST ---> #0053
179 MAIN ---> #0000
180 ODIVL ---> #00C2
181 COUNT1.RETURN ---> #0021
182 OUTA ---> #0025
183 MAIN.LOOP ---> #0002
184 OUTA.PRT ---> #006A
185 MAIN.MAX ---> #0011
186
187 Assemble ../../../../as/FUNC/count1_call.casl (1)
188 ../../../../as/FUNC/count1_call.casl:    1:;; count1.casl(「アセンブラ言語の仕様」プログラム例)を呼び出し、出力結果を表示
189 ../../../../as/FUNC/count1_call.casl:    2:;; 使い方: casl2 count1_call.casl count1.casl outa.casl
190 ../../../../as/FUNC/count1_call.casl:    3:MAIN    START
191 ../../../../as/FUNC/count1_call.casl:    4:        LAD     GR2,0
192         #0000   #1220
193         #0001   #0000
194 ../../../../as/FUNC/count1_call.casl:    5:LOOP    CPA     GR2,MAX         ; ループ開始。GR2がMAXの値になったらループ脱出
195         #0002   #4020
196         #0003   #0011
197 ../../../../as/FUNC/count1_call.casl:    6:        JZE     FIN             ; ↓
198         #0004   #6300
199         #0005   #0010
200 ../../../../as/FUNC/count1_call.casl:    7:        LD      GR1,GR2         ; GR1にVALの値をロード
201         #0006   #1412
202 ../../../../as/FUNC/count1_call.casl:    8:        CALL    COUNT1          ; COUNT1を呼び出す。出力はGR0に格納
203         #0007   #8000
204         #0008   #0012
205 ../../../../as/FUNC/count1_call.casl:    9:        LD      GR1,GR0         ; GR1にGR0の値をコピー
206         #0009   #1410
207 ../../../../as/FUNC/count1_call.casl:   10:        CALL    OUTA            ; OUTAを呼び出す
208         #000A   #8000
209         #000B   #0025
210 ../../../../as/FUNC/count1_call.casl:   11:        LAD     GR2,1,GR2       ; GR2 <= GR2 + 1
211         #000C   #1222
212         #000D   #0001
213 ../../../../as/FUNC/count1_call.casl:   12:        JUMP    LOOP            ; ループ終端
214         #000E   #6400
215         #000F   #0002
216 ../../../../as/FUNC/count1_call.casl:   13:FIN     RET
217         #0010   #8100
218 ../../../../as/FUNC/count1_call.casl:   14:MAX     DC      256
219         #0011   #0100
220 ../../../../as/FUNC/count1_call.casl:   15:        END
221
222 Assemble ../../../../as/FUNC/count1.casl (1)
223 ../../../../as/FUNC/count1.casl:    1:COUNT1    START
224 ../../../../as/FUNC/count1.casl:    2:;       入力    GR1:検索する語
225 ../../../../as/FUNC/count1.casl:    3:;       処理    GR1中の'1'のビットの個数を求める
226 ../../../../as/FUNC/count1.casl:    4:;       出力    GR0:GR1中の'1'のビットの個数
227 ../../../../as/FUNC/count1.casl:    5:  PUSH    0,GR1
228         #0012   #7001
229         #0013   #0000
230 ../../../../as/FUNC/count1.casl:    6:    PUSH  0,GR2
231         #0014   #7002
232         #0015   #0000
233 ../../../../as/FUNC/count1.casl:    7:    SUBA  GR2,GR2
234         #0016   #2522
235 ../../../../as/FUNC/count1.casl:    8:    AND           GR1,GR1
236         #0017   #3411
237 ../../../../as/FUNC/count1.casl:    9:    JZE   RETURN
238         #0018   #6300
239         #0019   #0021
240 ../../../../as/FUNC/count1.casl:   10:MORE LAD  GR2,1,GR2
241         #001A   #1222
242         #001B   #0001
243 ../../../../as/FUNC/count1.casl:   11:  LAD             GR0,-1,GR1
244         #001C   #1201
245         #001D   #FFFF
246 ../../../../as/FUNC/count1.casl:   12:    AND           GR1,GR0
247         #001E   #3410
248 ../../../../as/FUNC/count1.casl:   13:    JNZ           MORE
249         #001F   #6200
250         #0020   #001A
251 ../../../../as/FUNC/count1.casl:   14:RETURN LD GR0,GR2
252         #0021   #1402
253 ../../../../as/FUNC/count1.casl:   15:  POP             GR2
254         #0022   #7120
255 ../../../../as/FUNC/count1.casl:   16:    POP           GR1
256         #0023   #7110
257 ../../../../as/FUNC/count1.casl:   17:    RET
258         #0024   #8100
259 ../../../../as/FUNC/count1.casl:   18:    END
260
261 Assemble ../../../../as/FUNC/outa.casl (1)
262 ../../../../as/FUNC/outa.casl:    1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
263 ../../../../as/FUNC/outa.casl:    2:OUTA    START
264 ../../../../as/FUNC/outa.casl:    3:        RPUSH
265         #0025   #7001
266         #0026   #0000
267         #0027   #7002
268         #0028   #0000
269         #0029   #7003
270         #002A   #0000
271         #002B   #7004
272         #002C   #0000
273         #002D   #7005
274         #002E   #0000
275         #002F   #7006
276         #0030   #0000
277         #0031   #7007
278         #0032   #0000
279 ../../../../as/FUNC/outa.casl:    4:        LAD     GR2,10          ; GR2に10進数の「10」を格納。
280         #0033   #1220
281         #0034   #000A
282 ../../../../as/FUNC/outa.casl:    5:        LAD     GR0,0           ; GR0 <- 0
283         #0035   #1200
284         #0036   #0000
285 ../../../../as/FUNC/outa.casl:    6:        LAD     GR4,0           ; 負数フラグ。GR1が負数の場合、GR4は1
286         #0037   #1240
287         #0038   #0000
288 ../../../../as/FUNC/outa.casl:    7:        LAD     GR5,0           ; 整数値の長さ
289         #0039   #1250
290         #003A   #0000
291 ../../../../as/FUNC/outa.casl:    8:        AND     GR1,GR1         ; GR1をテスト
292         #003B   #3411
293 ../../../../as/FUNC/outa.casl:    9:        JZE     ZPRT            ; GR1が0の場合、ZPRTにジャンプ
294         #003C   #6300
295         #003D   #0064
296 ../../../../as/FUNC/outa.casl:   10:        JPL     STI             ; GR1が正数の場合、STIにジャンプ
297         #003E   #6500
298         #003F   #0044
299 ../../../../as/FUNC/outa.casl:   11:        LAD     GR4,1           ; GR1が負数の場合、GR4をオン
300         #0040   #1240
301         #0041   #0001
302 ../../../../as/FUNC/outa.casl:   12:        CALL    OABS            ;                  GR1を正数に変換
303         #0042   #8000
304         #0043   #0130
305 ../../../../as/FUNC/outa.casl:   13:STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
306         #0044   #4512
307 ../../../../as/FUNC/outa.casl:   14:        JMI     STLST           ; ↓
308         #0045   #6100
309         #0046   #0053
310 ../../../../as/FUNC/outa.casl:   15:        CALL    ODIVL           ; GR1とGR2の、商をGR0、剰余をGR3に格納
311         #0047   #8000
312         #0048   #00C2
313 ../../../../as/FUNC/outa.casl:   16:        LD      GR1,GR3         ; GR1にGR3をコピー
314         #0049   #1413
315 ../../../../as/FUNC/outa.casl:   17:        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
316         #004A   #1011
317         #004B   #009E
318 ../../../../as/FUNC/outa.casl:   18:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
319         #004C   #1115
320         #004D   #008C
321 ../../../../as/FUNC/outa.casl:   19:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
322         #004E   #1255
323         #004F   #0001
324 ../../../../as/FUNC/outa.casl:   20:        LD      GR1,GR0         ; GR0をGR1にコピー
325         #0050   #1410
326 ../../../../as/FUNC/outa.casl:   21:        JUMP    STI             ; ループ終端
327         #0051   #6400
328         #0052   #0044
329 ../../../../as/FUNC/outa.casl:   22:STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
330         #0053   #1011
331         #0054   #009E
332 ../../../../as/FUNC/outa.casl:   23:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
333         #0055   #1115
334         #0056   #008C
335 ../../../../as/FUNC/outa.casl:   24:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
336         #0057   #1255
337         #0058   #0001
338 ../../../../as/FUNC/outa.casl:   25:        AND     GR4,GR4         ; 正数の場合
339         #0059   #3444
340 ../../../../as/FUNC/outa.casl:   26:        JZE     PRT             ; ↓
341         #005A   #6300
342         #005B   #006A
343 ../../../../as/FUNC/outa.casl:   27:        LD      GR1,='-'        ; 負数の場合、「-」をSTR領域に格納
344         #0135   #002D
345         #005C   #1010
346         #005D   #0135
347 ../../../../as/FUNC/outa.casl:   28:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
348         #005E   #1115
349         #005F   #008C
350 ../../../../as/FUNC/outa.casl:   29:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
351         #0060   #1255
352         #0061   #0001
353 ../../../../as/FUNC/outa.casl:   30:        JUMP    PRT             ; PRTにジャンプ
354         #0062   #6400
355         #0063   #006A
356 ../../../../as/FUNC/outa.casl:   31:ZPRT    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
357         #0064   #1010
358         #0065   #009E
359 ../../../../as/FUNC/outa.casl:   32:        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
360         #0066   #1115
361         #0067   #008C
362 ../../../../as/FUNC/outa.casl:   33:        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
363         #0068   #1255
364         #0069   #0001
365 ../../../../as/FUNC/outa.casl:   34:PRT     ST      GR5,LEN         ; LEN <- GR5
366         #006A   #1150
367         #006B   #009D
368 ../../../../as/FUNC/outa.casl:   35:        LD      GR2,LEN         ; GR2にLENの値を格納
369         #006C   #1020
370         #006D   #009D
371 ../../../../as/FUNC/outa.casl:   36:        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
372         #006E   #1210
373         #006F   #008C
374 ../../../../as/FUNC/outa.casl:   37:        CALL    REV             ; 文字列を逆順に並べ替え
375         #0070   #8000
376         #0071   #00FD
377 ../../../../as/FUNC/outa.casl:   38:        OUT     STR,LEN         ; 文字列を出力
378         #0072   #7001
379         #0073   #0000
380         #0074   #7002
381         #0075   #0000
382         #0076   #1210
383         #0077   #008C
384         #0078   #1020
385         #0079   #009D
386         #007A   #F000
387         #007B   #0002
388         #007C   #1210
389         #007D   #0136
390         #0136   #000A
391         #007E   #1220
392         #007F   #0001
393         #0080   #F000
394         #0081   #0002
395         #0082   #7120
396         #0083   #7110
397 ../../../../as/FUNC/outa.casl:   39:        RPOP
398         #0084   #7170
399         #0085   #7160
400         #0086   #7150
401         #0087   #7140
402         #0088   #7130
403         #0089   #7120
404         #008A   #7110
405 ../../../../as/FUNC/outa.casl:   40:        RET
406         #008B   #8100
407 ../../../../as/FUNC/outa.casl:   41:STR     DS      17
408         #008C   #0000
409         #008D   #0000
410         #008E   #0000
411         #008F   #0000
412         #0090   #0000
413         #0091   #0000
414         #0092   #0000
415         #0093   #0000
416         #0094   #0000
417         #0095   #0000
418         #0096   #0000
419         #0097   #0000
420         #0098   #0000
421         #0099   #0000
422         #009A   #0000
423         #009B   #0000
424         #009C   #0000
425 ../../../../as/FUNC/outa.casl:   42:LEN     DS      1
426         #009D   #0000
427 ../../../../as/FUNC/outa.casl:   43:NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
428         #009E   #0030
429         #009F   #0031
430         #00A0   #0032
431         #00A1   #0033
432         #00A2   #0034
433         #00A3   #0035
434         #00A4   #0036
435         #00A5   #0037
436         #00A6   #0038
437         #00A7   #0039
438         #00A8   #0041
439         #00A9   #0042
440         #00AA   #0043
441         #00AB   #0044
442         #00AC   #0045
443         #00AD   #0046
444         #00AE   #0047
445         #00AF   #0048
446         #00B0   #0049
447         #00B1   #004A
448         #00B2   #004B
449         #00B3   #004C
450         #00B4   #004D
451         #00B5   #004E
452         #00B6   #004F
453         #00B7   #0050
454         #00B8   #0051
455         #00B9   #0052
456         #00BA   #0053
457         #00BB   #0054
458         #00BC   #0055
459         #00BD   #0056
460         #00BE   #0057
461         #00BF   #0058
462         #00C0   #0059
463         #00C1   #005A
464 ../../../../as/FUNC/outa.casl:   44:        END
465 ../../../../as/FUNC/outa.casl:   45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
466 ../../../../as/FUNC/outa.casl:   46:;;; 0〜65535の範囲の数値を扱う
467 ../../../../as/FUNC/outa.casl:   47:ODIVL   START
468 ../../../../as/FUNC/outa.casl:   48:        PUSH    0,GR1
469         #00C2   #7001
470         #00C3   #0000
471 ../../../../as/FUNC/outa.casl:   49:        PUSH    0,GR2
472         #00C4   #7002
473         #00C5   #0000
474 ../../../../as/FUNC/outa.casl:   50:        PUSH    0,GR4
475         #00C6   #7004
476         #00C7   #0000
477 ../../../../as/FUNC/outa.casl:   51:        AND     GR2,GR2         ; GR2が0の場合、ODFINへジャンプ
478         #00C8   #3422
479 ../../../../as/FUNC/outa.casl:   52:        JZE     ODFIN           ; ↓
480         #00C9   #6300
481         #00CA   #00F7
482 ../../../../as/FUNC/outa.casl:   53:        ST      GR2,ODY         ; ODYにGR2の初期値を保存
483         #00CB   #1120
484         #00CC   #00FC
485 ../../../../as/FUNC/outa.casl:   54:        LAD     GR0,0           ; GR0の初期化
486         #00CD   #1200
487         #00CE   #0000
488 ../../../../as/FUNC/outa.casl:   55:        LAD     GR3,0           ; GR3の初期化
489         #00CF   #1230
490         #00D0   #0000
491 ../../../../as/FUNC/outa.casl:   56:        LAD     GR4,1           ; GR4の初期化。対象ビットを表す
492         #00D1   #1240
493         #00D2   #0001
494 ../../../../as/FUNC/outa.casl:   57:ODSL    CPL     GR2,GR1         ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
495         #00D3   #4521
496 ../../../../as/FUNC/outa.casl:   58:        JPL     ODLOOP          ; ↓
497         #00D4   #6500
498         #00D5   #00E6
499 ../../../../as/FUNC/outa.casl:   59:        SLL     GR4,1           ; GR4を1回左シフト
500         #00D6   #5240
501         #00D7   #0001
502 ../../../../as/FUNC/outa.casl:   60:        SLL     GR2,1           ; GR2を1回左シフト
503         #00D8   #5220
504         #00D9   #0001
505 ../../../../as/FUNC/outa.casl:   61:        JOV     ODYOV           ; オーバーフローの場合は、ODYOVにジャンプ
506         #00DA   #6600
507         #00DB   #00DE
508 ../../../../as/FUNC/outa.casl:   62:        JUMP    ODSL            ; ループ終端
509         #00DC   #6400
510         #00DD   #00D3
511 ../../../../as/FUNC/outa.casl:   63:ODYOV   SRL     GR2,1
512         #00DE   #5320
513         #00DF   #0001
514 ../../../../as/FUNC/outa.casl:   64:        LAD     GR2,#8000,GR2
515         #00E0   #1222
516         #00E1   #8000
517 ../../../../as/FUNC/outa.casl:   65:        SRL     GR4,1
518         #00E2   #5340
519         #00E3   #0001
520 ../../../../as/FUNC/outa.casl:   66:        JUMP    ODLPIN
521         #00E4   #6400
522         #00E5   #00F3
523 ../../../../as/FUNC/outa.casl:   67:ODLOOP  SRL     GR4,1           ; ループ先頭。GR4を1回右シフト
524         #00E6   #5340
525         #00E7   #0001
526 ../../../../as/FUNC/outa.casl:   68:        JZE     ODFIN           ; (GR4 = 0)の場合、ループ脱出
527         #00E8   #6300
528         #00E9   #00F7
529 ../../../../as/FUNC/outa.casl:   69:        SRL     GR2,1           ; GR2を1回右シフト
530         #00EA   #5320
531         #00EB   #0001
532 ../../../../as/FUNC/outa.casl:   70:        CPL     GR1,ODY         ; (GR1 < ODY)の場合、ループ脱出
533         #00EC   #4110
534         #00ED   #00FC
535 ../../../../as/FUNC/outa.casl:   71:        JMI     ODFIN           ; ↓
536         #00EE   #6100
537         #00EF   #00F7
538 ../../../../as/FUNC/outa.casl:   72:        CPL     GR1,GR2         ; (GR1 < GR2)の場合、ループ先頭へジャンプ
539         #00F0   #4512
540 ../../../../as/FUNC/outa.casl:   73:        JMI     ODLOOP          ; ↓
541         #00F1   #6100
542         #00F2   #00E6
543 ../../../../as/FUNC/outa.casl:   74:ODLPIN  SUBL    GR1,GR2         ; GR1 <- GR1 - GR2
544         #00F3   #2712
545 ../../../../as/FUNC/outa.casl:   75:        ADDL    GR0,GR4         ; GR0 <- GR0 + GR4
546         #00F4   #2604
547 ../../../../as/FUNC/outa.casl:   76:        JUMP    ODLOOP          ; ループ終端
548         #00F5   #6400
549         #00F6   #00E6
550 ../../../../as/FUNC/outa.casl:   77:ODFIN   LD      GR3,GR1
551         #00F7   #1431
552 ../../../../as/FUNC/outa.casl:   78:        POP GR4
553         #00F8   #7140
554 ../../../../as/FUNC/outa.casl:   79:        POP     GR2
555         #00F9   #7120
556 ../../../../as/FUNC/outa.casl:   80:        POP     GR1
557         #00FA   #7110
558 ../../../../as/FUNC/outa.casl:   81:        RET
559         #00FB   #8100
560 ../../../../as/FUNC/outa.casl:   82:ODY     DS      1        
561         #00FC   #0000
562 ../../../../as/FUNC/outa.casl:   83:        END
563 ../../../../as/FUNC/outa.casl:   84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
564 ../../../../as/FUNC/outa.casl:   85:;; 例: 12345 -> 54321、54321- -> -12345
565 ../../../../as/FUNC/outa.casl:   86:REV     START
566 ../../../../as/FUNC/outa.casl:   87:        RPUSH
567         #00FD   #7001
568         #00FE   #0000
569         #00FF   #7002
570         #0100   #0000
571         #0101   #7003
572         #0102   #0000
573         #0103   #7004
574         #0104   #0000
575         #0105   #7005
576         #0106   #0000
577         #0107   #7006
578         #0108   #0000
579         #0109   #7007
580         #010A   #0000
581 ../../../../as/FUNC/outa.casl:   88:        LAD     GR3,0           ; GR3の初期化
582         #010B   #1230
583         #010C   #0000
584 ../../../../as/FUNC/outa.casl:   89:RPU     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
585         #010D   #4532
586 ../../../../as/FUNC/outa.casl:   90:        JZE     RNEXT           ; ↓
587         #010E   #6300
588         #010F   #011A
589 ../../../../as/FUNC/outa.casl:   91:        LD      GR4,GR1         ; GR4にGR1の値をコピー
590         #0110   #1441
591 ../../../../as/FUNC/outa.casl:   92:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
592         #0111   #2643
593 ../../../../as/FUNC/outa.casl:   93:        LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
594         #0112   #1054
595         #0113   #0000
596 ../../../../as/FUNC/outa.casl:   94:        PUSH    0,GR5           ; GR5をプッシュ
597         #0114   #7005
598         #0115   #0000
599 ../../../../as/FUNC/outa.casl:   95:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
600         #0116   #1233
601         #0117   #0001
602 ../../../../as/FUNC/outa.casl:   96:        JUMP    RPU             ; ループ終端
603         #0118   #6400
604         #0119   #010D
605 ../../../../as/FUNC/outa.casl:   97:RNEXT   LAD     GR3,0           ; GR3の初期化
606         #011A   #1230
607         #011B   #0000
608 ../../../../as/FUNC/outa.casl:   98:RPO     CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
609         #011C   #4532
610 ../../../../as/FUNC/outa.casl:   99:        JZE     RFIN            ; ↓
611         #011D   #6300
612         #011E   #0128
613 ../../../../as/FUNC/outa.casl:  100:        POP     GR5             ; GR5にポップ
614         #011F   #7150
615 ../../../../as/FUNC/outa.casl:  101:        LD      GR4,GR1         ; GR4にGR1の値をコピー
616         #0120   #1441
617 ../../../../as/FUNC/outa.casl:  102:        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
618         #0121   #2643
619 ../../../../as/FUNC/outa.casl:  103:        ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
620         #0122   #1154
621         #0123   #0000
622 ../../../../as/FUNC/outa.casl:  104:        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
623         #0124   #1233
624         #0125   #0001
625 ../../../../as/FUNC/outa.casl:  105:        JUMP    RPO             ; ループ終端
626         #0126   #6400
627         #0127   #011C
628 ../../../../as/FUNC/outa.casl:  106:RFIN    RPOP
629         #0128   #7170
630         #0129   #7160
631         #012A   #7150
632         #012B   #7140
633         #012C   #7130
634         #012D   #7120
635         #012E   #7110
636 ../../../../as/FUNC/outa.casl:  107:        RET
637         #012F   #8100
638 ../../../../as/FUNC/outa.casl:  108:        END
639 ../../../../as/FUNC/outa.casl:  109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
640 ../../../../as/FUNC/outa.casl:  110:;; 例: -10 -> 10, -20 -> 20
641 ../../../../as/FUNC/outa.casl:  111:OABS    START
642 ../../../../as/FUNC/outa.casl:  112:        XOR     GR1,=#FFFF      ; GR1の値を反転
643         #0137   #FFFF
644         #0130   #3210
645         #0131   #0137
646 ../../../../as/FUNC/outa.casl:  113:        LAD     GR1,1,GR1       ; GR1 <- GR1 + 1
647         #0132   #1211
648         #0133   #0001
649 ../../../../as/FUNC/outa.casl:  114:        RET
650         #0134   #8100
651 ../../../../as/FUNC/outa.casl:  115:        END
652 0
653 1
654 1
655 2
656 1
657 2
658 2
659 3
660 1
661 2
662 2
663 3
664 2
665 3
666 3
667 4
668 1
669 2
670 2
671 3
672 2
673 3
674 3
675 4
676 2
677 3
678 3
679 4
680 3
681 4
682 4
683 5
684 1
685 2
686 2
687 3
688 2
689 3
690 3
691 4
692 2
693 3
694 3
695 4
696 3
697 4
698 4
699 5
700 2
701 3
702 3
703 4
704 3
705 4
706 4
707 5
708 3
709 4
710 4
711 5
712 4
713 5
714 5
715 6
716 1
717 2
718 2
719 3
720 2
721 3
722 3
723 4
724 2
725 3
726 3
727 4
728 3
729 4
730 4
731 5
732 2
733 3
734 3
735 4
736 3
737 4
738 4
739 5
740 3
741 4
742 4
743 5
744 4
745 5
746 5
747 6
748 2
749 3
750 3
751 4
752 3
753 4
754 4
755 5
756 3
757 4
758 4
759 5
760 4
761 5
762 5
763 6
764 3
765 4
766 4
767 5
768 4
769 5
770 5
771 6
772 4
773 5
774 5
775 6
776 5
777 6
778 6
779 7
780 1
781 2
782 2
783 3
784 2
785 3
786 3
787 4
788 2
789 3
790 3
791 4
792 3
793 4
794 4
795 5
796 2
797 3
798 3
799 4
800 3
801 4
802 4
803 5
804 3
805 4
806 4
807 5
808 4
809 5
810 5
811 6
812 2
813 3
814 3
815 4
816 3
817 4
818 4
819 5
820 3
821 4
822 4
823 5
824 4
825 5
826 5
827 6
828 3
829 4
830 4
831 5
832 4
833 5
834 5
835 6
836 4
837 5
838 5
839 6
840 5
841 6
842 6
843 7
844 2
845 3
846 3
847 4
848 3
849 4
850 4
851 5
852 3
853 4
854 4
855 5
856 4
857 5
858 5
859 6
860 3
861 4
862 4
863 5
864 4
865 5
866 5
867 6
868 4
869 5
870 5
871 6
872 5
873 6
874 6
875 7
876 3
877 4
878 4
879 5
880 4
881 5
882 5
883 6
884 4
885 5
886 5
887 6
888 5
889 6
890 6
891 7
892 4
893 5
894 5
895 6
896 5
897 6
898 6
899 7
900 5
901 6
902 6
903 7
904 6
905 7
906 7
907 8