1 ../../../../casl2 -sla ../../../../as/FUNC/minim_call.casl ../../../../as/FUNC/minim.casl ../../../../as/FUNC/outa.casl
3 Assemble ../../../../as/FUNC/minim_call.casl (0)
4 ../../../../as/FUNC/minim_call.casl:1:;;; casl2 minim_call.casl minim.casl outa.casl
5 ../../../../as/FUNC/minim_call.casl:2:MAIN START
6 ../../../../as/FUNC/minim_call.casl:3: LAD GR1,DATA
7 ../../../../as/FUNC/minim_call.casl:4: LD GR2,CNT
8 ../../../../as/FUNC/minim_call.casl:5: CALL MINIM
9 ../../../../as/FUNC/minim_call.casl:6: LD GR1,GR0
10 ../../../../as/FUNC/minim_call.casl:7: CALL OUTA
11 ../../../../as/FUNC/minim_call.casl:8: RET
12 ../../../../as/FUNC/minim_call.casl:9:DATA DC 23,78,2,45,67,-39,86
13 ../../../../as/FUNC/minim_call.casl:10:CNT DC 7
14 ../../../../as/FUNC/minim_call.casl:11: END
16 Assemble ../../../../as/FUNC/minim.casl (0)
17 ../../../../as/FUNC/minim.casl:1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
18 ../../../../as/FUNC/minim.casl:2:MINIM START
19 ../../../../as/FUNC/minim.casl:3: LD GR0,0,GR1
20 ../../../../as/FUNC/minim.casl:4: ST GR0,MIN
21 ../../../../as/FUNC/minim.casl:5: LAD GR3,0
22 ../../../../as/FUNC/minim.casl:6:S1 CPA GR3,GR2
23 ../../../../as/FUNC/minim.casl:7: JZE LRET
24 ../../../../as/FUNC/minim.casl:8: LAD GR1,1,GR1
25 ../../../../as/FUNC/minim.casl:9: LD GR0,0,GR1
26 ../../../../as/FUNC/minim.casl:10: CPA GR0,MIN
27 ../../../../as/FUNC/minim.casl:11: JPL S2
28 ../../../../as/FUNC/minim.casl:12: JZE S2
29 ../../../../as/FUNC/minim.casl:13: ST GR0,MIN
30 ../../../../as/FUNC/minim.casl:14:S2 LAD GR3,1,GR3
31 ../../../../as/FUNC/minim.casl:15: JUMP S1
32 ../../../../as/FUNC/minim.casl:16:LRET LD GR0,MIN
33 ../../../../as/FUNC/minim.casl:17: RET
34 ../../../../as/FUNC/minim.casl:18:MIN DS 1
35 ../../../../as/FUNC/minim.casl:19: END
37 Assemble ../../../../as/FUNC/outa.casl (0)
38 ../../../../as/FUNC/outa.casl:1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
39 ../../../../as/FUNC/outa.casl:2:OUTA START
40 ../../../../as/FUNC/outa.casl:3: RPUSH
41 ../../../../as/FUNC/outa.casl:4: LAD GR2,10 ; GR2に10進数の「10」を格納。
42 ../../../../as/FUNC/outa.casl:5: LAD GR0,0 ; GR0 <- 0
43 ../../../../as/FUNC/outa.casl:6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1
44 ../../../../as/FUNC/outa.casl:7: ST GR0,LEN ; LENの初期化
45 ../../../../as/FUNC/outa.casl:8: AND GR1,GR1 ; GR1をテスト
46 ../../../../as/FUNC/outa.casl:9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ
47 ../../../../as/FUNC/outa.casl:10: JPL STI ; GR1が正数の場合、STIにジャンプ
48 ../../../../as/FUNC/outa.casl:11: LAD GR4,1 ; GR1が負数の場合、GR4をオン
49 ../../../../as/FUNC/outa.casl:12: CALL OABS ; GR1を正数に変換
50 ../../../../as/FUNC/outa.casl:13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
51 ../../../../as/FUNC/outa.casl:14: JMI STLST ; ↓
52 ../../../../as/FUNC/outa.casl:15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納
53 ../../../../as/FUNC/outa.casl:16: LD GR1,GR3 ; GR1にGR3をコピー
54 ../../../../as/FUNC/outa.casl:17: LD GR1,NCHAR,GR1 ; GR1を文字に変換
55 ../../../../as/FUNC/outa.casl:18: CALL STSTR ; GR1をSTR領域に格納
56 ../../../../as/FUNC/outa.casl:19: LD GR1,GR0 ; GR0をGR1にコピー
57 ../../../../as/FUNC/outa.casl:20: JUMP STI ; ループ終端
58 ../../../../as/FUNC/outa.casl:21:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
59 ../../../../as/FUNC/outa.casl:22: CALL STSTR ; GR1をSTR領域に格納
60 ../../../../as/FUNC/outa.casl:23: AND GR4,GR4 ; 正数の場合
61 ../../../../as/FUNC/outa.casl:24: JZE PRT ; ↓
62 ../../../../as/FUNC/outa.casl:25: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
63 ../../../../as/FUNC/outa.casl:26: CALL STSTR ; ↓
64 ../../../../as/FUNC/outa.casl:27: JUMP PRT ; PRTにジャンプ
65 ../../../../as/FUNC/outa.casl:28:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
66 ../../../../as/FUNC/outa.casl:29: CALL STSTR ; ↓
67 ../../../../as/FUNC/outa.casl:30:PRT LD GR2,LEN ; GR2にLENの値を格納
68 ../../../../as/FUNC/outa.casl:31: LAD GR1,STR ; GR1に文字列のアドレスを格納
69 ../../../../as/FUNC/outa.casl:32: CALL REV ; 文字列を逆順に並べ替え
70 ../../../../as/FUNC/outa.casl:33: OUT STR,LEN ; 文字列を出力
71 ../../../../as/FUNC/outa.casl:34: RPOP
72 ../../../../as/FUNC/outa.casl:35: RET
73 ../../../../as/FUNC/outa.casl:36:STR DS 17
74 ../../../../as/FUNC/outa.casl:37:LEN DS 1
75 ../../../../as/FUNC/outa.casl:38:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
76 ../../../../as/FUNC/outa.casl:39: END
77 ../../../../as/FUNC/outa.casl:40:;; GR1をSTR領域に格納し、LENをインクリメント
78 ../../../../as/FUNC/outa.casl:41:STSTR START
79 ../../../../as/FUNC/outa.casl:42: PUSH 0,GR1
80 ../../../../as/FUNC/outa.casl:43: PUSH 0,GR2
81 ../../../../as/FUNC/outa.casl:44: LD GR2,LEN ; GR2にLENの値をロード
82 ../../../../as/FUNC/outa.casl:45: ST GR1,STR,GR2 ; STR+GR2 <- GR1
83 ../../../../as/FUNC/outa.casl:46: LAD GR2,1,GR2 ; GR2 <- GR2 + 1
84 ../../../../as/FUNC/outa.casl:47: ST GR2,LEN ; LENにGR2を格納
85 ../../../../as/FUNC/outa.casl:48: POP GR2
86 ../../../../as/FUNC/outa.casl:49: POP GR1
87 ../../../../as/FUNC/outa.casl:50: RET
88 ../../../../as/FUNC/outa.casl:51: END
89 ../../../../as/FUNC/outa.casl:52:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
90 ../../../../as/FUNC/outa.casl:53:;;; 0〜65535の範囲の数値を扱う
91 ../../../../as/FUNC/outa.casl:54:ODIVL START
92 ../../../../as/FUNC/outa.casl:55: PUSH 0,GR1
93 ../../../../as/FUNC/outa.casl:56: PUSH 0,GR2
94 ../../../../as/FUNC/outa.casl:57: PUSH 0,GR4
95 ../../../../as/FUNC/outa.casl:58: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ
96 ../../../../as/FUNC/outa.casl:59: JZE ODFIN ; ↓
97 ../../../../as/FUNC/outa.casl:60: ST GR2,ODY ; ODYにGR2の初期値を保存
98 ../../../../as/FUNC/outa.casl:61: LAD GR0,0 ; GR0の初期化
99 ../../../../as/FUNC/outa.casl:62: LAD GR3,0 ; GR3の初期化
100 ../../../../as/FUNC/outa.casl:63: LAD GR4,1 ; GR4の初期化。対象ビットを表す
101 ../../../../as/FUNC/outa.casl:64:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
102 ../../../../as/FUNC/outa.casl:65: JPL ODLOOP ; ↓
103 ../../../../as/FUNC/outa.casl:66: SLL GR4,1 ; GR4を1回左シフト
104 ../../../../as/FUNC/outa.casl:67: SLL GR2,1 ; GR2を1回左シフト
105 ../../../../as/FUNC/outa.casl:68: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ
106 ../../../../as/FUNC/outa.casl:69: JUMP ODSL ; ループ終端
107 ../../../../as/FUNC/outa.casl:70:ODYOV SRL GR2,1
108 ../../../../as/FUNC/outa.casl:71: LAD GR2,#8000,GR2
109 ../../../../as/FUNC/outa.casl:72: SRL GR4,1
110 ../../../../as/FUNC/outa.casl:73: JUMP ODLPIN
111 ../../../../as/FUNC/outa.casl:74:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト
112 ../../../../as/FUNC/outa.casl:75: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出
113 ../../../../as/FUNC/outa.casl:76: SRL GR2,1 ; GR2を1回右シフト
114 ../../../../as/FUNC/outa.casl:77: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出
115 ../../../../as/FUNC/outa.casl:78: JMI ODFIN ; ↓
116 ../../../../as/FUNC/outa.casl:79: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ
117 ../../../../as/FUNC/outa.casl:80: JMI ODLOOP ; ↓
118 ../../../../as/FUNC/outa.casl:81:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2
119 ../../../../as/FUNC/outa.casl:82: ADDL GR0,GR4 ; GR0 <- GR0 + GR4
120 ../../../../as/FUNC/outa.casl:83: JUMP ODLOOP ; ループ終端
121 ../../../../as/FUNC/outa.casl:84:ODFIN LD GR3,GR1
122 ../../../../as/FUNC/outa.casl:85: POP GR4
123 ../../../../as/FUNC/outa.casl:86: POP GR2
124 ../../../../as/FUNC/outa.casl:87: POP GR1
125 ../../../../as/FUNC/outa.casl:88: RET
126 ../../../../as/FUNC/outa.casl:89:ODY DS 1
127 ../../../../as/FUNC/outa.casl:90: END
128 ../../../../as/FUNC/outa.casl:91:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
129 ../../../../as/FUNC/outa.casl:92:;; 例: 12345 -> 54321、54321- -> -12345
130 ../../../../as/FUNC/outa.casl:93:REV START
131 ../../../../as/FUNC/outa.casl:94: RPUSH
132 ../../../../as/FUNC/outa.casl:95: LAD GR3,0 ; GR3の初期化
133 ../../../../as/FUNC/outa.casl:96:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
134 ../../../../as/FUNC/outa.casl:97: JZE RNEXT ; ↓
135 ../../../../as/FUNC/outa.casl:98: LD GR4,GR1 ; GR4にGR1の値をコピー
136 ../../../../as/FUNC/outa.casl:99: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
137 ../../../../as/FUNC/outa.casl:100: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
138 ../../../../as/FUNC/outa.casl:101: PUSH 0,GR5 ; GR5をプッシュ
139 ../../../../as/FUNC/outa.casl:102: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
140 ../../../../as/FUNC/outa.casl:103: JUMP RPU ; ループ終端
141 ../../../../as/FUNC/outa.casl:104:RNEXT LAD GR3,0 ; GR3の初期化
142 ../../../../as/FUNC/outa.casl:105:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
143 ../../../../as/FUNC/outa.casl:106: JZE RFIN ; ↓
144 ../../../../as/FUNC/outa.casl:107: POP GR5 ; GR5にポップ
145 ../../../../as/FUNC/outa.casl:108: LD GR4,GR1 ; GR4にGR1の値をコピー
146 ../../../../as/FUNC/outa.casl:109: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
147 ../../../../as/FUNC/outa.casl:110: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
148 ../../../../as/FUNC/outa.casl:111: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
149 ../../../../as/FUNC/outa.casl:112: JUMP RPO ; ループ終端
150 ../../../../as/FUNC/outa.casl:113:RFIN RPOP
151 ../../../../as/FUNC/outa.casl:114: RET
152 ../../../../as/FUNC/outa.casl:115: END
153 ../../../../as/FUNC/outa.casl:116:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
154 ../../../../as/FUNC/outa.casl:117:;; 例: -10 -> 10, -20 -> 20
155 ../../../../as/FUNC/outa.casl:118:OABS START
156 ../../../../as/FUNC/outa.casl:119: XOR GR1,=#FFFF ; GR1の値を反転
157 ../../../../as/FUNC/outa.casl:120: LAD GR1,1,GR1 ; GR1 <- GR1 + 1
158 ../../../../as/FUNC/outa.casl:121: RET
159 ../../../../as/FUNC/outa.casl:122: END
193 Assemble ../../../../as/FUNC/minim_call.casl (1)
194 ../../../../as/FUNC/minim_call.casl:1:;;; casl2 minim_call.casl minim.casl outa.casl
195 ../../../../as/FUNC/minim_call.casl:2:MAIN START
196 ../../../../as/FUNC/minim_call.casl:3: LAD GR1,DATA
199 ../../../../as/FUNC/minim_call.casl:4: LD GR2,CNT
202 ../../../../as/FUNC/minim_call.casl:5: CALL MINIM
205 ../../../../as/FUNC/minim_call.casl:6: LD GR1,GR0
207 ../../../../as/FUNC/minim_call.casl:7: CALL OUTA
210 ../../../../as/FUNC/minim_call.casl:8: RET
212 ../../../../as/FUNC/minim_call.casl:9:DATA DC 23,78,2,45,67,-39,86
220 ../../../../as/FUNC/minim_call.casl:10:CNT DC 7
222 ../../../../as/FUNC/minim_call.casl:11: END
224 Assemble ../../../../as/FUNC/minim.casl (1)
225 ../../../../as/FUNC/minim.casl:1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
226 ../../../../as/FUNC/minim.casl:2:MINIM START
227 ../../../../as/FUNC/minim.casl:3: LD GR0,0,GR1
230 ../../../../as/FUNC/minim.casl:4: ST GR0,MIN
233 ../../../../as/FUNC/minim.casl:5: LAD GR3,0
236 ../../../../as/FUNC/minim.casl:6:S1 CPA GR3,GR2
238 ../../../../as/FUNC/minim.casl:7: JZE LRET
241 ../../../../as/FUNC/minim.casl:8: LAD GR1,1,GR1
244 ../../../../as/FUNC/minim.casl:9: LD GR0,0,GR1
247 ../../../../as/FUNC/minim.casl:10: CPA GR0,MIN
250 ../../../../as/FUNC/minim.casl:11: JPL S2
253 ../../../../as/FUNC/minim.casl:12: JZE S2
256 ../../../../as/FUNC/minim.casl:13: ST GR0,MIN
259 ../../../../as/FUNC/minim.casl:14:S2 LAD GR3,1,GR3
262 ../../../../as/FUNC/minim.casl:15: JUMP S1
265 ../../../../as/FUNC/minim.casl:16:LRET LD GR0,MIN
268 ../../../../as/FUNC/minim.casl:17: RET
270 ../../../../as/FUNC/minim.casl:18:MIN DS 1
272 ../../../../as/FUNC/minim.casl:19: END
274 Assemble ../../../../as/FUNC/outa.casl (1)
275 ../../../../as/FUNC/outa.casl:1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
276 ../../../../as/FUNC/outa.casl:2:OUTA START
277 ../../../../as/FUNC/outa.casl:3: RPUSH
292 ../../../../as/FUNC/outa.casl:4: LAD GR2,10 ; GR2に10進数の「10」を格納。
295 ../../../../as/FUNC/outa.casl:5: LAD GR0,0 ; GR0 <- 0
298 ../../../../as/FUNC/outa.casl:6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1
301 ../../../../as/FUNC/outa.casl:7: ST GR0,LEN ; LENの初期化
304 ../../../../as/FUNC/outa.casl:8: AND GR1,GR1 ; GR1をテスト
306 ../../../../as/FUNC/outa.casl:9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ
309 ../../../../as/FUNC/outa.casl:10: JPL STI ; GR1が正数の場合、STIにジャンプ
312 ../../../../as/FUNC/outa.casl:11: LAD GR4,1 ; GR1が負数の場合、GR4をオン
315 ../../../../as/FUNC/outa.casl:12: CALL OABS ; GR1を正数に変換
318 ../../../../as/FUNC/outa.casl:13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
320 ../../../../as/FUNC/outa.casl:14: JMI STLST ; ↓
323 ../../../../as/FUNC/outa.casl:15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納
326 ../../../../as/FUNC/outa.casl:16: LD GR1,GR3 ; GR1にGR3をコピー
328 ../../../../as/FUNC/outa.casl:17: LD GR1,NCHAR,GR1 ; GR1を文字に変換
331 ../../../../as/FUNC/outa.casl:18: CALL STSTR ; GR1をSTR領域に格納
334 ../../../../as/FUNC/outa.casl:19: LD GR1,GR0 ; GR0をGR1にコピー
336 ../../../../as/FUNC/outa.casl:20: JUMP STI ; ループ終端
339 ../../../../as/FUNC/outa.casl:21:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
342 ../../../../as/FUNC/outa.casl:22: CALL STSTR ; GR1をSTR領域に格納
345 ../../../../as/FUNC/outa.casl:23: AND GR4,GR4 ; 正数の場合
347 ../../../../as/FUNC/outa.casl:24: JZE PRT ; ↓
350 ../../../../as/FUNC/outa.casl:25: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
354 ../../../../as/FUNC/outa.casl:26: CALL STSTR ; ↓
357 ../../../../as/FUNC/outa.casl:27: JUMP PRT ; PRTにジャンプ
360 ../../../../as/FUNC/outa.casl:28:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
363 ../../../../as/FUNC/outa.casl:29: CALL STSTR ; ↓
366 ../../../../as/FUNC/outa.casl:30:PRT LD GR2,LEN ; GR2にLENの値を格納
369 ../../../../as/FUNC/outa.casl:31: LAD GR1,STR ; GR1に文字列のアドレスを格納
372 ../../../../as/FUNC/outa.casl:32: CALL REV ; 文字列を逆順に並べ替え
375 ../../../../as/FUNC/outa.casl:33: OUT STR,LEN ; 文字列を出力
395 ../../../../as/FUNC/outa.casl:34: RPOP
403 ../../../../as/FUNC/outa.casl:35: RET
405 ../../../../as/FUNC/outa.casl:36:STR DS 17
423 ../../../../as/FUNC/outa.casl:37:LEN DS 1
425 ../../../../as/FUNC/outa.casl:38:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
462 ../../../../as/FUNC/outa.casl:39: END
463 ../../../../as/FUNC/outa.casl:40:;; GR1をSTR領域に格納し、LENをインクリメント
464 ../../../../as/FUNC/outa.casl:41:STSTR START
465 ../../../../as/FUNC/outa.casl:42: PUSH 0,GR1
468 ../../../../as/FUNC/outa.casl:43: PUSH 0,GR2
471 ../../../../as/FUNC/outa.casl:44: LD GR2,LEN ; GR2にLENの値をロード
474 ../../../../as/FUNC/outa.casl:45: ST GR1,STR,GR2 ; STR+GR2 <- GR1
477 ../../../../as/FUNC/outa.casl:46: LAD GR2,1,GR2 ; GR2 <- GR2 + 1
480 ../../../../as/FUNC/outa.casl:47: ST GR2,LEN ; LENにGR2を格納
483 ../../../../as/FUNC/outa.casl:48: POP GR2
485 ../../../../as/FUNC/outa.casl:49: POP GR1
487 ../../../../as/FUNC/outa.casl:50: RET
489 ../../../../as/FUNC/outa.casl:51: END
490 ../../../../as/FUNC/outa.casl:52:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
491 ../../../../as/FUNC/outa.casl:53:;;; 0〜65535の範囲の数値を扱う
492 ../../../../as/FUNC/outa.casl:54:ODIVL START
493 ../../../../as/FUNC/outa.casl:55: PUSH 0,GR1
496 ../../../../as/FUNC/outa.casl:56: PUSH 0,GR2
499 ../../../../as/FUNC/outa.casl:57: PUSH 0,GR4
502 ../../../../as/FUNC/outa.casl:58: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ
504 ../../../../as/FUNC/outa.casl:59: JZE ODFIN ; ↓
507 ../../../../as/FUNC/outa.casl:60: ST GR2,ODY ; ODYにGR2の初期値を保存
510 ../../../../as/FUNC/outa.casl:61: LAD GR0,0 ; GR0の初期化
513 ../../../../as/FUNC/outa.casl:62: LAD GR3,0 ; GR3の初期化
516 ../../../../as/FUNC/outa.casl:63: LAD GR4,1 ; GR4の初期化。対象ビットを表す
519 ../../../../as/FUNC/outa.casl:64:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
521 ../../../../as/FUNC/outa.casl:65: JPL ODLOOP ; ↓
524 ../../../../as/FUNC/outa.casl:66: SLL GR4,1 ; GR4を1回左シフト
527 ../../../../as/FUNC/outa.casl:67: SLL GR2,1 ; GR2を1回左シフト
530 ../../../../as/FUNC/outa.casl:68: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ
533 ../../../../as/FUNC/outa.casl:69: JUMP ODSL ; ループ終端
536 ../../../../as/FUNC/outa.casl:70:ODYOV SRL GR2,1
539 ../../../../as/FUNC/outa.casl:71: LAD GR2,#8000,GR2
542 ../../../../as/FUNC/outa.casl:72: SRL GR4,1
545 ../../../../as/FUNC/outa.casl:73: JUMP ODLPIN
548 ../../../../as/FUNC/outa.casl:74:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト
551 ../../../../as/FUNC/outa.casl:75: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出
554 ../../../../as/FUNC/outa.casl:76: SRL GR2,1 ; GR2を1回右シフト
557 ../../../../as/FUNC/outa.casl:77: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出
560 ../../../../as/FUNC/outa.casl:78: JMI ODFIN ; ↓
563 ../../../../as/FUNC/outa.casl:79: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ
565 ../../../../as/FUNC/outa.casl:80: JMI ODLOOP ; ↓
568 ../../../../as/FUNC/outa.casl:81:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2
570 ../../../../as/FUNC/outa.casl:82: ADDL GR0,GR4 ; GR0 <- GR0 + GR4
572 ../../../../as/FUNC/outa.casl:83: JUMP ODLOOP ; ループ終端
575 ../../../../as/FUNC/outa.casl:84:ODFIN LD GR3,GR1
577 ../../../../as/FUNC/outa.casl:85: POP GR4
579 ../../../../as/FUNC/outa.casl:86: POP GR2
581 ../../../../as/FUNC/outa.casl:87: POP GR1
583 ../../../../as/FUNC/outa.casl:88: RET
585 ../../../../as/FUNC/outa.casl:89:ODY DS 1
587 ../../../../as/FUNC/outa.casl:90: END
588 ../../../../as/FUNC/outa.casl:91:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
589 ../../../../as/FUNC/outa.casl:92:;; 例: 12345 -> 54321、54321- -> -12345
590 ../../../../as/FUNC/outa.casl:93:REV START
591 ../../../../as/FUNC/outa.casl:94: RPUSH
606 ../../../../as/FUNC/outa.casl:95: LAD GR3,0 ; GR3の初期化
609 ../../../../as/FUNC/outa.casl:96:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
611 ../../../../as/FUNC/outa.casl:97: JZE RNEXT ; ↓
614 ../../../../as/FUNC/outa.casl:98: LD GR4,GR1 ; GR4にGR1の値をコピー
616 ../../../../as/FUNC/outa.casl:99: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
618 ../../../../as/FUNC/outa.casl:100: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
621 ../../../../as/FUNC/outa.casl:101: PUSH 0,GR5 ; GR5をプッシュ
624 ../../../../as/FUNC/outa.casl:102: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
627 ../../../../as/FUNC/outa.casl:103: JUMP RPU ; ループ終端
630 ../../../../as/FUNC/outa.casl:104:RNEXT LAD GR3,0 ; GR3の初期化
633 ../../../../as/FUNC/outa.casl:105:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
635 ../../../../as/FUNC/outa.casl:106: JZE RFIN ; ↓
638 ../../../../as/FUNC/outa.casl:107: POP GR5 ; GR5にポップ
640 ../../../../as/FUNC/outa.casl:108: LD GR4,GR1 ; GR4にGR1の値をコピー
642 ../../../../as/FUNC/outa.casl:109: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
644 ../../../../as/FUNC/outa.casl:110: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
647 ../../../../as/FUNC/outa.casl:111: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
650 ../../../../as/FUNC/outa.casl:112: JUMP RPO ; ループ終端
653 ../../../../as/FUNC/outa.casl:113:RFIN RPOP
661 ../../../../as/FUNC/outa.casl:114: RET
663 ../../../../as/FUNC/outa.casl:115: END
664 ../../../../as/FUNC/outa.casl:116:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
665 ../../../../as/FUNC/outa.casl:117:;; 例: -10 -> 10, -20 -> 20
666 ../../../../as/FUNC/outa.casl:118:OABS START
667 ../../../../as/FUNC/outa.casl:119: XOR GR1,=#FFFF ; GR1の値を反転
671 ../../../../as/FUNC/outa.casl:120: LAD GR1,1,GR1 ; GR1 <- GR1 + 1
674 ../../../../as/FUNC/outa.casl:121: RET
676 ../../../../as/FUNC/outa.casl:122: END