CASL II仕様書のバージョンとURLの変更に対応
[YACASL2.git] / doc / manual.texi
index 69ff038..6959e65 100644 (file)
@@ -14,7 +14,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2010-2018 j8takagi
+Copyright @copyright{} 2010-2023 j8takagi
 @end copying
 
 @dircategory Programming
@@ -76,8 +76,8 @@ CASL IIは情報処理試験で用いられるアセンブラ言語で、
 @cartouche
 @end iftex
 @quotation
-@uref{http://www.jitec.jp/1_13download/shiken_yougo_ver2_2.pdf, 試験で使用する情報処理用語・プログラム言語など Ver 2.2(平成24年5月22日)}[PDFファイル]
-別紙 1 アセンブラ言語の仕様
+@uref{https://www.ipa.go.jp/shiken/syllabus/ps6vr7000000i9g3-att/shiken_yougo_ver4_3.pdf, 情報処理技術者試験 情報処理安全確保支援士試験 試験で使用する情報技術に関する用語・プログラム言語など Ver 4.3}[PDFファイル] @*
+別紙2 アセンブラ言語の仕様(5ページから12ページまで)
 @end quotation
 @iftex
 @end cartouche
@@ -252,30 +252,36 @@ $ @kbd{casl2 -a -l addl.casl}
 Assemble addl.casl (0)
 
 Label::::
-MAIN.A ---> #0005
-MAIN.B ---> #0006
 MAIN ---> #0000
+MAIN.A ---> #0007
+MAIN.B ---> #0008
+MAIN.C ---> #0009
 
 Assemble addl.casl (1)
 addl.casl:    1:;;; ADDL r,adr
 addl.casl:    2:MAIN    START
 addl.casl:    3:        LD      GR1,A
     #0000   #1010
-    #0001   #0005
+    #0001   #0007
 addl.casl:    4:        ADDL    GR1,B
     #0002   #2210
-    #0003   #0006
-addl.casl:    5:        RET
-    #0004   #8100
-addl.casl:    6:A       DC      3
-    #0005   #0003
-addl.casl:    7:B       DC      1
-    #0006   #0001
-addl.casl:    8:        END
+    #0003   #0008
+addl.casl:    5:        ST      GR1,C
+    #0004   #1110
+    #0005   #0009
+addl.casl:    6:        RET
+    #0006   #8100
+addl.casl:    7:A       DC      3
+    #0007   #0003
+addl.casl:    8:B       DC      2
+    #0008   #0002
+addl.casl:    9:C       DS      1
+    #0009   #0000
+addl.casl:   10:        END
 @end example
 
 なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。
-仮想マシンCOMET II での実行は行われません。
+仮想マシンCOMET IIでのプログラム実行はされません。
 
 @node Register and memory, Only assemble, Assemble result, Sample usage
 @section 実行時のレジスタとメモリを表示
@@ -291,10 +297,10 @@ YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ
 * Step count::                  プログラムのステップ数を表示
 @end menu
 
-@file{addl.casl}ã\81«å¿\85è¦\81ã\81ªã\83¡ã\83¢ã\83ªå®¹é\87\8fã\81¯8èª\9eã\81®ã\81\9fã\82\81、次のようにCPUのレジスタとメモリの内容を表示できます。
+@file{addl.casl}ã\81§ã\81¯、次のようにCPUのレジスタとメモリの内容を表示できます。
 
 @example
-$ @kbd{casl2 -t -d -M8 addl.casl | less}
+$ @kbd{casl2 -t -d -M16 addl.casl | less}
 
 Assemble addl.casl (0)
 
@@ -310,12 +316,14 @@ Executing machine codes
 #0000: GR5:      0 = #0000 = 0000000000000000
 #0000: GR6:      0 = #0000 = 0000000000000000
 #0000: GR7:      0 = #0000 = 0000000000000000
-#0000: SP:       8 = #0008 = 0000000000001000
+#0000: SP:      16 = #0010 = 0000000000010000
 #0000: PR:       0 = #0000 = 0000000000000000
 #0000: FR (OF SF ZF): 000
 #0000: Memory::::
-#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
+#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+       -------------------------------------------------------------------------------------
+#0000: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
 #0002: Register::::
 #0002: GR0:      0 = #0000 = 0000000000000000
 #0002: GR1:      3 = #0003 = 0000000000000011
@@ -325,27 +333,47 @@ Executing machine codes
 #0002: GR5:      0 = #0000 = 0000000000000000
 #0002: GR6:      0 = #0000 = 0000000000000000
 #0002: GR7:      0 = #0000 = 0000000000000000
-#0002: SP:       8 = #0008 = 0000000000001000
+#0002: SP:      16 = #0010 = 0000000000010000
 #0002: PR:       2 = #0002 = 0000000000000010
 #0002: FR (OF SF ZF): 000
 #0002: Memory::::
-#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
+#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+       -------------------------------------------------------------------------------------
+#0002: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
 #0004: Register::::
 #0004: GR0:      0 = #0000 = 0000000000000000
-#0004: GR1:      4 = #0004 = 0000000000000100
+#0004: GR1:      5 = #0005 = 0000000000000101
 #0004: GR2:      0 = #0000 = 0000000000000000
 #0004: GR3:      0 = #0000 = 0000000000000000
 #0004: GR4:      0 = #0000 = 0000000000000000
 #0004: GR5:      0 = #0000 = 0000000000000000
 #0004: GR6:      0 = #0000 = 0000000000000000
 #0004: GR7:      0 = #0000 = 0000000000000000
-#0004: SP:       8 = #0008 = 0000000000001000
+#0004: SP:      16 = #0010 = 0000000000010000
 #0004: PR:       4 = #0004 = 0000000000000100
 #0004: FR (OF SF ZF): 000
 #0004: Memory::::
-#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
-#0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000 
+#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+       -------------------------------------------------------------------------------------
+#0004: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
+
+#0006: Register::::
+#0006: GR0:      0 = #0000 = 0000000000000000
+#0006: GR1:      5 = #0005 = 0000000000000101
+#0006: GR2:      0 = #0000 = 0000000000000000
+#0006: GR3:      0 = #0000 = 0000000000000000
+#0006: GR4:      0 = #0000 = 0000000000000000
+#0006: GR5:      0 = #0000 = 0000000000000000
+#0006: GR6:      0 = #0000 = 0000000000000000
+#0006: GR7:      0 = #0000 = 0000000000000000
+#0006: SP:      16 = #0010 = 0000000000010000
+#0006: PR:       6 = #0006 = 0000000000000110
+#0006: FR (OF SF ZF): 000
+#0006: Memory::::
+#0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+       -------------------------------------------------------------------------------------
+#0006: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0005 0000 0000 0000 0000 0000 0000
 @end example
 
 @node Register specify, End value, Register and memory, Register and memory
@@ -358,22 +386,27 @@ Executing machine codes
 $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
 #0000: GR1:      0 = #0000 = 0000000000000000
 #0002: GR1:      3 = #0003 = 0000000000000011
-#0004: GR1:      4 = #0004 = 0000000000000100
+#0004: GR1:      5 = #0005 = 0000000000000101
+#0006: GR1:      5 = #0005 = 0000000000000101
 @end example
 
-この内容を、先に出力したアセンブル結果と引き比べてください。
+この内容を、先に出力したアセンブル結果と比較してください。
 次の表のように、PRとGR1、命令行が対応していることがわかります。
 
 @multitable @columnfractions .3 .3 .4
 @item PR @tab GR1 @tab 命令行
 @item #0000
 @tab #0000
+@tab (なし)
 @item #0002
 @tab #0003
 @tab @code{LD GR1,A}
 @item #0004
 @tab #0004
 @tab @code{ADDL GR1,B}
+@item #0006
+@tab #0006
+@tab @code{ST GR1,C}
 @end multitable
 
 @node End value, Step count, Register specify, Register and memory
@@ -381,41 +414,41 @@ $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
 
 @command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
 
-@file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
+@file{addl.casl}でプログラム終了時のGR1の値を確認するには、次のようにします。
 
 @example
 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
-#0004: GR1:      4 = #0004 = 0000000000000100
+#0006: GR1:      5 = #0005 = 0000000000000101
 @end example
 
-@file{sum_10.casl}は、1から10までの整数の和を求めます。
+@file{sum_10.casl}ã\81¯ã\80\81\81\8bã\82\8910ã\81¾ã\81§ã\81®æ\95´æ\95°ã\81®å\92\8cã\82\92æ±\82ã\82\81ã\80\81GR2ã\81«æ ¼ç´\8dã\81\97ã\81¦ã\81\8bã\82\89ã\83¡ã\83¢ã\83ªã\81«ã\82¹ã\83\88ã\82¢ï¼\88æ\9b¸ã\81\8dè¾¼ã\81¿ï¼\89ã\81\97ã\81¾ã\81\99ã\80\82
 
 @example
 $ @kbd{cat sum_10.casl}
 ;;; sum_10.casl
-;;; 出力 GR0: 1から10までの整数をすべて加算した値
+;;; 1から10までの整数をすべて加算した値をメモリーに格納する
 MAIN    START
-        PUSH    0,GR1
-        LAD     GR0,0           ; GR0を初期化
-        LD      GR1,FST         ; GR1に初項を転送
-LOOP    ADDL    GR0,GR1         ; ループ先頭
+        XOR     GR2,GR2         ; GR2を初期化
+        LD      GR1,FST         ; GR1に初項をメモリーから転送
+LOOP    ADDL    GR2,GR1         ; ループ先頭。GR2 <- GR2 + GR1
         ADDL    GR1,STEP        ; GR1 <- GR1 + 公差
         CPL     GR1,LST         ; GR1が末項より大きい場合は終了
         JPL     FIN             ; ↓
         JUMP    LOOP            ; ループ終端
-FIN     POP     GR1
+FIN     ST      GR2,RST         ; GR2の結果をメモリーに転送
         RET
 FST     DC      1               ; 初項
 LST     DC      10              ; 末項
 STEP    DC      1               ; 公差
+RST     DS      1               ; 結果
         END
 @end example
 
-@file{sum_10.casl}ã\81§ã\83\95ã\82¡ã\82¤ã\83«çµ\82äº\86æ\99\82の値を確認するには、次のようにします。
+@file{sum_10.casl}ã\81§ã\83\97ã\83­ã\82°ã\83©ã\83 çµ\82äº\86æ\99\82ã\81®GR2の値を確認するには、次のようにします。
 
 @example
-$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
-#0010: GR0:     55 = #0037 = 0000000000110111 = '7'
+$ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | tail -1}
+#000E: GR2:     55 = #0037 = 0000000000110111 = '7'
 @end example
 
 @node Step count,  , End value, Register and memory
@@ -436,8 +469,8 @@ $ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
 @file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
 
 @example
-$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
-54
+$ @kbd{casl2 -t sum_10.casl | grep 'GR2:' | wc -l}
+53
 @end example
 
 @node Only assemble, Analyze word, Register and memory, Sample usage