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: LAD GR5,0 ; 整数値の長さ
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: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
56 ../../../../as/FUNC/outa.casl: 19: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
57 ../../../../as/FUNC/outa.casl: 20: LD GR1,GR0 ; GR0をGR1にコピー
58 ../../../../as/FUNC/outa.casl: 21: JUMP STI ; ループ終端
59 ../../../../as/FUNC/outa.casl: 22:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
60 ../../../../as/FUNC/outa.casl: 23: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
61 ../../../../as/FUNC/outa.casl: 24: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
62 ../../../../as/FUNC/outa.casl: 25: AND GR4,GR4 ; 正数の場合
63 ../../../../as/FUNC/outa.casl: 26: JZE PRT ; ↓
64 ../../../../as/FUNC/outa.casl: 27: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
65 ../../../../as/FUNC/outa.casl: 28: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
66 ../../../../as/FUNC/outa.casl: 29: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
67 ../../../../as/FUNC/outa.casl: 30: JUMP PRT ; PRTにジャンプ
68 ../../../../as/FUNC/outa.casl: 31:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
69 ../../../../as/FUNC/outa.casl: 32: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
70 ../../../../as/FUNC/outa.casl: 33: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
71 ../../../../as/FUNC/outa.casl: 34:PRT ST GR5,LEN ; LEN <- GR5
72 ../../../../as/FUNC/outa.casl: 35: LD GR2,LEN ; GR2にLENの値を格納
73 ../../../../as/FUNC/outa.casl: 36: LAD GR1,STR ; GR1に文字列のアドレスを格納
74 ../../../../as/FUNC/outa.casl: 37: CALL REV ; 文字列を逆順に並べ替え
75 ../../../../as/FUNC/outa.casl: 38: OUT STR,LEN ; 文字列を出力
76 ../../../../as/FUNC/outa.casl: 39: RPOP
77 ../../../../as/FUNC/outa.casl: 40: RET
78 ../../../../as/FUNC/outa.casl: 41:STR DS 17
79 ../../../../as/FUNC/outa.casl: 42:LEN DS 1
80 ../../../../as/FUNC/outa.casl: 43:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
81 ../../../../as/FUNC/outa.casl: 44: END
82 ../../../../as/FUNC/outa.casl: 45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
83 ../../../../as/FUNC/outa.casl: 46:;;; 0〜65535の範囲の数値を扱う
84 ../../../../as/FUNC/outa.casl: 47:ODIVL START
85 ../../../../as/FUNC/outa.casl: 48: PUSH 0,GR1
86 ../../../../as/FUNC/outa.casl: 49: PUSH 0,GR2
87 ../../../../as/FUNC/outa.casl: 50: PUSH 0,GR4
88 ../../../../as/FUNC/outa.casl: 51: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ
89 ../../../../as/FUNC/outa.casl: 52: JZE ODFIN ; ↓
90 ../../../../as/FUNC/outa.casl: 53: ST GR2,ODY ; ODYにGR2の初期値を保存
91 ../../../../as/FUNC/outa.casl: 54: LAD GR0,0 ; GR0の初期化
92 ../../../../as/FUNC/outa.casl: 55: LAD GR3,0 ; GR3の初期化
93 ../../../../as/FUNC/outa.casl: 56: LAD GR4,1 ; GR4の初期化。対象ビットを表す
94 ../../../../as/FUNC/outa.casl: 57:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
95 ../../../../as/FUNC/outa.casl: 58: JPL ODLOOP ; ↓
96 ../../../../as/FUNC/outa.casl: 59: SLL GR4,1 ; GR4を1回左シフト
97 ../../../../as/FUNC/outa.casl: 60: SLL GR2,1 ; GR2を1回左シフト
98 ../../../../as/FUNC/outa.casl: 61: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ
99 ../../../../as/FUNC/outa.casl: 62: JUMP ODSL ; ループ終端
100 ../../../../as/FUNC/outa.casl: 63:ODYOV SRL GR2,1
101 ../../../../as/FUNC/outa.casl: 64: LAD GR2,#8000,GR2
102 ../../../../as/FUNC/outa.casl: 65: SRL GR4,1
103 ../../../../as/FUNC/outa.casl: 66: JUMP ODLPIN
104 ../../../../as/FUNC/outa.casl: 67:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト
105 ../../../../as/FUNC/outa.casl: 68: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出
106 ../../../../as/FUNC/outa.casl: 69: SRL GR2,1 ; GR2を1回右シフト
107 ../../../../as/FUNC/outa.casl: 70: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出
108 ../../../../as/FUNC/outa.casl: 71: JMI ODFIN ; ↓
109 ../../../../as/FUNC/outa.casl: 72: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ
110 ../../../../as/FUNC/outa.casl: 73: JMI ODLOOP ; ↓
111 ../../../../as/FUNC/outa.casl: 74:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2
112 ../../../../as/FUNC/outa.casl: 75: ADDL GR0,GR4 ; GR0 <- GR0 + GR4
113 ../../../../as/FUNC/outa.casl: 76: JUMP ODLOOP ; ループ終端
114 ../../../../as/FUNC/outa.casl: 77:ODFIN LD GR3,GR1
115 ../../../../as/FUNC/outa.casl: 78: POP GR4
116 ../../../../as/FUNC/outa.casl: 79: POP GR2
117 ../../../../as/FUNC/outa.casl: 80: POP GR1
118 ../../../../as/FUNC/outa.casl: 81: RET
119 ../../../../as/FUNC/outa.casl: 82:ODY DS 1
120 ../../../../as/FUNC/outa.casl: 83: END
121 ../../../../as/FUNC/outa.casl: 84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
122 ../../../../as/FUNC/outa.casl: 85:;; 例: 12345 -> 54321、54321- -> -12345
123 ../../../../as/FUNC/outa.casl: 86:REV START
124 ../../../../as/FUNC/outa.casl: 87: RPUSH
125 ../../../../as/FUNC/outa.casl: 88: LAD GR3,0 ; GR3の初期化
126 ../../../../as/FUNC/outa.casl: 89:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
127 ../../../../as/FUNC/outa.casl: 90: JZE RNEXT ; ↓
128 ../../../../as/FUNC/outa.casl: 91: LD GR4,GR1 ; GR4にGR1の値をコピー
129 ../../../../as/FUNC/outa.casl: 92: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
130 ../../../../as/FUNC/outa.casl: 93: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
131 ../../../../as/FUNC/outa.casl: 94: PUSH 0,GR5 ; GR5をプッシュ
132 ../../../../as/FUNC/outa.casl: 95: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
133 ../../../../as/FUNC/outa.casl: 96: JUMP RPU ; ループ終端
134 ../../../../as/FUNC/outa.casl: 97:RNEXT LAD GR3,0 ; GR3の初期化
135 ../../../../as/FUNC/outa.casl: 98:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
136 ../../../../as/FUNC/outa.casl: 99: JZE RFIN ; ↓
137 ../../../../as/FUNC/outa.casl: 100: POP GR5 ; GR5にポップ
138 ../../../../as/FUNC/outa.casl: 101: LD GR4,GR1 ; GR4にGR1の値をコピー
139 ../../../../as/FUNC/outa.casl: 102: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
140 ../../../../as/FUNC/outa.casl: 103: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
141 ../../../../as/FUNC/outa.casl: 104: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
142 ../../../../as/FUNC/outa.casl: 105: JUMP RPO ; ループ終端
143 ../../../../as/FUNC/outa.casl: 106:RFIN RPOP
144 ../../../../as/FUNC/outa.casl: 107: RET
145 ../../../../as/FUNC/outa.casl: 108: END
146 ../../../../as/FUNC/outa.casl: 109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
147 ../../../../as/FUNC/outa.casl: 110:;; 例: -10 -> 10, -20 -> 20
148 ../../../../as/FUNC/outa.casl: 111:OABS START
149 ../../../../as/FUNC/outa.casl: 112: XOR GR1,=#FFFF ; GR1の値を反転
150 ../../../../as/FUNC/outa.casl: 113: LAD GR1,1,GR1 ; GR1 <- GR1 + 1
151 ../../../../as/FUNC/outa.casl: 114: RET
152 ../../../../as/FUNC/outa.casl: 115: END
157 ODIVL.ODLOOP ---> #00F0
158 ODIVL.ODLPIN ---> #00FD
163 ODIVL.ODFIN ---> #0101
166 ODIVL.ODYOV ---> #00E8
168 MINIM.LRET ---> #002B
174 OUTA.NCHAR ---> #00A8
175 ODIVL.ODSL ---> #00DD
176 OUTA.STLST ---> #005D
185 Assemble ../../../../as/FUNC/minim_call.casl (1)
186 ../../../../as/FUNC/minim_call.casl: 1:;;; casl2 minim_call.casl minim.casl outa.casl
187 ../../../../as/FUNC/minim_call.casl: 2:MAIN START
188 ../../../../as/FUNC/minim_call.casl: 3: LAD GR1,DATA
191 ../../../../as/FUNC/minim_call.casl: 4: LD GR2,CNT
194 ../../../../as/FUNC/minim_call.casl: 5: CALL MINIM
197 ../../../../as/FUNC/minim_call.casl: 6: LD GR1,GR0
199 ../../../../as/FUNC/minim_call.casl: 7: CALL OUTA
202 ../../../../as/FUNC/minim_call.casl: 8: RET
204 ../../../../as/FUNC/minim_call.casl: 9:DATA DC 23,78,2,45,67,-39,86
212 ../../../../as/FUNC/minim_call.casl: 10:CNT DC 7
214 ../../../../as/FUNC/minim_call.casl: 11: END
216 Assemble ../../../../as/FUNC/minim.casl (1)
217 ../../../../as/FUNC/minim.casl: 1:;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
218 ../../../../as/FUNC/minim.casl: 2:MINIM START
219 ../../../../as/FUNC/minim.casl: 3: LD GR0,0,GR1
222 ../../../../as/FUNC/minim.casl: 4: ST GR0,MIN
225 ../../../../as/FUNC/minim.casl: 5: LAD GR3,0
228 ../../../../as/FUNC/minim.casl: 6:S1 CPA GR3,GR2
230 ../../../../as/FUNC/minim.casl: 7: JZE LRET
233 ../../../../as/FUNC/minim.casl: 8: LAD GR1,1,GR1
236 ../../../../as/FUNC/minim.casl: 9: LD GR0,0,GR1
239 ../../../../as/FUNC/minim.casl: 10: CPA GR0,MIN
242 ../../../../as/FUNC/minim.casl: 11: JPL S2
245 ../../../../as/FUNC/minim.casl: 12: JZE S2
248 ../../../../as/FUNC/minim.casl: 13: ST GR0,MIN
251 ../../../../as/FUNC/minim.casl: 14:S2 LAD GR3,1,GR3
254 ../../../../as/FUNC/minim.casl: 15: JUMP S1
257 ../../../../as/FUNC/minim.casl: 16:LRET LD GR0,MIN
260 ../../../../as/FUNC/minim.casl: 17: RET
262 ../../../../as/FUNC/minim.casl: 18:MIN DS 1
264 ../../../../as/FUNC/minim.casl: 19: END
266 Assemble ../../../../as/FUNC/outa.casl (1)
267 ../../../../as/FUNC/outa.casl: 1:;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
268 ../../../../as/FUNC/outa.casl: 2:OUTA START
269 ../../../../as/FUNC/outa.casl: 3: RPUSH
284 ../../../../as/FUNC/outa.casl: 4: LAD GR2,10 ; GR2に10進数の「10」を格納。
287 ../../../../as/FUNC/outa.casl: 5: LAD GR0,0 ; GR0 <- 0
290 ../../../../as/FUNC/outa.casl: 6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1
293 ../../../../as/FUNC/outa.casl: 7: LAD GR5,0 ; 整数値の長さ
296 ../../../../as/FUNC/outa.casl: 8: AND GR1,GR1 ; GR1をテスト
298 ../../../../as/FUNC/outa.casl: 9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ
301 ../../../../as/FUNC/outa.casl: 10: JPL STI ; GR1が正数の場合、STIにジャンプ
304 ../../../../as/FUNC/outa.casl: 11: LAD GR4,1 ; GR1が負数の場合、GR4をオン
307 ../../../../as/FUNC/outa.casl: 12: CALL OABS ; GR1を正数に変換
310 ../../../../as/FUNC/outa.casl: 13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
312 ../../../../as/FUNC/outa.casl: 14: JMI STLST ; ↓
315 ../../../../as/FUNC/outa.casl: 15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納
318 ../../../../as/FUNC/outa.casl: 16: LD GR1,GR3 ; GR1にGR3をコピー
320 ../../../../as/FUNC/outa.casl: 17: LD GR1,NCHAR,GR1 ; GR1を文字に変換
323 ../../../../as/FUNC/outa.casl: 18: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
326 ../../../../as/FUNC/outa.casl: 19: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
329 ../../../../as/FUNC/outa.casl: 20: LD GR1,GR0 ; GR0をGR1にコピー
331 ../../../../as/FUNC/outa.casl: 21: JUMP STI ; ループ終端
334 ../../../../as/FUNC/outa.casl: 22:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
337 ../../../../as/FUNC/outa.casl: 23: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
340 ../../../../as/FUNC/outa.casl: 24: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
343 ../../../../as/FUNC/outa.casl: 25: AND GR4,GR4 ; 正数の場合
345 ../../../../as/FUNC/outa.casl: 26: JZE PRT ; ↓
348 ../../../../as/FUNC/outa.casl: 27: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
352 ../../../../as/FUNC/outa.casl: 28: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
355 ../../../../as/FUNC/outa.casl: 29: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
358 ../../../../as/FUNC/outa.casl: 30: JUMP PRT ; PRTにジャンプ
361 ../../../../as/FUNC/outa.casl: 31:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
364 ../../../../as/FUNC/outa.casl: 32: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
367 ../../../../as/FUNC/outa.casl: 33: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
370 ../../../../as/FUNC/outa.casl: 34:PRT ST GR5,LEN ; LEN <- GR5
373 ../../../../as/FUNC/outa.casl: 35: LD GR2,LEN ; GR2にLENの値を格納
376 ../../../../as/FUNC/outa.casl: 36: LAD GR1,STR ; GR1に文字列のアドレスを格納
379 ../../../../as/FUNC/outa.casl: 37: CALL REV ; 文字列を逆順に並べ替え
382 ../../../../as/FUNC/outa.casl: 38: OUT STR,LEN ; 文字列を出力
402 ../../../../as/FUNC/outa.casl: 39: RPOP
410 ../../../../as/FUNC/outa.casl: 40: RET
412 ../../../../as/FUNC/outa.casl: 41:STR DS 17
430 ../../../../as/FUNC/outa.casl: 42:LEN DS 1
432 ../../../../as/FUNC/outa.casl: 43:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
469 ../../../../as/FUNC/outa.casl: 44: END
470 ../../../../as/FUNC/outa.casl: 45:;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
471 ../../../../as/FUNC/outa.casl: 46:;;; 0〜65535の範囲の数値を扱う
472 ../../../../as/FUNC/outa.casl: 47:ODIVL START
473 ../../../../as/FUNC/outa.casl: 48: PUSH 0,GR1
476 ../../../../as/FUNC/outa.casl: 49: PUSH 0,GR2
479 ../../../../as/FUNC/outa.casl: 50: PUSH 0,GR4
482 ../../../../as/FUNC/outa.casl: 51: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ
484 ../../../../as/FUNC/outa.casl: 52: JZE ODFIN ; ↓
487 ../../../../as/FUNC/outa.casl: 53: ST GR2,ODY ; ODYにGR2の初期値を保存
490 ../../../../as/FUNC/outa.casl: 54: LAD GR0,0 ; GR0の初期化
493 ../../../../as/FUNC/outa.casl: 55: LAD GR3,0 ; GR3の初期化
496 ../../../../as/FUNC/outa.casl: 56: LAD GR4,1 ; GR4の初期化。対象ビットを表す
499 ../../../../as/FUNC/outa.casl: 57:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
501 ../../../../as/FUNC/outa.casl: 58: JPL ODLOOP ; ↓
504 ../../../../as/FUNC/outa.casl: 59: SLL GR4,1 ; GR4を1回左シフト
507 ../../../../as/FUNC/outa.casl: 60: SLL GR2,1 ; GR2を1回左シフト
510 ../../../../as/FUNC/outa.casl: 61: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ
513 ../../../../as/FUNC/outa.casl: 62: JUMP ODSL ; ループ終端
516 ../../../../as/FUNC/outa.casl: 63:ODYOV SRL GR2,1
519 ../../../../as/FUNC/outa.casl: 64: LAD GR2,#8000,GR2
522 ../../../../as/FUNC/outa.casl: 65: SRL GR4,1
525 ../../../../as/FUNC/outa.casl: 66: JUMP ODLPIN
528 ../../../../as/FUNC/outa.casl: 67:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト
531 ../../../../as/FUNC/outa.casl: 68: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出
534 ../../../../as/FUNC/outa.casl: 69: SRL GR2,1 ; GR2を1回右シフト
537 ../../../../as/FUNC/outa.casl: 70: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出
540 ../../../../as/FUNC/outa.casl: 71: JMI ODFIN ; ↓
543 ../../../../as/FUNC/outa.casl: 72: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ
545 ../../../../as/FUNC/outa.casl: 73: JMI ODLOOP ; ↓
548 ../../../../as/FUNC/outa.casl: 74:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2
550 ../../../../as/FUNC/outa.casl: 75: ADDL GR0,GR4 ; GR0 <- GR0 + GR4
552 ../../../../as/FUNC/outa.casl: 76: JUMP ODLOOP ; ループ終端
555 ../../../../as/FUNC/outa.casl: 77:ODFIN LD GR3,GR1
557 ../../../../as/FUNC/outa.casl: 78: POP GR4
559 ../../../../as/FUNC/outa.casl: 79: POP GR2
561 ../../../../as/FUNC/outa.casl: 80: POP GR1
563 ../../../../as/FUNC/outa.casl: 81: RET
565 ../../../../as/FUNC/outa.casl: 82:ODY DS 1
567 ../../../../as/FUNC/outa.casl: 83: END
568 ../../../../as/FUNC/outa.casl: 84:;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
569 ../../../../as/FUNC/outa.casl: 85:;; 例: 12345 -> 54321、54321- -> -12345
570 ../../../../as/FUNC/outa.casl: 86:REV START
571 ../../../../as/FUNC/outa.casl: 87: RPUSH
586 ../../../../as/FUNC/outa.casl: 88: LAD GR3,0 ; GR3の初期化
589 ../../../../as/FUNC/outa.casl: 89:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
591 ../../../../as/FUNC/outa.casl: 90: JZE RNEXT ; ↓
594 ../../../../as/FUNC/outa.casl: 91: LD GR4,GR1 ; GR4にGR1の値をコピー
596 ../../../../as/FUNC/outa.casl: 92: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
598 ../../../../as/FUNC/outa.casl: 93: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
601 ../../../../as/FUNC/outa.casl: 94: PUSH 0,GR5 ; GR5をプッシュ
604 ../../../../as/FUNC/outa.casl: 95: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
607 ../../../../as/FUNC/outa.casl: 96: JUMP RPU ; ループ終端
610 ../../../../as/FUNC/outa.casl: 97:RNEXT LAD GR3,0 ; GR3の初期化
613 ../../../../as/FUNC/outa.casl: 98:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
615 ../../../../as/FUNC/outa.casl: 99: JZE RFIN ; ↓
618 ../../../../as/FUNC/outa.casl: 100: POP GR5 ; GR5にポップ
620 ../../../../as/FUNC/outa.casl: 101: LD GR4,GR1 ; GR4にGR1の値をコピー
622 ../../../../as/FUNC/outa.casl: 102: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
624 ../../../../as/FUNC/outa.casl: 103: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
627 ../../../../as/FUNC/outa.casl: 104: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
630 ../../../../as/FUNC/outa.casl: 105: JUMP RPO ; ループ終端
633 ../../../../as/FUNC/outa.casl: 106:RFIN RPOP
641 ../../../../as/FUNC/outa.casl: 107: RET
643 ../../../../as/FUNC/outa.casl: 108: END
644 ../../../../as/FUNC/outa.casl: 109:;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
645 ../../../../as/FUNC/outa.casl: 110:;; 例: -10 -> 10, -20 -> 20
646 ../../../../as/FUNC/outa.casl: 111:OABS START
647 ../../../../as/FUNC/outa.casl: 112: XOR GR1,=#FFFF ; GR1の値を反転
651 ../../../../as/FUNC/outa.casl: 113: LAD GR1,1,GR1 ; GR1 <- GR1 + 1
654 ../../../../as/FUNC/outa.casl: 114: RET
656 ../../../../as/FUNC/outa.casl: 115: END