264952ba89f0cca97b6240a1a38a57c8fe6a95f5
[YACASL2.git] / doc / yacasl2.info
1 This is yacasl2.info, produced by makeinfo version 4.13 from
2 manual.texi.
3
4 Copyright (C) 2010-2012 j8takagi
5
6 INFO-DIR-SECTION Programming
7 START-INFO-DIR-ENTRY
8 * YACASL2: (yacasl2).                     CASL II 処理システム
9 * casl2: (yacasl2)casl2 invocation.       casl2の呼び出し
10 * comet2: (yacasl2)comet2 invocation.     comet2の呼び出し
11 * dumpword: (yacasl2)dumpword invocation. dumpwordの呼び出し
12 END-INFO-DIR-ENTRY
13
14 \1f
15 File: yacasl2.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
16
17 * Menu:
18
19 * Overview::                    YACASL2の概要
20 * Sample usage::               YACASL2の使用例
21 * casl2 invocation::            casl2の呼び出し
22 * comet2 invocation::           comet2の呼び出し
23 * dumpword invocation::         dumpwordの呼び出し
24 * CASL2LIB Manual::             CASL2LIBマニュアル
25
26 \1f
27 File: yacasl2.info,  Node: Overview,  Next: Sample usage,  Prev: Top,  Up: Top
28
29 1 YACASL2の概要
30 ******************
31
32  YACASL2は、UNIXやLinuxのコマンドラインインターフェイスで
33 動作するオープンソースのCASL II処理システムです。 CASL
34 IIは情報処理試験で用いられるアセンブラ言語で、
35 次の資料により仕様が公開されています。
36
37      試験で使用する情報処理用語・プログラム言語など Ver
38      2.2(平成24年5月22日)
39      (http://www.jitec.jp/1_13download/shiken_yougo_ver2_2.pdf)[PDFファイル]
40      別紙 1 アセンブラ言語の仕様
41
42  YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
43 仮想マシンCOMET II上で実行します。
44 アセンブルと実行は、連続で行うこともできますし、
45 アセンブル結果をファイルに保存してあらから実行することもできます。
46 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
47 はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
48 そのままアセンブルして実行できます。 また、本パッケージ中にCASL
49 IIのサンプルプログラムが多数収録されています。
50
51  YACASL2は、「ふつうの処理系」として動作します。 ほかの多くのCASL
52 IIエミュレータと違い、デバッガとして動作したり、
53 コンピュータ内部の模式図を表示したりすることはありません。
54 そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
55
56    * ラベルとアドレスの対応
57
58    * アセンブル結果
59
60    * 実行時のレジスタの内容
61
62    * 実行時のメモリの内容
63
64  出力された動作内容は、GNU/Linuxのさまざまなツール、 たとえば、`cat'
65 `less' `grep' `wc'などを使って解析できます。
66
67  YACASL2の操作は、端末上のコマンドラインインターフェイスで行います。
68
69 \1f
70 File: yacasl2.info,  Node: Sample usage,  Next: casl2 invocation,  Prev: Overview,  Up: Top
71
72 2 YACASL2の使用例
73 *********************
74
75  YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。
76 以下の例で用いられるCASLプログラムのファイルは、
77 テキストエディタなどで作成するか、インストールしたディレクトリの
78 中にある`as'ディレクトリからコピーしてください。
79
80 * Menu:
81
82 * Simple output::               実行結果の出力だけを表示
83 * Assemble result::             アセンブル結果の確認
84 * Register and memory::         実行時のレジスタとメモリを表示
85 * Only assemble::               アセンブルと実行を別に行う
86 * Analyze word::                1語の解析
87 * Use CASL2LIB::                CASL2ライブラリの使用
88
89 \1f
90 File: yacasl2.info,  Node: Simple output,  Next: Assemble result,  Prev: Sample usage,  Up: Sample usage
91
92 2.1 実行結果の出力だけを表示
93 ========================================
94
95  インストール時にコマンド実行の確認に使った`hello.casl'は、次のような内容です。
96 CASL IIのマクロ命令OUTは、文字列を出力します。
97
98      $ cat hello.casl
99      MAIN     START
100               OUT     OBUF,LEN
101               RET
102      OBUF     DC      'Hello, World!'
103      LEN      DC      13
104               END
105
106  次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II
107 上での実行が連続で行われ、文字列が出力されます。
108
109      $ casl2 hello.casl
110      Hello, World!
111
112  `addl.casl'は、3と1の和を求めます。
113
114      $ cat addl.casl
115      ;;; ADDL r,adr
116      MAIN     START
117               LD      GR1,A
118               ADDL    GR1,B
119               RET
120      A        DC      3
121      B        DC      1
122               END
123
124  このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
125
126      $ casl2 addl.casl
127      $
128
129  実行内容を確認するには、後述のようにCPU
130 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
131
132 \1f
133 File: yacasl2.info,  Node: Assemble result,  Next: Register and memory,  Prev: Simple output,  Up: Sample usage
134
135 2.2 アセンブル結果の確認
136 ==================================
137
138  casl2の処理途中で行われるアセンブルの結果を表示するには、オプション`-a'を指定します。
139 また、ラベルとアドレスの対応表を表示するには、オプション`-l'を指定します。
140
141  次のコマンドでは`hello.casl'の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。
142 OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
143
144      $ casl2 -a -l hello.casl
145
146      Assemble hello.casl (0)
147
148      Label::::
149      MAIN.LEN ---> #0020
150      MAIN ---> #0000
151      MAIN.OBUF ---> #0013
152
153      Assemble hello.casl (1)
154      hello.casl:    1:MAIN    START
155      hello.casl:    2:        OUT     OBUF,LEN
156          #0000   #7001
157          #0001   #0000
158          #0002   #7002
159          #0003   #0000
160          #0004   #1210
161          #0005   #0013
162          #0006   #1220
163          #0007   #0020
164          #0008   #F000
165          #0009   #0002
166          #000A   #1210
167          #000B   #0021
168          #0021   #000A
169          #000C   #1220
170          #000D   #0022
171          #0022   #0001
172          #000E   #F000
173          #000F   #0002
174          #0010   #7120
175          #0011   #7110
176      hello.casl:    3:        RET
177          #0012   #8100
178      hello.casl:    4:OBUF    DC      'Hello, World!'
179          #0013   #0048
180          #0014   #0065
181          #0015   #006C
182          #0016   #006C
183          #0017   #006F
184          #0018   #002C
185          #0019   #0020
186          #001A   #0057
187          #001B   #006F
188          #001C   #0072
189          #001D   #006C
190          #001E   #0064
191          #001F   #0021
192      hello.casl:    5:LEN     DC      13
193          #0020   #000D
194      hello.casl:    6:        END
195      Hello, World!
196
197  `addl.casl'の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
198
199      $ casl2 -a -l addl.casl
200
201      Assemble addl.casl (0)
202
203      Label::::
204      MAIN.A ---> #0005
205      MAIN.B ---> #0006
206      MAIN ---> #0000
207
208      Assemble addl.casl (1)
209      addl.casl:    1:;;; ADDL r,adr
210      addl.casl:    2:MAIN    START
211      addl.casl:    3:        LD      GR1,A
212          #0000   #1010
213          #0001   #0005
214      addl.casl:    4:        ADDL    GR1,B
215          #0002   #2210
216          #0003   #0006
217      addl.casl:    5:        RET
218          #0004   #8100
219      addl.casl:    6:A       DC      3
220          #0005   #0003
221      addl.casl:    7:B       DC      1
222          #0006   #0001
223      addl.casl:    8:        END
224
225  なお、オプション`-A'を指定すると、アセンブル結果が表示される時点で処理が終了します。
226 仮想マシンCOMET II での実行は行われません。
227
228 \1f
229 File: yacasl2.info,  Node: Register and memory,  Next: Only assemble,  Prev: Assemble result,  Up: Sample usage
230
231 2.3 実行時のレジスタとメモリを表示
232 =================================================
233
234  YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、`-t'と`-d'を指定することで表示できます。
235
236  また、`-M'で、仮想マシンCOMET II のメモリ容量を語(16
237 ビット)単位で指定できます。
238 小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
239
240 * Menu:
241
242 * Register specify::            特定のレジスタを表示
243 * End value::
244 * Step count::                  プログラムのステップ数を表示
245
246  `addl.casl'に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
247
248      $ casl2 -t -d -M8 addl.casl | less
249
250      Assemble addl.casl (0)
251
252      Assemble addl.casl (1)
253
254      Executing machine codes
255      #0000: Register::::
256      #0000: GR0:      0 = #0000 = 0000000000000000
257      #0000: GR1:      0 = #0000 = 0000000000000000
258      #0000: GR2:      0 = #0000 = 0000000000000000
259      #0000: GR3:      0 = #0000 = 0000000000000000
260      #0000: GR4:      0 = #0000 = 0000000000000000
261      #0000: GR5:      0 = #0000 = 0000000000000000
262      #0000: GR6:      0 = #0000 = 0000000000000000
263      #0000: GR7:      0 = #0000 = 0000000000000000
264      #0000: SP:       8 = #0008 = 0000000000001000
265      #0000: PR:       0 = #0000 = 0000000000000000
266      #0000: FR (OF SF ZF): 000
267      #0000: Memory::::
268      #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
269      #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
270      #0002: Register::::
271      #0002: GR0:      0 = #0000 = 0000000000000000
272      #0002: GR1:      3 = #0003 = 0000000000000011
273      #0002: GR2:      0 = #0000 = 0000000000000000
274      #0002: GR3:      0 = #0000 = 0000000000000000
275      #0002: GR4:      0 = #0000 = 0000000000000000
276      #0002: GR5:      0 = #0000 = 0000000000000000
277      #0002: GR6:      0 = #0000 = 0000000000000000
278      #0002: GR7:      0 = #0000 = 0000000000000000
279      #0002: SP:       8 = #0008 = 0000000000001000
280      #0002: PR:       2 = #0002 = 0000000000000010
281      #0002: FR (OF SF ZF): 000
282      #0002: Memory::::
283      #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
284      #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
285      #0004: Register::::
286      #0004: GR0:      0 = #0000 = 0000000000000000
287      #0004: GR1:      4 = #0004 = 0000000000000100
288      #0004: GR2:      0 = #0000 = 0000000000000000
289      #0004: GR3:      0 = #0000 = 0000000000000000
290      #0004: GR4:      0 = #0000 = 0000000000000000
291      #0004: GR5:      0 = #0000 = 0000000000000000
292      #0004: GR6:      0 = #0000 = 0000000000000000
293      #0004: GR7:      0 = #0000 = 0000000000000000
294      #0004: SP:       8 = #0008 = 0000000000001000
295      #0004: PR:       4 = #0004 = 0000000000000100
296      #0004: FR (OF SF ZF): 000
297      #0004: Memory::::
298      #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
299      #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
300
301 \1f
302 File: yacasl2.info,  Node: Register specify,  Next: End value,  Prev: Register and memory,  Up: Register and memory
303
304 2.3.1 特定のレジスタを表示
305 ------------------------------------
306
307  `addl.casl'のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。
308 こうした場合は、`grep'を使って表示される内容を絞り込むことで動作を検証しやすくなります。
309
310      $ casl2 -t addl.casl | grep 'GR1:'
311      #0000: GR1:      0 = #0000 = 0000000000000000
312      #0002: GR1:      3 = #0003 = 0000000000000011
313      #0004: GR1:      4 = #0004 = 0000000000000100
314
315  この内容を、先に出力したアセンブル結果と引き比べてください。
316 次の表のように、PRとGR1、命令行が対応していることがわかります。
317
318 PR                     GR1                    命令行
319 #0000                  #0000                  
320 #0002                  #0003                  `LD GR1,A'
321 #0004                  #0004                  `ADDL GR1,B'
322
323 \1f
324 File: yacasl2.info,  Node: End value,  Next: Step count,  Prev: Register specify,  Up: Register and memory
325
326 2.3.2 プログラム終了時の値を表示
327 ---------------------------------------------
328
329  `grep'と`tail'を組み合わせれば、プログラム終了時の値を表示できます。
330
331  `addl.casl'でプログラム終了時の値を確認するには、次のようにします。
332
333      $ casl2 -t addl.casl | grep 'GR1:' | tail -1
334      #0004: GR1:      4 = #0004 = 0000000000000100
335
336  `sum_10.casl'は、1から10までの整数の和を求めます。
337
338      $ cat sum_10.casl
339      ;;; sum_10.casl
340      ;;; 出力 GR0: 1から10までの整数をすべて加算した値
341      MAIN    START
342              PUSH    0,GR1
343              LAD     GR0,0           ; GR0を初期化
344              LD      GR1,FST         ; GR1に初項を転送
345      LOOP    ADDL    GR0,GR1         ; ループ先頭
346              ADDL    GR1,STEP        ; GR1 <- GR1 + 公差
347              CPL     GR1,LST         ; GR1が末項より大きい場合は終了
348              JPL     FIN             ; ↓
349              JUMP    LOOP            ; ループ終端
350      FIN     POP     GR1
351              RET
352      FST     DC      1               ; 初項
353      LST     DC      10              ; 末項
354      STEP    DC      1               ; 公差
355              END
356
357  `sum_10.casl'でファイル終了時の値を確認するには、次のようにします。
358
359      $ casl2 -t sum_10.casl | grep 'GR0:' | tail -1
360      #0010: GR0:     55 = #0037 = 0000000000110111 = '7'
361
362 \1f
363 File: yacasl2.info,  Node: Step count,  Prev: End value,  Up: Register and memory
364
365 2.3.3 プログラムのステップ数を表示
366 ------------------------------------------------
367
368  `grep'と`wc'を組み合わせれば、プログラムのステップ数を表示できます。
369
370      $ casl2 -t hello.casl | grep 'GR1:' | wc -l
371      11
372
373      $ casl2 -t addl.casl | grep 'GR1:' | wc -l
374      3
375
376  `sum_10.casl'はプログラム内にループがあるため、ステップ数が大きくなります。
377
378      $ casl2 -t sum_10.casl | grep 'GR0:' | wc -l
379      54
380
381 \1f
382 File: yacasl2.info,  Node: Only assemble,  Next: Analyze word,  Prev: Register and memory,  Up: Sample usage
383
384 2.4 アセンブルと実行を別に行う
385 ===========================================
386
387  `casl2'に`-O'`ファイル名'を指定すると、オブジェクトファイルを作成できます。
388
389      $ casl2 -Ohello.o hello.casl
390
391  作成されたオブジェクトファイルの内容は、`od'を使って確認できます。
392 テキストファイルではないため、`cat'などでは確認できません。
393
394      $ od -t x2 hello.o
395      0000000 7001 0000 7002 0000 1210 0013 1220 0020
396      0000020 f000 0002 1210 0021 1220 0022 f000 0002
397      0000040 7120 7110 8100 0048 0065 006c 006c 006f
398      0000060 002c 0020 0057 006f 0072 006c 0064 0021
399      0000100 000d 000a 0001
400      0000106
401
402  オブジェクトファイルの実行には、`casl2'を使います。
403
404      $ comet2 hello.o
405      Hello, World!
406
407 \1f
408 File: yacasl2.info,  Node: Analyze word,  Next: Use CASL2LIB,  Prev: Only assemble,  Up: Sample usage
409
410 2.5 1語の解析
411 =================
412
413  CASL IIでは、1語(1 word、16ビット)を単位としてデータが処理されます。
414 `dumpword'は、指定した1語を10進数、16進数、2進数で表示します。
415
416      $ dumpword 72
417          72:     72 = #0048 = 0000000001001000 = 'H'
418
419 \1f
420 File: yacasl2.info,  Node: Use CASL2LIB,  Prev: Analyze word,  Up: Sample usage
421
422 2.6 CASL2ライブラリの使用
423 =================================
424
425  YACASL2の`as/casl2lib'ディレクトリには、CASL
426 IIで記述されたライブラリファイルが格納されています。
427
428  このフォルダには、たとえば次のようなプログラムが含まれています。
429
430 `OUTL'
431      `outl.casl'。
432      GR1に格納された値を、0以上65535以下の整数として出力します。
433
434 `OUTA'
435      `outa.casl'。
436      GR1に格納された値を、-32767以上32767以下の整数として出力します。
437
438 `MULL'
439      `mull.casl'。
440      GR1とGR2に格納された値を0以上65535以下の整数と見なし、積をGR3に格納します。
441
442 `DIVL'
443      `divl.casl'。
444      GR1とGR2に格納された値を0以上65535以下の整数と見なし、商をGR3、剰余をGR0に格納します。
445
446 2.6.1 数値を出力する
447 ---------------------------
448
449  3と1の和を求める`addl.casl'で演算結果を出力するには、まず`addl.casl'を編集します。
450 CASL IIの`CALL'命令で`OUTL'を副プログラムとして呼び出します。
451
452      $ cat addl_outl.casl
453      MAIN    START
454              LD      GR1,A
455              ADDL    GR1,B
456              _CALL    OUTL_
457              RET
458      A       DC      3
459      B       DC      1
460              END
461
462  変更したら`casl2'を、複数のファイルを指定して実行します。
463
464      $ casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl
465      4
466
467 \1f
468 File: yacasl2.info,  Node: casl2 invocation,  Next: comet2 invocation,  Prev: Sample usage,  Up: Top
469
470 3 `casl2'の呼び出し
471 ************************
472
473  `casl2'は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET
474 II上で実行します。 CASLファイルは、アセンブラ言語CASL
475 IIで記述されたテキストファイルです。
476 引数が指定されない場合は、エラーメッセージを表示して終了します。
477
478      $ casl2 hello.casl
479
480  複数のCASLファイルを指定することで、副プログラムを呼び出すこともできます。
481
482      $ casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl
483
484 オプション
485 ---------------
486
487  `casl2'は、次のオプションを指定できます。
488
489 `-s'
490 `--source'
491      CASLファイルの内容を表示します。
492
493 `-l'
494 `--label'
495      ラベルの一覧を次の形式で表示します。
496      表示後、ほかの作業を続行します。
497
498           <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
499
500 `-L'
501 `--labelonly'
502      `-l'と同じ形式でラベルの一覧を表示します。
503      表示後、ほかの作業は続行せず、終了します。
504
505 `-a'
506 `--assembledetail'
507      アセンブル詳細結果を表示し、ほかの作業を続行します。
508
509 `-A'
510 `--assembledetailonly'
511      アセンブル詳細結果を表示して終了します。
512
513 `-o<OBJECTFILE>'
514 `--assembleout<OBJECTFILE>'
515      アセンブル結果をオブジェクトファイル`<OBJECTFILE>'に出力し、ほかの作業を続行します。
516      出力されたオブジェクトファイルは、`comet2'で実行できます。
517      オブジェクトファイルを指定しない場合、出力先は`a.o'です。
518      オブジェクトファイルは1つだけ指定できます。
519
520 `-O[<OBJECTFILE>]'
521 `--assembleoutonly[<OBJECTFILE>]'
522      アセンブル結果をオブジェクトファイル`<OBJECTFILE>'に出力し、終了します。
523      出力されたオブジェクトファイルは、`comet2'で実行できます。
524      オブジェクトファイルを指定しない場合、出力先は`a.o'です。
525      オブジェクトファイルは1つだけ指定できます。
526
527 `-t'
528 `--trace'
529 `--tracearithmetic'
530      プログラム実行中のレジスタの値を次の形式で表示します。
531
532           <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
533           <値の16進数表現> = <値の2進数表現>[ ='文字']
534
535         *
536           `<PR値の16進数表現>'と`<レジスタ>'、`<値の16進数表現>'は、4けたの16進数で表されます。
537           `<PR値の16進数表現>'と`<値の16進数表現>'には、先頭に`#'が付きます。
538           範囲は`#0000'から`#FFFF'です
539
540         * `<値の10進数表現>'は符号の付いた10進数です。
541           範囲は-32768から32767です。
542
543         * `<値の2進数表現>'は、16けたの2進数で表されます。
544           範囲は、`0000000000000000'から`1111111111111111'です
545
546         * `[
547           ='文字']'は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
548
549      表示されるレジスタには、次の種類があります。
550
551     `GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7'
552           汎用レジスタ
553
554     `SP'
555           スタックポインタ
556
557     `PR'
558           プログラムレジスタ
559
560     `FR'
561           フラグレジスタ
562
563      例えば、次のように表示されます。
564
565           #0002: GR1:      3 = #0003 = 0000000000000011
566
567 `-T'
568 `--tracelogical'
569      `-t'と同じように、プログラム実行中のレジスタの値を表示します。
570      ただし`-t'と異なり、`<値の10進数表現>'は符号の付かない10進数です。
571      値の範囲は0から65535です。
572
573 `-d'
574 `--dump'
575      メモリの内容をすべて表示します。
576
577 `-M <MEMORYSIZE>'
578 `--memorysize <MEMORYSIZE>'
579      アセンブルおよび実行時のメモリサイズ`<MEMORYSIZE>'を0から65535の範囲で指定します。
580      指定しない場合、512です。
581
582 `-C <CLOCKS>'
583 `--clocks <CLOCKS>'
584      実行時のクロック周波数`<CLOCKS>'を0より大きい整数で指定します。
585      指定しない場合、クロック周波数は5000000です。
586
587 `-v'
588 `--version'
589      `casl2'のバージョンを表示して終了します。
590
591 `-h'
592 `--help'
593      `casl2'の使用方法を表示して終了します。
594
595 \1f
596 File: yacasl2.info,  Node: comet2 invocation,  Next: dumpword invocation,  Prev: casl2 invocation,  Up: Top
597
598 4 `comet2'の呼び出し
599 *************************
600
601  `comet2'は、引数として指定されたオブジェクトファイルを仮想マシンCOMET
602 II上で実行します。
603 オブジェクトファイルは、`casl'に`-o'または`-O'を指定して出力します。
604
605      $ comet2 hello.o
606
607  引数で指定できるオブジェクトファイルは1つだけです。
608 引数が指定されない場合は、エラーメッセージを表示して終了します。
609 複数の引数を指定した場合、2番目以降の引数は無視されます。
610
611 オプション
612 ---------------
613
614  `comet2'は、次のオプションを指定できます。
615
616 `-t'
617 `--trace'
618 `--tracearithmetic'
619      プログラム実行中のレジスタの値を次の形式で表示します。
620      `<値の10進数表現>'は符号の付いた10進数です。
621      範囲は-32768から32767です。
622
623           <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
624
625         *
626           `<PR値の16進数表現>'と`<値の16進数表現>'は、先頭に`#'が付いた4けたの16進数で表されます。
627           範囲は、`#0000'から`#FFFF'です
628
629         * `<値の2進数表現>'は、16けたの2進数で表されます。
630           範囲は、`0000000000000000'から`1111111111111111'です
631
632         * `[
633           ='文字']'は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
634
635      例えば、次のように表示されます。
636
637           #0002: GR1:      3 = #0003 = 0000000000000011
638
639      表示されるレジスタには、次の種類があります。
640
641     `GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7'
642           汎用レジスタ
643
644     `SP'
645           スタックポインタ
646
647     `PR'
648           プログラムレジスタ
649
650     `FR'
651           フラグレジスタ
652
653 `-T'
654 `--tracelogical'
655      `-t'と同じように、プログラム実行中のレジスタの値を表示します。
656      ただし、`-t'と異なり、`<値の10進数表現>'は符号の付かない10進数です。
657      値の範囲は0から65535です。
658
659 `-d'
660 `--dump'
661      メモリの内容をすべて表示します。
662
663 `-M <MEMORYSIZE>'
664 `--memorysize <MEMORYSIZE>'
665      実行時のメモリサイズ`<MEMORYSIZE>'を0から65535の範囲で指定します。
666      指定しない場合、512です。
667
668 `-C <CLOCKS>'
669 `--clocks <CLOCKS>'
670      実行時のクロック周波数`<CLOCKS>'を0より大きい整数で指定します。
671      指定しない場合、5000000です。
672
673 `-v'
674 `--version'
675      `comet2'のバージョンを表示して終了します。
676
677 `-h'
678 `--help'
679      `comet2'の使用方法を表示して終了します。
680
681 \1f
682 File: yacasl2.info,  Node: dumpword invocation,  Next: CASL2LIB Manual,  Prev: comet2 invocation,  Up: Top
683
684 5 `dumpword'の呼び出し
685 ***************************
686
687  `dumpword'は引数として指定された数値を、整数、#0000から#FFFFまでの範囲の16進数、2進数で表示します。
688 文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。
689 引数は、10進数または先頭に「#」の付いた16進数で指定します。
690 表示される整数は、オプションにより符号付きか符号なしかを指定します。
691 オプションなしの場合は符号付きです。
692 整数の範囲は、符号付きの場合は-32768以上32767以下、符号なしの場合は0以上65535以下です。
693
694      $ dumpword 10
695          10:     10 = #000A = 0000000000001010 = '\n'
696
697  引数が指定されない場合は、使い方を表示して終了します。
698 複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
699
700 注意
701 ------
702
703  マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
704
705  マイナスの数を指定するときは、次のように`--'を付けます。
706
707      $ dumpword -- -72
708         -72:    -72 = #FFB8 = 1111111110111000
709
710  先頭に「#」を付けて16進数を指定するときは、次のように「'」で囲みます。
711
712      $ dumpword '#0048'
713       #0048:     72 = #0048 = 0000000001001000 = 'H'
714
715 オプション
716 ---------------
717
718  `dumpword'は、次のオプションを指定できます。
719
720 `-a'
721 `--arithmetic'
722      出力される整数の範囲を-32,768以上32,767以下にします。
723      オプションなしの場合と同じです。
724
725 `-l'
726 `--logical'
727      出力される整数の範囲を0以上65,535以下にします。
728
729 `-v'
730 `--version'
731      `dumpword'のバージョンを表示して終了します。
732
733 `-h'
734 `--help'
735      `dumpword'の使用方法を表示して終了します。
736
737 \1f
738 File: yacasl2.info,  Node: CASL2LIB Manual,  Prev: dumpword invocation,  Up: Top
739
740 6 CASL2LIBマニュアル
741 *************************
742
743 * Menu:
744
745 * ABS::                         ABS - `abs.casl'
746 * DIVA::                        DIVA - `diva.casl'
747 * DIVL::                        DIVL - `divl.casl'
748 * INL::                         INL - `inl.casl'
749 * L2STR::                       L2STR - `l2str.casl'
750 * MAX::                         MAX - `max.casl'
751 * MINIM::                       MINIM - `minim.casl'
752 * MULA::                        MULA - `mula.casl'
753 * MULL::                        MULL - `mull.casl'
754 * OUTA::                        OUTA - `outa.casl'
755 * OUTB::                        OUTB - `outb.casl'
756 * OUTD_Q15::                    OUTD_Q15 - `outd_q15.casl'
757 * OUTL::                        OUTL - `outl.casl'
758 * REV::                         REV - `rev.casl'
759 * STR2L::                       STR2L - `str2l.casl'
760
761 \1f
762 File: yacasl2.info,  Node: ABS,  Next: DIVA,  Prev: CASL2LIB Manual,  Up: CASL2LIB Manual
763
764 6.1 `ABS' - `abs.casl'
765 ======================
766
767  GR1を符号付き整数とみなし、絶対値に変換
768
769 入力
770 ------
771
772 `GR1'
773      符号付き整数
774
775 出力
776 ------
777
778 `GR1'
779      入力された値の絶対値
780
781 `OF'
782      入力された値が-32768の場合、1
783
784 `SF'
785      入力された値が負数(-32767から-1)の場合、1
786
787 依存する副プログラム
788 ------------------------------
789
790  なし
791
792 使用例
793 ---------
794
795      ;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
796      MAIN    START
797              LD      GR1,A
798              CALL    ABS
799              CALL    OUTA
800              RET
801      A       DC      -1
802              END
803
804      $ casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
805        $CASL2LIB/divl.casl $CASL2LIB/rev.casl
806      1
807
808 \1f
809 File: yacasl2.info,  Node: DIVA,  Next: DIVL,  Prev: ABS,  Up: CASL2LIB Manual
810
811 6.2 `DIVA' - `diva.casl'
812 ========================
813
814  符号付き整数の割算を筆算方式で行う
815
816 入力
817 ------
818
819 `GR1'
820      被除数
821
822 `GR2'
823      除数
824
825 出力
826 ------
827
828 `GR0'
829      商
830
831 `GR3'
832      剰余
833
834 `OF'
835      次の場合、1
836         * GR2が0
837
838         * GR1が-32768
839
840         * GR2が-32768
841
842 `SF'
843      商が負数(-32767から-1)の場合、1
844
845 `ZF'
846      商が0の場合、1
847
848 依存する副プログラム
849 ------------------------------
850
851    * `DIVL'
852
853 使用例
854 ---------
855
856      ;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
857      MAIN    START
858      BEGIN   LD      GR1,A
859              LD      GR2,B
860              CALL    DIVA
861              JOV     ERR
862              LD      GR1,GR0
863              CALL    OUTA
864              LD      GR1,GR3
865              CALL    OUTA
866              JUMP    FIN
867      ERR     OUT     EMSG,ELEN
868      FIN     RET
869      A       DC      -32767
870      B       DC      255
871      EMSG    DC      'error'
872      ELEN    DC      5
873              END
874
875      $ casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
876        $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl
877      -128
878      -127
879
880 \1f
881 File: yacasl2.info,  Node: DIVL,  Next: INL,  Prev: DIVA,  Up: CASL2LIB Manual
882
883 6.3 `DIVL' - `divl.casl'
884 ========================
885
886  符号なし整数の割算を筆算方式で行う
887
888 入力
889 ------
890
891 `GR1'
892      被除数
893
894 `GR2'
895      除数
896
897 出力
898 ------
899
900 `GR0'
901      商
902
903 `GR3'
904      剰余
905
906 `OF'
907      GR2が0の場合、1
908
909 `SF'
910      商が32768から65535の場合、1
911
912 `ZF'
913      商が0の場合、1
914
915 依存する副プログラム
916 ------------------------------
917
918  なし
919
920 使用例
921 ---------
922
923      ;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
924      MAIN    START
925      BEGIN   LD      GR1,A
926              LD      GR2,B
927              CALL    DIVL
928              JOV     ERR
929              LD      GR1,GR0
930              CALL    OUTL
931              LD      GR1,GR3
932              CALL    OUTL
933              JUMP    FIN
934      ERR     OUT     EMSG,ELEN
935      FIN     RET
936      A       DC      65534
937      B       DC      255
938      EMSG    DC      'error'
939      ELEN       DC      5
940              END
941
942      $ casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
943        $CASL2LIB/rev.casl
944      256
945      254
946
947 \1f
948 File: yacasl2.info,  Node: INL,  Next: L2STR,  Prev: DIVL,  Up: CASL2LIB Manual
949
950 6.4 `INL' - `inl.casl'
951 ======================
952
953  符号なし整数の入力を受け付ける
954
955 入力
956 ------
957
958 `標準入力'
959      符号なし整数
960
961 出力
962 ------
963
964 `GR1'
965      入力された符号なし整数
966
967 `GR0'
968      文字列の長さ。 数字以外が入力された場合は`#FFFF'
969
970 依存する副プログラム
971 ------------------------------
972
973    * `STR2L'
974
975 使用例
976 ---------
977
978  次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
979
980      ;;; casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl  $CASL2LIB/mull.casl \
981      ;;; $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl
982      MAIN    START
983      LOOP    CALL    INL             ; GR1に数値、GR0に文字列の長さ
984              JOV     OV
985              AND     GR0,GR0
986              JZE     FIN
987              CPL     GR0,=#FFFF
988              JZE     NAN
989              CALL    OUTL
990              JUMP    LOOP
991      OV      CPL     GR0,=#FFFF
992              JZE     LENOV
993              OUT     OVMSG,MLEN1
994              JUMP    LOOP
995      NAN     OUT     NANMSG,MLEN2
996              JUMP    LOOP
997      LENOV   OUT     LENOVMSG,MLEN3
998      FIN     RET
999      OVMSG   DC      'Over 65535'
1000      MLEN1   DC      10
1001      NANMSG  DC      'Not integer'
1002      MLEN2   DC      11
1003      LENOVMSG DC     'Str too long. Stop'
1004      MLEN3   DC      18
1005              END
1006
1007      $ casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
1008        $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl
1009
1010 \1f
1011 File: yacasl2.info,  Node: L2STR,  Next: MAX,  Prev: INL,  Up: CASL2LIB Manual
1012
1013 6.5 `L2STR' - `l2str.casl'
1014 ==========================
1015
1016  符号なし整数を文字列に変換する
1017
1018 入力
1019 ------
1020
1021 `GR1'
1022      符号なし整数
1023
1024 `GR2'
1025      変換した文字列を格納するアドレス
1026
1027 出力
1028 ------
1029
1030 `GR0'
1031      文字列の長さ
1032
1033 依存する副プログラム
1034 ------------------------------
1035
1036    * `DIVL'
1037
1038 \1f
1039 File: yacasl2.info,  Node: MAX,  Next: MINIM,  Prev: L2STR,  Up: CASL2LIB Manual
1040
1041 6.6 `MAX' - `max.casl'
1042 ======================
1043
1044  連続した複数のWORDを符号付き整数とみなして最大値を返す
1045
1046 入力
1047 ------
1048
1049 `GR1'
1050      WORD値を格納したアドレス
1051
1052 `GR2'
1053      値の個数
1054
1055 出力
1056 ------
1057
1058 `GR0'
1059      最大値
1060
1061 依存する副プログラム
1062 ------------------------------
1063
1064  なし
1065
1066 \1f
1067 File: yacasl2.info,  Node: MINIM,  Next: MULA,  Prev: MAX,  Up: CASL2LIB Manual
1068
1069 6.7 `MINIM' - `minim.casl'
1070 ==========================
1071
1072  連続した複数のWORDを符号付き整数とみなして最小値を返す
1073
1074 入力
1075 ------
1076
1077 `GR1'
1078      WORD値を格納したアドレス
1079
1080 `GR2'
1081      値の個数
1082
1083 出力
1084 ------
1085
1086 `GR0'
1087      最小値
1088
1089 依存する副プログラム
1090 ------------------------------
1091
1092  なし
1093
1094 \1f
1095 File: yacasl2.info,  Node: MULA,  Next: MULL,  Prev: MINIM,  Up: CASL2LIB Manual
1096
1097 6.8 `MULA' - `mula.casl'
1098 ========================
1099
1100 \1f
1101 File: yacasl2.info,  Node: MULL,  Next: OUTA,  Prev: MULA,  Up: CASL2LIB Manual
1102
1103 6.9 `MULL' - `mull.casl'
1104 ========================
1105
1106 \1f
1107 File: yacasl2.info,  Node: OUTA,  Next: OUTB,  Prev: MULL,  Up: CASL2LIB Manual
1108
1109 6.10 `OUTA' - `outa.casl'
1110 =========================
1111
1112 \1f
1113 File: yacasl2.info,  Node: OUTB,  Next: OUTD_Q15,  Prev: OUTA,  Up: CASL2LIB Manual
1114
1115 6.11 `OUTB' - `outb.casl'
1116 =========================
1117
1118 \1f
1119 File: yacasl2.info,  Node: OUTD_Q15,  Next: OUTL,  Prev: OUTB,  Up: CASL2LIB Manual
1120
1121 6.12 `OUTD_Q15' - `outd_q15.casl'
1122 =================================
1123
1124 \1f
1125 File: yacasl2.info,  Node: OUTL,  Next: REV,  Prev: OUTD_Q15,  Up: CASL2LIB Manual
1126
1127 6.13 `OUTL' - `outl.casl'
1128 =========================
1129
1130 \1f
1131 File: yacasl2.info,  Node: REV,  Next: STR2L,  Prev: OUTL,  Up: CASL2LIB Manual
1132
1133 6.14 `REV' - `rev.casl'
1134 =======================
1135
1136 \1f
1137 File: yacasl2.info,  Node: STR2L,  Prev: REV,  Up: CASL2LIB Manual
1138
1139 6.15 `STR2L' - `str2l.casl'
1140 ===========================
1141
1142
1143 \1f
1144 Tag Table:
1145 Node: Top\7f441
1146 Node: Overview\7f847
1147 Node: Sample usage\7f2911
1148 Node: Simple output\7f3789
1149 Node: Assemble result\7f5169
1150 Node: Register and memory\7f8091
1151 Node: Register specify\7f11230
1152 Node: End value\7f12267
1153 Node: Step count\7f13817
1154 Node: Only assemble\7f14383
1155 Node: Analyze word\7f15311
1156 Node: Use CASL2LIB\7f15712
1157 Node: casl2 invocation\7f17247
1158 Node: comet2 invocation\7f21748
1159 Node: dumpword invocation\7f24607
1160 Node: CASL2LIB Manual\7f26628
1161 Node: ABS\7f27546
1162 Node: DIVA\7f28410
1163 Node: DIVL\7f29644
1164 Node: INL\7f30755
1165 Node: L2STR\7f32398
1166 Node: MAX\7f32812
1167 Node: MINIM\7f33221
1168 Node: MULA\7f33637
1169 Node: MULL\7f33772
1170 Node: OUTA\7f33906
1171 Node: OUTB\7f34042
1172 Node: OUTD_Q15\7f34182
1173 Node: OUTL\7f34338
1174 Node: REV\7f34477
1175 Node: STR2L\7f34609
1176 \1f
1177 End Tag Table
1178
1179 \1f
1180 Local Variables:
1181 coding: utf-8
1182 End: