サンプルaddl.caslとマニュアルを更新
[YACASL2.git] / doc / manual.texi
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3 @ifnottex
4 @documentlanguage ja_JP
5 @end ifnottex
6 @setfilename yacasl2.info
7 @documentencoding UTF-8
8 @settitle YACASL2 - CASL II 処理システム
9 @firstparagraphindent insert
10 @paragraphindent 1
11 @ifhtml
12 @exampleindent 0
13 @end ifhtml
14 @c %**end of header
15
16 @copying
17 Copyright @copyright{} 2010-2021 j8takagi
18 @end copying
19
20 @dircategory Programming
21 @direntry
22 * YACASL2: (yacasl2.info).                     CASL II 処理システム
23 * casl2: (yacasl2.info)casl2 invocation.       casl2の呼び出し
24 * comet2: (yacasl2.info)comet2 invocation.     comet2の呼び出し
25 * dumpword: (yacasl2.info)dumpword invocation. dumpwordの呼び出し
26 @end direntry
27
28 @titlepage
29 @title YACASL2
30 @subtitle コマンドラインインターフェイスで動作するオープンソースのCASL II処理システム
31 @author j8takagi
32 @insertcopying
33 @end titlepage
34
35 @node Top, Overview, (dir), (dir)
36
37 @menu
38 * Overview::                    YACASL2の概要
39 * Sample usage::                YACASL2の使用例
40 * casl2 invocation::            casl2の呼び出し
41 * comet2 invocation::           comet2の呼び出し
42 * dumpword invocation::         dumpwordの呼び出し
43
44 @detailmenu
45  --- The Detailed Node Listing ---
46
47 YACASL2の使用例
48
49 * Simple output::               実行結果の出力だけを表示
50 * Assemble result::             アセンブル結果の確認
51 * Register and memory::         実行時のレジスタとメモリを表示
52 * Only assemble::               アセンブルと実行を別に行う
53 * Analyze word::                1語の解析
54 * Use CASL2LIB::                CASL2ライブラリの使用
55
56 実行時のレジスタとメモリを表示
57
58 * Register specify::            特定のレジスタを表示
59 * End value::
60 * Step count::                  プログラムのステップ数を表示
61
62 @end detailmenu
63 @end menu
64
65 @contents
66
67 @node Overview, Sample usage, Top, Top
68 @chapter YACASL2の概要
69
70 YACASL2は、UNIXやLinuxのコマンドラインインターフェイスで
71 動作するオープンソースのCASL II処理システムです。
72 CASL IIは情報処理試験で用いられるアセンブラ言語で、
73 次の資料により仕様が公開されています。
74
75 @iftex
76 @cartouche
77 @end iftex
78 @quotation
79 @uref{https://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver4_2.pdf, 情報処理技術者試験 情報処理安全確保支援士試験 試験で使用する情報技術に関する用語・プログラム言語など Ver 4.2}[PDFファイル]
80
81 別紙 1 アセンブラ言語の仕様
82 @end quotation
83 @iftex
84 @end cartouche
85 @end iftex
86
87 YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
88 仮想マシンCOMET II上で実行します。
89 アセンブルと実行は、連続で行うこともできますし、
90 アセンブル結果をファイルに保存してあとから実行することもできます。
91 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
92 はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
93 そのままアセンブルして実行できます。
94 また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
95
96 YACASL2は、「ふつうの処理系」として動作します。
97 YACASL2の操作は、端末上のコマンドラインインターフェイス(CLI)で操作します。
98 YACASL2は、次のような動作内容をすべてテキストで出力します。
99
100 @itemize @bullet
101
102 @item
103 ラベルとアドレスの対応
104
105 @item
106 アセンブル結果
107
108 @item
109 実行時のレジスタの内容
110
111 @item
112 実行時のメモリの内容
113 @end itemize
114
115 YACASL2では、機械コードモニターを使い、動作中のCPUやメモリーを調べたりデバッグしたりすることもできます。
116
117 また、出力された動作内容は、GNU/Linuxのさまざまなコマンド、
118 たとえば、@command{cat}、@command{less}、@command{grep}、@command{wc}などを使って解析できます。
119
120
121
122 @node Sample usage, casl2 invocation, Overview, Top
123 @chapter YACASL2の使用例
124 YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。
125 以下の例で用いられるCASLプログラムのファイルは、
126 テキストエディタなどで作成するか、インストールしたディレクトリの
127 中にある@file{as}ディレクトリからコピーしてください。
128
129 @menu
130 * Simple output::               実行結果の出力だけを表示
131 * Assemble result::             アセンブル結果の確認
132 * Register and memory::         実行時のレジスタとメモリを表示
133 * Only assemble::               アセンブルと実行を別に行う
134 * Analyze word::                1語の解析
135 * Use CASL2LIB::                CASL2ライブラリの使用
136 @end menu
137
138 @node Simple output, Assemble result, Sample usage, Sample usage
139 @section 実行結果の出力だけを表示
140
141 インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。
142 CASL IIのマクロ命令OUTは、文字列を出力します。
143
144 @example
145 $ @kbd{cat hello.casl}
146 MAIN     START
147          OUT     OBUF,LEN
148          RET
149 OBUF     DC      'Hello, World!'
150 LEN      DC      13
151          END
152 @end example
153
154 次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
155
156 @example
157 $ @kbd{casl2 hello.casl}
158 Hello, World!
159 @end example
160
161 @file{addl.casl}は、3と1の和を求めます。
162
163 @example
164 $ @kbd{cat addl.casl}
165 ;;; ADDL r,adr
166 MAIN     START
167          LD      GR1,A
168          ADDL    GR1,B
169          RET
170 A        DC      3
171 B        DC      1
172          END
173 @end example
174
175 このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
176
177 @example
178 $ @kbd{casl2 addl.casl}
179 $
180 @end example
181
182 実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
183
184 @node Assemble result, Register and memory, Simple output, Sample usage
185 @section アセンブル結果の確認
186
187 casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。
188 また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
189
190 次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。
191 OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
192
193 @example
194 $ @kbd{casl2 -a -l hello.casl}
195
196 Assemble hello.casl (0)
197
198 Label::::
199 MAIN.LEN ---> #0020
200 MAIN ---> #0000
201 MAIN.OBUF ---> #0013
202
203 Assemble hello.casl (1)
204 hello.casl:    1:MAIN    START
205 hello.casl:    2:        OUT     OBUF,LEN
206     #0000   #7001
207     #0001   #0000
208     #0002   #7002
209     #0003   #0000
210     #0004   #1210
211     #0005   #0013
212     #0006   #1220
213     #0007   #0020
214     #0008   #F000
215     #0009   #0002
216     #000A   #1210
217     #000B   #0021
218     #0021   #000A
219     #000C   #1220
220     #000D   #0022
221     #0022   #0001
222     #000E   #F000
223     #000F   #0002
224     #0010   #7120
225     #0011   #7110
226 hello.casl:    3:        RET
227     #0012   #8100
228 hello.casl:    4:OBUF    DC      'Hello, World!'
229     #0013   #0048
230     #0014   #0065
231     #0015   #006C
232     #0016   #006C
233     #0017   #006F
234     #0018   #002C
235     #0019   #0020
236     #001A   #0057
237     #001B   #006F
238     #001C   #0072
239     #001D   #006C
240     #001E   #0064
241     #001F   #0021
242 hello.casl:    5:LEN     DC      13
243     #0020   #000D
244 hello.casl:    6:        END
245 Hello, World!
246 @end example
247
248 @file{addl.casl}の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
249
250 @example
251 $ @kbd{casl2 -a -l addl.casl}
252
253 Assemble addl.casl (0)
254
255 Label::::
256 MAIN ---> #0000
257 MAIN.A ---> #0007
258 MAIN.B ---> #0008
259 MAIN.C ---> #0009
260
261 Assemble addl.casl (1)
262 addl.casl:    1:;;; ADDL r,adr
263 addl.casl:    2:MAIN    START
264 addl.casl:    3:        LD      GR1,A
265     #0000   #1010
266     #0001   #0007
267 addl.casl:    4:        ADDL    GR1,B
268     #0002   #2210
269     #0003   #0008
270 addl.casl:    5:        ST      GR1,C
271     #0004   #1110
272     #0005   #0009
273 addl.casl:    6:        RET
274     #0006   #8100
275 addl.casl:    7:A       DC      3
276     #0007   #0003
277 addl.casl:    8:B       DC      2
278     #0008   #0002
279 addl.casl:    9:C       DS      1
280     #0009   #0000
281 addl.casl:   10:        END
282 @end example
283
284 なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。
285 仮想マシンCOMET IIでのプログラム実行はされません。
286
287 @node Register and memory, Only assemble, Assemble result, Sample usage
288 @section 実行時のレジスタとメモリを表示
289
290 YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
291
292 また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。
293 小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
294
295 @menu
296 * Register specify::            特定のレジスタを表示
297 * End value::
298 * Step count::                  プログラムのステップ数を表示
299 @end menu
300
301 @file{addl.casl}では、次のようにCPUのレジスタとメモリの内容を表示できます。
302
303 @example
304 $ @kbd{casl2 -t -d -M16 addl.casl | less}
305
306 Assemble addl.casl (0)
307
308 Assemble addl.casl (1)
309
310 Executing machine codes
311 #0000: Register::::
312 #0000: GR0:      0 = #0000 = 0000000000000000
313 #0000: GR1:      0 = #0000 = 0000000000000000
314 #0000: GR2:      0 = #0000 = 0000000000000000
315 #0000: GR3:      0 = #0000 = 0000000000000000
316 #0000: GR4:      0 = #0000 = 0000000000000000
317 #0000: GR5:      0 = #0000 = 0000000000000000
318 #0000: GR6:      0 = #0000 = 0000000000000000
319 #0000: GR7:      0 = #0000 = 0000000000000000
320 #0000: SP:      16 = #0010 = 0000000000010000
321 #0000: PR:       0 = #0000 = 0000000000000000
322 #0000: FR (OF SF ZF): 000
323 #0000: Memory::::
324 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
325        -------------------------------------------------------------------------------------
326 #0000: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
327
328 #0002: Register::::
329 #0002: GR0:      0 = #0000 = 0000000000000000
330 #0002: GR1:      3 = #0003 = 0000000000000011
331 #0002: GR2:      0 = #0000 = 0000000000000000
332 #0002: GR3:      0 = #0000 = 0000000000000000
333 #0002: GR4:      0 = #0000 = 0000000000000000
334 #0002: GR5:      0 = #0000 = 0000000000000000
335 #0002: GR6:      0 = #0000 = 0000000000000000
336 #0002: GR7:      0 = #0000 = 0000000000000000
337 #0002: SP:      16 = #0010 = 0000000000010000
338 #0002: PR:       2 = #0002 = 0000000000000010
339 #0002: FR (OF SF ZF): 000
340 #0002: Memory::::
341 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
342        -------------------------------------------------------------------------------------
343 #0002: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
344
345 #0004: Register::::
346 #0004: GR0:      0 = #0000 = 0000000000000000
347 #0004: GR1:      5 = #0005 = 0000000000000101
348 #0004: GR2:      0 = #0000 = 0000000000000000
349 #0004: GR3:      0 = #0000 = 0000000000000000
350 #0004: GR4:      0 = #0000 = 0000000000000000
351 #0004: GR5:      0 = #0000 = 0000000000000000
352 #0004: GR6:      0 = #0000 = 0000000000000000
353 #0004: GR7:      0 = #0000 = 0000000000000000
354 #0004: SP:      16 = #0010 = 0000000000010000
355 #0004: PR:       4 = #0004 = 0000000000000100
356 #0004: FR (OF SF ZF): 000
357 #0004: Memory::::
358 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
359        -------------------------------------------------------------------------------------
360 #0004: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
361
362 #0006: Register::::
363 #0006: GR0:      0 = #0000 = 0000000000000000
364 #0006: GR1:      5 = #0005 = 0000000000000101
365 #0006: GR2:      0 = #0000 = 0000000000000000
366 #0006: GR3:      0 = #0000 = 0000000000000000
367 #0006: GR4:      0 = #0000 = 0000000000000000
368 #0006: GR5:      0 = #0000 = 0000000000000000
369 #0006: GR6:      0 = #0000 = 0000000000000000
370 #0006: GR7:      0 = #0000 = 0000000000000000
371 #0006: SP:      16 = #0010 = 0000000000010000
372 #0006: PR:       6 = #0006 = 0000000000000110
373 #0006: FR (OF SF ZF): 000
374 #0006: Memory::::
375 #0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
376        -------------------------------------------------------------------------------------
377 #0006: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0005 0000 0000 0000 0000 0000 0000
378 @end example
379
380 @node Register specify, End value, Register and memory, Register and memory
381 @subsection 特定のレジスタを表示
382
383 @file{addl.casl}のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。
384 こうした場合は、@command{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
385
386 @example
387 $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
388 #0000: GR1:      0 = #0000 = 0000000000000000
389 #0002: GR1:      3 = #0003 = 0000000000000011
390 #0004: GR1:      4 = #0004 = 0000000000000100
391 @end example
392
393 この内容を、先に出力したアセンブル結果と比較してください。
394 次の表のように、PRとGR1、命令行が対応していることがわかります。
395
396 @multitable @columnfractions .3 .3 .4
397 @item PR @tab GR1 @tab 命令行
398 @item #0000
399 @tab #0000
400 @tab (なし)
401 @item #0002
402 @tab #0003
403 @tab @code{LD GR1,A}
404 @item #0004
405 @tab #0004
406 @tab @code{ADDL GR1,B}
407 @end multitable
408
409 @node End value, Step count, Register specify, Register and memory
410 @subsection プログラム終了時の値を表示
411
412 @command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
413
414 @file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
415
416 @example
417 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
418 #0004: GR1:      4 = #0004 = 0000000000000100
419 @end example
420
421 @file{sum_10.casl}は、1から10までの整数の和を求め、GR2に格納してからメモリにストア(書き込み)します。
422
423 @example
424 $ @kbd{cat sum_10.casl}
425 ;;; sum_10.casl
426 ;;; 1から10までの整数をすべて加算した値をメモリーに格納する
427 MAIN    START
428         XOR     GR2,GR2         ; GR2を初期化
429         LD      GR1,FST         ; GR1に初項をメモリーから転送
430 LOOP    ADDL    GR2,GR1         ; ループ先頭。GR2 <- GR2 + GR1
431         ADDL    GR1,STEP        ; GR1 <- GR1 + 公差
432         CPL     GR1,LST         ; GR1が末項より大きい場合は終了
433         JPL     FIN             ; ↓
434         JUMP    LOOP            ; ループ終端
435 FIN     ST      GR2,RST         ; GR2の結果をメモリーに転送
436         RET
437 FST     DC      1               ; 初項
438 LST     DC      10              ; 末項
439 STEP    DC      1               ; 公差
440 RST     DS      1               ; 結果
441         END
442 @end example
443
444 @file{sum_10.casl}でプログラム終了時のGR2の値を確認するには、次のようにします。
445
446 @example
447 $ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | tail -1}
448 #000E: GR2:     55 = #0037 = 0000000000110111 = '7'
449 @end example
450
451 @node Step count,  , End value, Register and memory
452 @subsection プログラムのステップ数を表示
453
454 @command{grep}と@command{wc}を組み合わせれば、プログラムのステップ数を表示できます。
455
456 @example
457 $ @kbd{casl2 -t hello.casl | grep 'GR1:' | wc -l}
458 11
459 @end example
460
461 @example
462 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
463 3
464 @end example
465
466 @file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
467
468 @example
469 $ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | wc -l}
470 53
471 @end example
472
473 @node Only assemble, Analyze word, Register and memory, Sample usage
474 @section アセンブルと実行を別に行う
475
476 @command{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
477
478 @example
479 $ @kbd{casl2 -Ohello.o hello.casl}
480 @end example
481
482 作成されたオブジェクトファイルの内容は、@command{od}を使って確認できます。
483 テキストファイルではないため、@command{cat}などでは確認できません。
484
485 @example
486 $ @kbd{od -t x2 hello.o}
487 0000000 7001 0000 7002 0000 1210 0013 1220 0020
488 0000020 f000 0002 1210 0021 1220 0022 f000 0002
489 0000040 7120 7110 8100 0048 0065 006c 006c 006f
490 0000060 002c 0020 0057 006f 0072 006c 0064 0021
491 0000100 000d 000a 0001
492 0000106
493 @end example
494
495 オブジェクトファイルの実行には、@command{comet2}を使います。
496
497 @example
498 $ @kbd{comet2 hello.o}
499 Hello, World!
500 @end example
501
502 @node Analyze word, Use CASL2LIB, Only assemble, Sample usage
503 @section 1語の解析
504
505 CASL IIでは、1語(1 word、16ビット)を単位としてデータが処理されます。
506 @command{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
507
508 @example
509 $ @kbd{dumpword 72}
510     72:     72 = #0048 = 0000000001001000 = 'H'
511 @end example
512
513 @node Use CASL2LIB,  , Analyze word, Sample usage
514 @section CASL2ライブラリの使用
515
516 YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
517
518 このフォルダには、たとえば次のようなプログラムが含まれています。
519
520 @table @option
521 @item OUTL
522 @file{outl.casl}。
523 GR1に格納された値を、0以上65535以下の整数として出力します。
524
525 @item OUTA
526 @file{outa.casl}。
527 GR1に格納された値を、-32767以上32767以下の整数として出力します。
528
529 @item MULL
530 @file{mull.casl}。
531 GR1とGR2に格納された値を0以上65535以下の整数と見なし、積をGR3に格納します。
532
533 @item DIVL
534 @file{divl.casl}。
535 GR1とGR2に格納された値を0以上65535以下の整数と見なし、商をGR3、剰余をGR0に格納します。
536 @end table
537
538 @subsection 数値を出力する
539
540 3と1の和を求める@file{addl.casl}で演算結果を出力するには、まず@file{addl.casl}を編集します。
541 CASL IIの@command{CALL}命令で@command{OUTL}を副プログラムとして呼び出します。
542
543 @example
544 $ @kbd{cat addl_outl.casl}
545 MAIN    START
546         LD      GR1,A
547         ADDL    GR1,B
548         @emph{CALL    OUTL}
549         RET
550 A       DC      3
551 B       DC      1
552         END
553 @end example
554
555 変更したら@command{casl2}を、複数のファイルを指定して実行します。
556
557 @example
558 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
559 4
560 @end example
561
562 @node casl2 invocation, comet2 invocation, Sample usage, Top
563 @chapter @command{casl2}の呼び出し
564
565 @pindex casl2
566 @cindex casl2
567 @cindex invoking
568 @cindex options
569 @cindex usage
570 @cindex help
571
572 @command{casl2}は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。
573 CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。
574 引数が指定されない場合は、エラーメッセージを表示して終了します。
575
576 @example
577 $ @kbd{casl2 hello.casl}
578 @end example
579
580 複数のCASLファイルを指定することで、副プログラムを呼び出すこともできます。
581
582 @example
583 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
584 @end example
585
586 @unnumberedsec オプション
587
588 @command{casl2}は、次のオプションを指定できます。
589
590 @table @option
591 @item -s
592 @itemx --source
593 CASLファイルの内容を表示します。
594
595 @item -l
596 @itemx --label
597 ラベルの一覧を次の形式で表示します。
598 表示後、ほかの作業を続行します。
599
600 @example
601 <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
602 @end example
603
604 @item -L
605 @itemx --labelonly
606 @option{-l}と同じ形式でラベルの一覧を表示します。
607 表示後、ほかの作業は続行せず、終了します。
608
609 @item -a
610 @itemx --assembledetail
611 アセンブル詳細結果を表示し、ほかの作業を続行します。
612
613 @item -A
614 @itemx --assembledetailonly
615 アセンブル詳細結果を表示して終了します。
616
617 @item -o<OBJECTFILE>
618 @itemx --assembleout<OBJECTFILE>
619 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。
620 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
621 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
622 オブジェクトファイルは1つだけ指定できます。
623
624 @item -O[<OBJECTFILE>]
625 @itemx --assembleoutonly[<OBJECTFILE>]
626 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。
627 出力されたオブジェクトファイルは、@command{comet2}で実行できます。
628 オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。
629 オブジェクトファイルは1つだけ指定できます。
630
631 @item -t
632 @itemx --trace
633 @itemx --tracearithmetic
634 プログラム実行中のレジスタの値を次の形式で表示します。
635
636 @example
637 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
638 <値の16進数表現> = <値の2進数表現>[ ='文字']
639 @end example
640
641 @itemize
642 @item
643 @code{<PR値の16進数表現>}と@code{<レジスタ>}、@code{<値の16進数表現>}は、4けたの16進数で表されます。
644 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}には、先頭に@code{#}が付きます。
645 範囲は@code{#0000}から@code{#FFFF}です
646
647 @item
648 @code{<値の10進数表現>}は符号の付いた10進数です。
649 範囲は-32768から32767です。
650
651 @item
652 @code{<値の2進数表現>}は、16けたの2進数で表されます。
653 範囲は、@code{0000000000000000}から@code{1111111111111111}です
654
655 @item
656 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
657 @end itemize
658
659 表示されるレジスタには、次の種類があります。
660
661 @table @code
662 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
663 汎用レジスタ
664
665 @item SP
666 スタックポインタ
667
668 @item PR
669 プログラムレジスタ
670
671 @item FR
672 フラグレジスタ
673 @end table
674
675 例えば、次のように表示されます。
676
677 @example
678 #0002: GR1:      3 = #0003 = 0000000000000011
679 @end example
680
681 @item -T
682 @itemx --tracelogical
683 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
684 ただし@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
685 値の範囲は0から65535です。
686
687 @item -d
688 @itemx --dump
689 メモリの内容をすべて表示します。
690
691 @item -M <MEMORYSIZE>
692 @itemx --memorysize <MEMORYSIZE>
693 アセンブルおよび実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
694 指定しない場合、512です。
695
696 @item -C <CLOCKS>
697 @itemx --clocks <CLOCKS>
698 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
699 指定しない場合、クロック周波数は5000000です。
700
701 @item -v
702 @itemx --version
703 @command{casl2}のバージョンを表示して終了します。
704
705 @item -h
706 @itemx --help
707 @command{casl2}の使用方法を表示して終了します。
708 @end table
709
710 @node comet2 invocation, dumpword invocation, casl2 invocation, Top
711 @chapter @command{comet2}の呼び出し
712
713 @pindex comet2
714 @cindex comet2
715 @cindex invoking
716 @cindex options
717 @cindex usage
718 @cindex help
719
720 @command{comet2}は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。
721 オブジェクトファイルは、@command{casl}に@option{-o}または@option{-O}を指定して出力します。
722
723 @example
724 $ @kbd{comet2 hello.o}
725 @end example
726
727 引数で指定できるオブジェクトファイルは1つだけです。
728 引数が指定されない場合は、エラーメッセージを表示して終了します。
729 複数の引数を指定した場合、2番目以降の引数は無視されます。
730
731 @unnumberedsec オプション
732
733 @command{comet2}は、次のオプションを指定できます。
734
735 @table @option
736
737 @item -t
738 @itemx --trace
739 @itemx --tracearithmetic
740 プログラム実行中のレジスタの値を次の形式で表示します。
741 @code{<値の10進数表現>}は符号の付いた10進数です。
742 範囲は-32768から32767です。
743
744 @example
745 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
746 @end example
747
748 @itemize
749 @item
750 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。
751 範囲は、@code{#0000}から@code{#FFFF}です
752
753 @item
754 @code{<値の2進数表現>}は、16けたの2進数で表されます。
755 範囲は、@code{0000000000000000}から@code{1111111111111111}です
756
757 @item
758 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
759 @end itemize
760
761 例えば、次のように表示されます。
762
763 @example
764 #0002: GR1:      3 = #0003 = 0000000000000011
765 @end example
766
767 表示されるレジスタには、次の種類があります。
768
769 @table @code
770 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
771 汎用レジスタ
772
773 @item SP
774 スタックポインタ
775
776 @item PR
777 プログラムレジスタ
778
779 @item FR
780 フラグレジスタ
781 @end table
782
783 @item -T
784 @itemx --tracelogical
785 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。
786 ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。
787 値の範囲は0から65535です。
788
789 @item -d
790 @itemx --dump
791 メモリの内容をすべて表示します。
792
793 @item -M <MEMORYSIZE>
794 @itemx --memorysize <MEMORYSIZE>
795 実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。
796 指定しない場合、512です。
797
798 @item -C <CLOCKS>
799 @itemx --clocks <CLOCKS>
800 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。
801 指定しない場合、5000000です。
802
803 @item -v
804 @itemx --version
805 @command{comet2}のバージョンを表示して終了します。
806
807 @item -h
808 @itemx --help
809 @command{comet2}の使用方法を表示して終了します。
810 @end table
811
812 @node dumpword invocation, , comet2 invocation, Top
813 @chapter @command{dumpword}の呼び出し
814
815 @pindex dumpword
816 @cindex dumpword
817 @cindex invoking
818 @cindex options
819 @cindex usage
820 @cindex help
821
822 @command{dumpword}は引数として指定された数値を、整数、#0000から#FFFFまでの範囲の16進数、2進数で表示します。
823 文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。
824 引数は、10進数または先頭に「#」の付いた16進数で指定します。
825 表示される整数は、オプションにより符号付きか符号なしかを指定します。
826 オプションなしの場合は符号付きです。
827 整数の範囲は、符号付きの場合は-32768以上32767以下、符号なしの場合は0以上65535以下です。
828
829 @example
830 $ @kbd{dumpword 10}
831     10:     10 = #000A = 0000000000001010 = '\n'
832 @end example
833
834 引数が指定されない場合は、使い方を表示して終了します。
835 複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
836
837 @unnumberedsec 注意
838
839 マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
840
841 マイナスの数を指定するときは、次のように@option{--}を付けます。
842
843 @example
844 $ @kbd{dumpword -- -72}
845    -72:    -72 = #FFB8 = 1111111110111000
846 @end example
847
848 先頭に「#」を付けて16進数を指定するときは、次のように「'」で囲みます。
849
850 @example
851 $ @kbd{dumpword '#0048'}
852  #0048:     72 = #0048 = 0000000001001000 = 'H'
853 @end example
854
855 @unnumberedsec オプション
856
857 @command{dumpword}は、次のオプションを指定できます。
858
859 @table @option
860
861 @item -a
862 @itemx --arithmetic
863 出力される整数の範囲を-32,768以上32,767以下にします。
864 オプションなしの場合と同じです。
865
866 @item -l
867 @itemx --logical
868 出力される整数の範囲を0以上65,535以下にします。
869
870 @item -v
871 @itemx --version
872 @command{dumpword}のバージョンを表示して終了します。
873
874 @item -h
875 @itemx --help
876 @command{dumpword}の使用方法を表示して終了します。
877 @end table
878
879 @bye