1 ../../../../casl2 -sla ../../../../as/FUNC/count1_call.casl ../../../../as/FUNC/count1.casl ../../../../as/FUNC/outa.casl
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
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
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
161 ODIVL.ODLOOP ---> #00E6
162 ODIVL.ODLPIN ---> #00F3
167 ODIVL.ODFIN ---> #00F7
170 COUNT1.MORE ---> #001A
171 ODIVL.ODYOV ---> #00DE
176 OUTA.NCHAR ---> #009E
177 ODIVL.ODSL ---> #00D3
178 OUTA.STLST ---> #0053
181 COUNT1.RETURN ---> #0021
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
194 ../../../../as/FUNC/count1_call.casl: 5:LOOP CPA GR2,MAX ; ループ開始。GR2がMAXの値になったらループ脱出
197 ../../../../as/FUNC/count1_call.casl: 6: JZE FIN ; ↓
200 ../../../../as/FUNC/count1_call.casl: 7: LD GR1,GR2 ; GR1にVALの値をロード
202 ../../../../as/FUNC/count1_call.casl: 8: CALL COUNT1 ; COUNT1を呼び出す。出力はGR0に格納
205 ../../../../as/FUNC/count1_call.casl: 9: LD GR1,GR0 ; GR1にGR0の値をコピー
207 ../../../../as/FUNC/count1_call.casl: 10: CALL OUTA ; OUTAを呼び出す
210 ../../../../as/FUNC/count1_call.casl: 11: LAD GR2,1,GR2 ; GR2 <= GR2 + 1
213 ../../../../as/FUNC/count1_call.casl: 12: JUMP LOOP ; ループ終端
216 ../../../../as/FUNC/count1_call.casl: 13:FIN RET
218 ../../../../as/FUNC/count1_call.casl: 14:MAX DC 256
220 ../../../../as/FUNC/count1_call.casl: 15: END
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
230 ../../../../as/FUNC/count1.casl: 6: PUSH 0,GR2
233 ../../../../as/FUNC/count1.casl: 7: SUBA GR2,GR2
235 ../../../../as/FUNC/count1.casl: 8: AND GR1,GR1
237 ../../../../as/FUNC/count1.casl: 9: JZE RETURN
240 ../../../../as/FUNC/count1.casl: 10:MORE LAD GR2,1,GR2
243 ../../../../as/FUNC/count1.casl: 11: LAD GR0,-1,GR1
246 ../../../../as/FUNC/count1.casl: 12: AND GR1,GR0
248 ../../../../as/FUNC/count1.casl: 13: JNZ MORE
251 ../../../../as/FUNC/count1.casl: 14:RETURN LD GR0,GR2
253 ../../../../as/FUNC/count1.casl: 15: POP GR2
255 ../../../../as/FUNC/count1.casl: 16: POP GR1
257 ../../../../as/FUNC/count1.casl: 17: RET
259 ../../../../as/FUNC/count1.casl: 18: END
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
279 ../../../../as/FUNC/outa.casl: 4: LAD GR2,10 ; GR2に10進数の「10」を格納。
282 ../../../../as/FUNC/outa.casl: 5: LAD GR0,0 ; GR0 <- 0
285 ../../../../as/FUNC/outa.casl: 6: LAD GR4,0 ; 負数フラグ。GR1が負数の場合、GR4は1
288 ../../../../as/FUNC/outa.casl: 7: LAD GR5,0 ; 整数値の長さ
291 ../../../../as/FUNC/outa.casl: 8: AND GR1,GR1 ; GR1をテスト
293 ../../../../as/FUNC/outa.casl: 9: JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ
296 ../../../../as/FUNC/outa.casl: 10: JPL STI ; GR1が正数の場合、STIにジャンプ
299 ../../../../as/FUNC/outa.casl: 11: LAD GR4,1 ; GR1が負数の場合、GR4をオン
302 ../../../../as/FUNC/outa.casl: 12: CALL OABS ; GR1を正数に変換
305 ../../../../as/FUNC/outa.casl: 13:STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
307 ../../../../as/FUNC/outa.casl: 14: JMI STLST ; ↓
310 ../../../../as/FUNC/outa.casl: 15: CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納
313 ../../../../as/FUNC/outa.casl: 16: LD GR1,GR3 ; GR1にGR3をコピー
315 ../../../../as/FUNC/outa.casl: 17: LD GR1,NCHAR,GR1 ; GR1を文字に変換
318 ../../../../as/FUNC/outa.casl: 18: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
321 ../../../../as/FUNC/outa.casl: 19: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
324 ../../../../as/FUNC/outa.casl: 20: LD GR1,GR0 ; GR0をGR1にコピー
326 ../../../../as/FUNC/outa.casl: 21: JUMP STI ; ループ終端
329 ../../../../as/FUNC/outa.casl: 22:STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
332 ../../../../as/FUNC/outa.casl: 23: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
335 ../../../../as/FUNC/outa.casl: 24: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
338 ../../../../as/FUNC/outa.casl: 25: AND GR4,GR4 ; 正数の場合
340 ../../../../as/FUNC/outa.casl: 26: JZE PRT ; ↓
343 ../../../../as/FUNC/outa.casl: 27: LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
347 ../../../../as/FUNC/outa.casl: 28: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
350 ../../../../as/FUNC/outa.casl: 29: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
353 ../../../../as/FUNC/outa.casl: 30: JUMP PRT ; PRTにジャンプ
356 ../../../../as/FUNC/outa.casl: 31:ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
359 ../../../../as/FUNC/outa.casl: 32: ST GR1,STR,GR5 ; (STR + GR5) <- GR1
362 ../../../../as/FUNC/outa.casl: 33: LAD GR5,1,GR5 ; GR5 <- GR5 + 1
365 ../../../../as/FUNC/outa.casl: 34:PRT ST GR5,LEN ; LEN <- GR5
368 ../../../../as/FUNC/outa.casl: 35: LD GR2,LEN ; GR2にLENの値を格納
371 ../../../../as/FUNC/outa.casl: 36: LAD GR1,STR ; GR1に文字列のアドレスを格納
374 ../../../../as/FUNC/outa.casl: 37: CALL REV ; 文字列を逆順に並べ替え
377 ../../../../as/FUNC/outa.casl: 38: OUT STR,LEN ; 文字列を出力
397 ../../../../as/FUNC/outa.casl: 39: RPOP
405 ../../../../as/FUNC/outa.casl: 40: RET
407 ../../../../as/FUNC/outa.casl: 41:STR DS 17
425 ../../../../as/FUNC/outa.casl: 42:LEN DS 1
427 ../../../../as/FUNC/outa.casl: 43:NCHAR DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
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
471 ../../../../as/FUNC/outa.casl: 49: PUSH 0,GR2
474 ../../../../as/FUNC/outa.casl: 50: PUSH 0,GR4
477 ../../../../as/FUNC/outa.casl: 51: AND GR2,GR2 ; GR2が0の場合、ODFINへジャンプ
479 ../../../../as/FUNC/outa.casl: 52: JZE ODFIN ; ↓
482 ../../../../as/FUNC/outa.casl: 53: ST GR2,ODY ; ODYにGR2の初期値を保存
485 ../../../../as/FUNC/outa.casl: 54: LAD GR0,0 ; GR0の初期化
488 ../../../../as/FUNC/outa.casl: 55: LAD GR3,0 ; GR3の初期化
491 ../../../../as/FUNC/outa.casl: 56: LAD GR4,1 ; GR4の初期化。対象ビットを表す
494 ../../../../as/FUNC/outa.casl: 57:ODSL CPL GR2,GR1 ; ループ先頭。(GR2 > GR1)の場合、ODLOOPへループ脱出
496 ../../../../as/FUNC/outa.casl: 58: JPL ODLOOP ; ↓
499 ../../../../as/FUNC/outa.casl: 59: SLL GR4,1 ; GR4を1回左シフト
502 ../../../../as/FUNC/outa.casl: 60: SLL GR2,1 ; GR2を1回左シフト
505 ../../../../as/FUNC/outa.casl: 61: JOV ODYOV ; オーバーフローの場合は、ODYOVにジャンプ
508 ../../../../as/FUNC/outa.casl: 62: JUMP ODSL ; ループ終端
511 ../../../../as/FUNC/outa.casl: 63:ODYOV SRL GR2,1
514 ../../../../as/FUNC/outa.casl: 64: LAD GR2,#8000,GR2
517 ../../../../as/FUNC/outa.casl: 65: SRL GR4,1
520 ../../../../as/FUNC/outa.casl: 66: JUMP ODLPIN
523 ../../../../as/FUNC/outa.casl: 67:ODLOOP SRL GR4,1 ; ループ先頭。GR4を1回右シフト
526 ../../../../as/FUNC/outa.casl: 68: JZE ODFIN ; (GR4 = 0)の場合、ループ脱出
529 ../../../../as/FUNC/outa.casl: 69: SRL GR2,1 ; GR2を1回右シフト
532 ../../../../as/FUNC/outa.casl: 70: CPL GR1,ODY ; (GR1 < ODY)の場合、ループ脱出
535 ../../../../as/FUNC/outa.casl: 71: JMI ODFIN ; ↓
538 ../../../../as/FUNC/outa.casl: 72: CPL GR1,GR2 ; (GR1 < GR2)の場合、ループ先頭へジャンプ
540 ../../../../as/FUNC/outa.casl: 73: JMI ODLOOP ; ↓
543 ../../../../as/FUNC/outa.casl: 74:ODLPIN SUBL GR1,GR2 ; GR1 <- GR1 - GR2
545 ../../../../as/FUNC/outa.casl: 75: ADDL GR0,GR4 ; GR0 <- GR0 + GR4
547 ../../../../as/FUNC/outa.casl: 76: JUMP ODLOOP ; ループ終端
550 ../../../../as/FUNC/outa.casl: 77:ODFIN LD GR3,GR1
552 ../../../../as/FUNC/outa.casl: 78: POP GR4
554 ../../../../as/FUNC/outa.casl: 79: POP GR2
556 ../../../../as/FUNC/outa.casl: 80: POP GR1
558 ../../../../as/FUNC/outa.casl: 81: RET
560 ../../../../as/FUNC/outa.casl: 82:ODY DS 1
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
581 ../../../../as/FUNC/outa.casl: 88: LAD GR3,0 ; GR3の初期化
584 ../../../../as/FUNC/outa.casl: 89:RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
586 ../../../../as/FUNC/outa.casl: 90: JZE RNEXT ; ↓
589 ../../../../as/FUNC/outa.casl: 91: LD GR4,GR1 ; GR4にGR1の値をコピー
591 ../../../../as/FUNC/outa.casl: 92: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
593 ../../../../as/FUNC/outa.casl: 93: LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
596 ../../../../as/FUNC/outa.casl: 94: PUSH 0,GR5 ; GR5をプッシュ
599 ../../../../as/FUNC/outa.casl: 95: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
602 ../../../../as/FUNC/outa.casl: 96: JUMP RPU ; ループ終端
605 ../../../../as/FUNC/outa.casl: 97:RNEXT LAD GR3,0 ; GR3の初期化
608 ../../../../as/FUNC/outa.casl: 98:RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
610 ../../../../as/FUNC/outa.casl: 99: JZE RFIN ; ↓
613 ../../../../as/FUNC/outa.casl: 100: POP GR5 ; GR5にポップ
615 ../../../../as/FUNC/outa.casl: 101: LD GR4,GR1 ; GR4にGR1の値をコピー
617 ../../../../as/FUNC/outa.casl: 102: ADDL GR4,GR3 ; GR4 <- GR4 + GR3
619 ../../../../as/FUNC/outa.casl: 103: ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
622 ../../../../as/FUNC/outa.casl: 104: LAD GR3,1,GR3 ; GR3 <- GR3 + 1
625 ../../../../as/FUNC/outa.casl: 105: JUMP RPO ; ループ終端
628 ../../../../as/FUNC/outa.casl: 106:RFIN RPOP
636 ../../../../as/FUNC/outa.casl: 107: RET
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の値を反転
646 ../../../../as/FUNC/outa.casl: 113: LAD GR1,1,GR1 ; GR1 <- GR1 + 1
649 ../../../../as/FUNC/outa.casl: 114: RET
651 ../../../../as/FUNC/outa.casl: 115: END