CASL2LIBのドキュメント記述内容とテストを編集、再構成
authorj8takagi <j8takagi@nifty.com>
Sun, 5 Dec 2010 14:44:38 +0000 (23:44 +0900)
committerj8takagi <j8takagi@nifty.com>
Sun, 5 Dec 2010 14:45:54 +0000 (23:45 +0900)
42 files changed:
as/casl2lib/Makefile
as/casl2lib/abs.casl
as/casl2lib/addl32.casl
as/casl2lib/diva.casl
as/casl2lib/src_diva/diva.casl [deleted file]
as/casl2lib/src_inl/inl_main.casl [deleted file]
as/casl2lib/src_l2str/l2str_main.casl [deleted file]
as/casl2lib/src_mula/mula_main.casl [deleted file]
as/casl2lib/src_outa/outa_main.casl [deleted file]
as/casl2lib/src_outb/outb_main.casl [deleted file]
as/casl2lib/src_outl/outl_main.casl [deleted file]
as/casl2lib/src_str2l/str2l_main.casl [deleted file]
as/casl2lib/test/divl/divl0/call_divl.casl [new file with mode: 0644]
as/casl2lib/test/inl/cmd [new file with mode: 0644]
doc/casl2lib/Define.mk [new file with mode: 0644]
doc/casl2lib/Define_group.mk [new file with mode: 0644]
doc/casl2lib/Define_test.mk [new file with mode: 0644]
doc/casl2lib/Makefile [new file with mode: 0644]
doc/casl2lib/Test.mk [new file with mode: 0644]
doc/casl2lib/abs/0.txt [new file with mode: 0644]
doc/casl2lib/abs/Makefile [new file with mode: 0644]
doc/casl2lib/abs/call_abs.casl [new file with mode: 0644]
doc/casl2lib/abs/cmd [new file with mode: 0755]
doc/casl2lib/addl32/0.txt [new file with mode: 0644]
doc/casl2lib/addl32/Makefile [new file with mode: 0644]
doc/casl2lib/addl32/call_addl32.casl [new file with mode: 0644]
doc/casl2lib/addl32/cmd [new file with mode: 0755]
doc/casl2lib/diva/0.txt [new file with mode: 0644]
doc/casl2lib/diva/Makefile [new file with mode: 0644]
doc/casl2lib/diva/call_diva.casl [new file with mode: 0644]
doc/casl2lib/diva/cmd [new file with mode: 0755]
doc/casl2lib/divl/0.txt [new file with mode: 0644]
doc/casl2lib/divl/Makefile [new file with mode: 0644]
doc/casl2lib/divl/call_divl.casl [new file with mode: 0644]
doc/casl2lib/divl/cmd [new file with mode: 0755]
doc/casl2lib/inl/0.txt [new file with mode: 0644]
doc/casl2lib/inl/Makefile [new file with mode: 0644]
doc/casl2lib/inl/call_inl.casl [new file with mode: 0644]
doc/casl2lib/inl/cmd [new file with mode: 0755]
doc/casl2lib/inl/in.txt [new file with mode: 0644]
doc/yacasl2.html
doc/yacasl2.texi

index 80a43fe..89b2073 100644 (file)
@@ -1,7 +1,10 @@
 ECHOHEADER = 'echo ";;; *** This file is auto generated. ***"'
-TARGETS = inl.casl l2str.casl mula.casl outa.casl outb.casl outl.casl
+TARGETS = diva.casl inl.casl l2str.casl mula.casl outa.casl outb.casl outl.casl
 .PHONY: all clean
 all: $(TARGETS)
+diva.casl: src_diva/diva_main.casl divl.casl
+       @echo ";;; *** This file is auto generated. ***" >$@; \
+     cat $^ >>$@
 inl.casl: src_inl/inl_main.casl str2l.casl
        @echo ";;; *** This file is auto generated. ***" >$@; \
      cat $^ >>$@
index 35aa20d..be0b922 100644 (file)
@@ -1,5 +1,5 @@
-;;; GR1ã\82\92絶対å\80¤ã\81«å¤\89æ\8f\9bã\81\99ã\82\8b
-;;; å\85¥å\8a\9b GR1:-32768ã\80\9c32767の整数
+;;; GR1ã\82\92符å\8f·ä»\98ã\81\8dæ\95´æ\95°ã\81¨ã\81¿ã\81ªã\81\97ã\80\81絶対å\80¤ã\81«å¤\89æ\8f\9b
+;;; å\85¥å\8a\9b GR1:-32768ã\81\8bã\82\8932767の整数
 ;;; 出力 GR1:入力された整数の絶対値
 ;;;       OF:入力されたGR1が-32768の場合、1
 ;;;       SF:入力されたGR1が負数(-32767〜-1)の場合、1
index 37d2f25..23740bf 100644 (file)
@@ -1,4 +1,4 @@
-;;; 2つの32ビット値を加算する
+;;; 2つの32ビット値を加算する
 ;;; 32ビットの値を、連続する2語の領域に格納
 ;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス
 ;;; 出力 GR0:和の先頭アドレス
@@ -36,8 +36,8 @@ OV      LAD     GR3,=#8000      ; 強制的にオーバーフロー発生
 FIN     LAD     GR0,A           ; GR0 <- A
         RPOP
         RET
-X       DS      1               ; 数値1のアドレス
-Y       DS      1               ; 数値2のアドレス
+X       DS      1               ; 数値1の先頭アドレス
+Y       DS      1               ; 数値2の先頭アドレス
 A       DS      2               ; 和
 LEN     DC      2               ; 数値の語数
         END
index e592709..5e723f5 100644 (file)
@@ -1,7 +1,41 @@
-;;; -32767〜32767の範囲にある整数の割算(筆算方式)を行う
+;;; 符号付き整数の割算を筆算方式で行う
 ;;; 入力 GR1:被除数 GR2:除数
 ;;; 出力 GR0:商 GR3:剰余
-;;; GR2が0の場合は、GR0、GR3とも0になり、オーバーフロー
+;;; 次の場合はオーバーフロー
+;;;     GR1 = -32768; GR2 = -32768; GR2 = 0
+;;;
 DIVA    START
+        PUSH    0,GR1
+        PUSH    0,GR2
+        PUSH    0,GR4
+        XOR     GR0,GR0         ; 商を初期化
+        XOR     GR4,GR4         ; マイナスフラグを初期化
+CHK1    AND     GR1,GR1         ; (GR1 > 0)の場合は、CHK2へジャンプ
+        JPL     CHK2            ; ↓
+        XOR     GR1,ALLON       ; GR1の正負を反転
+        ADDA    GR1,ONE         ; ↓
+        JOV     FIN             ; (GR1 = -32768)の場合は終了
+        XOR     GR4,ONE         ; GR4 <- 1
+CHK2    AND     GR2,GR2         ; (GR1 > 0)の場合は、DIVへジャンプ
+        JPL     DIV             ; ↓
+        XOR     GR2,ALLON       ; GR2の正負を反転
+        ADDA    GR2,ONE         ; ↓
+        JOV     FIN             ; (GR2 = -32768)の場合は終了
+        XOR     GR4,ONE         ; マイナスフラグを反転
+DIV     CALL    DIVL            ; GR0 <- GR1 / GR2; GR3 <- GR1 mod GR2
+        JOV     FIN             ; (GR2 = 0)の場合は終了        
+MIN     AND     GR4,GR4         ; マイナスフラグがオフの場合、終了
+        JZE     FIN             ; ↓
+        XOR     GR0,ALLON       ; GR1の正負を反転
+        ADDA    GR0,ONE         ; ↓
+        XOR     GR3,ALLON       ; GR3の正負を反転
+        ADDA    GR3,ONE         ; ↓
+        JUMP    FIN
+OV      ADDL    GR0,=#8000
+FIN     POP    GR4
+       POP     GR2
+        POP    GR1
         RET
+ONE     DC      1
+ALLON   DC      #FFFF
         END
diff --git a/as/casl2lib/src_diva/diva.casl b/as/casl2lib/src_diva/diva.casl
deleted file mode 100644 (file)
index 3dba44d..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-;;; -32767〜32767の範囲にある整数の割算(筆算方式)を行う
-;;; 入力 GR1:被除数 GR2:除数
-;;; 出力 GR0:商 GR3:剰余
-;;; GR2が0の場合は、GR0、GR3とも0になり、オーバーフロー
-DIVA    START
-        PUSH    0,GR1
-        PUSH    0,GR2
-        PUSH    0,GR4
-        XOR     GR0,GR0         ; 積
-        AND     GR2,GR2         ; (GR2 = 0)の場合、終了
-        JZE     DIVZERO         ; ↓
-        AND     GR1,GR1         ; (GR1 = 0)の場合、終了
-        JZE     FIN             ; ↓
-        XOR     GR4,GR4         ; マイナスフラグ
-CHK1    AND     GR1,GR1         ; (GR1 > 0)の場合は、CHK2へジャンプ
-        JPL     CHK2            ; ↓
-        XOR     GR1,ALLON       ; GR1の正負を反転
-        ADDA    GR1,ONE         ; ↓
-        JOV     FIN             ; (GR1 = -32768)の場合は終了
-        XOR     GR4,ONE         ; GR4 <- 1
-CHK2    AND     GR2,GR2         ; (GR1 > 0)の場合は、LOOPへジャンプ
-        JPL     MUL             ; ↓
-        XOR     GR2,ALLON       ; GR2の正負を反転
-        ADDA    GR2,ONE         ; ↓
-        JOV     FIN             ; (GR2 = -32768)の場合は終了
-        XOR     GR4,ONE         ; マイナスフラグを反転
-DIV     CALL    DIVL            ; GR0 <- GR1 / GR2; GR3 <- GR1 mod GR2
-        JOV     FIN
-MIN     AND     GR4,GR4         ; マイナスフラグがオフの場合、終了
-        JZE     FIN             ; ↓
-        XOR     GR0,ALLON       ; GR1の正負を反転
-        ADDA    GR0,ONE         ; ↓
-        JUMP    FIN
-OV      ADDL    GR0,=#8000
-FIN     RPOP
-        RET
-ONE     DC      1
-ALLON   DC      #FFFF
-        END
diff --git a/as/casl2lib/src_inl/inl_main.casl b/as/casl2lib/src_inl/inl_main.casl
deleted file mode 100644 (file)
index 20237e4..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; 0〜65535の範囲にある整数の入力を受け付ける
-;;; 入力 (SVC)
-;;; 出力 GR1: 入力された数値
-;;;      GR0: 文字列の長さ。入力が数字以外の場合は、#FFFF
-;;;      65536以上の正数が入力された場合はエラー
-INL     START
-        IN      IBUF,ILEN       ; 入力文字列を格納
-        LAD     GR1,IBUF
-        LD      GR2,ILEN
-        CPA     GR2,LENMAX
-        JPL     LENOV
-        CALL    STR2L
-        JOV     FIN
-        LD      GR0,GR2
-        JUMP    FIN
-LENOV   LAD     GR0,#FFFF
-        SRA     GR0,1
-FIN     RET
-ILEN    DS      1
-LENMAX  DC      5
-IBUF    DS      5
-        END
diff --git a/as/casl2lib/src_l2str/l2str_main.casl b/as/casl2lib/src_l2str/l2str_main.casl
deleted file mode 100644 (file)
index 3623c72..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-;;; 数値を10進数の整数を表す文字列として格納
-;;; 入力 GR1: 数値(0〜65535) GR2: 文字列を格納するアドレス
-;;; 出力 GR0: 文字列の長さ
-L2STR   START
-        PUSH    0,GR1
-        PUSH    0,GR3
-        PUSH    0,GR4
-        LAD     GR2,10          ; GR2に10進数の「10」を格納。
-        LAD     GR0,0           ; GR0 <- 0
-        LD      GR4,GR2         ; GR4 <- GR2
-        AND     GR1,GR1         ; GR1をテスト
-        JZE     ZERO            ; GR1が0の場合、ZEROにジャンプ
-        PUSH    0,GR2           ; GR2を退避
-        LAD     GR2,BASE        ; GR2 <- BASE:基数10
-STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
-        JMI     STLST           ; ↓
-        CALL    DIVL            ; GR1とGR2の、商をGR0、剰余をGR3に格納
-        LD      GR1,GR3         ; GR1にGR3をコピー
-        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,0,GR4       ; GR4のアドレス <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        LD      GR1,GR0         ; GR1 <- GR0:商
-        JUMP    STI             ; ループ終端
-STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,0,GR4       ; GR4のアドレス <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        POP     GR2             ; GR2を復元
-        SUBL    GR4,GR2         ; GR4 <- (GR4 - GR2):文字列の長さ
-        JUMP    RV              ; RVへジャンプ
-ZERO    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
-        ST      GR1,0,GR4       ; ↓ GR4のアドレス <- GR1
-        LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
-RV      LD      GR1,GR2         ; 文字列を逆順に並べ替え
-        LD      GR2,GR4         ; ↓
-        CALL    REV             ; ↓
-FIN     LD      GR0,GR2         ; GR0 <- GR2
-        LD      GR2,GR1         ; GR2 <- GR1
-        POP     GR4
-        POP     GR3
-        POP     GR1
-        RET
-BASE    DC      10
-LEN     DS      1
-NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-        END
diff --git a/as/casl2lib/src_mula/mula_main.casl b/as/casl2lib/src_mula/mula_main.casl
deleted file mode 100644 (file)
index 431486a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-;;; -32767〜32767の範囲にある正数のかけ算(筆算方式)を行う
-;;; 入力 GR1:被乗数 GR2:乗数
-;;; 出力 GR0:積
-;;; 被乗数または乗数が-32768の場合は、オーバーフロー
-;;; 積が-32767未満または32767より大きい場合は、GR0は積の下位16ビットになり、オーバーフロー
-MULA    START
-        RPUSH
-        XOR     GR0,GR0         ; 積
-        AND     GR1,GR1         ; (GR1 = 0)の場合、終了
-        JZE     FIN             ; ↓
-        AND     GR2,GR2         ; (GR2 = 0)の場合、終了
-        JZE     FIN             ; ↓
-        LAD     GR3,1           ; 対象ビット
-        XOR     GR4,GR4         ; マイナスフラグ
-CHK1    AND     GR1,GR1         ; (GR1 > 0)の場合は、CHK2へジャンプ
-        JPL     CHK2            ; ↓
-        XOR     GR1,ALLON       ; GR1の正負を反転
-        ADDA    GR1,ONE         ; ↓
-        JOV     FIN             ; (GR1 = -32768)の場合は終了
-        XOR     GR4,ONE         ; GR4 <- 1
-CHK2    AND     GR2,GR2         ; (GR1 > 0)の場合は、LOOPへジャンプ
-        JPL     MUL             ; ↓
-        XOR     GR2,ALLON       ; GR2の正負を反転
-        ADDA    GR2,ONE         ; ↓
-        JOV     FIN             ; (GR2 = -32768)の場合は終了
-        XOR     GR4,ONE         ; マイナスフラグを反転
-MUL     CALL    MULL            ; GR0 <- GR1 * GR2
-        JOV     FIN
-        AND     GR0,GR0
-        JMI     OV
-MIN     AND     GR4,GR4         ; マイナスフラグがオフの場合、終了
-        JZE     FIN             ; ↓
-        XOR     GR0,ALLON       ; GR1の正負を反転
-        ADDA    GR0,ONE         ; ↓
-        JUMP    FIN
-OV      ADDL    GR0,=#8000
-FIN     RPOP
-        RET
-ONE     DC      1
-ALLON   DC      #FFFF
-        END
diff --git a/as/casl2lib/src_outa/outa_main.casl b/as/casl2lib/src_outa/outa_main.casl
deleted file mode 100644 (file)
index 6f8f84d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-;;; GR1に格納された値を、10進数の整数値(-32768〜32767)として表示
-OUTA    START
-        RPUSH
-        LAD     GR2,10          ; GR2に10進数の「10」を格納。
-        LAD     GR0,0           ; GR0 <- 0
-        LAD     GR4,0           ; 負数フラグ。GR1が負数の場合、GR4は1
-        LAD     GR5,0           ; 整数値の長さ
-        AND     GR1,GR1         ; GR1をテスト
-        JZE     ZPRT            ; GR1が0の場合、ZPRTにジャンプ
-        JPL     STI             ; GR1が正数の場合、STIにジャンプ
-        LAD     GR4,1           ; GR1が負数の場合、GR4をオン
-        CALL    ABS             ;                  GR1を正数に変換
-STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
-        JMI     STLST           ; ↓
-        CALL    DIVL            ; GR1とGR2の、商をGR0、剰余をGR3に格納
-        LD      GR1,GR3         ; GR1にGR3をコピー
-        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
-        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
-        LD      GR1,GR0         ; GR0をGR1にコピー
-        JUMP    STI             ; ループ終端
-STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
-        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
-        AND     GR4,GR4         ; 正数の場合
-        JZE     PRT             ; ↓
-        LD      GR1,='-'        ; 負数の場合、「-」をSTR領域に格納
-        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
-        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
-        JUMP    PRT             ; PRTにジャンプ
-ZPRT    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
-        ST      GR1,STR,GR5     ; (STR + GR5) <- GR1
-        LAD     GR5,1,GR5       ; GR5 <- GR5 + 1
-PRT     ST      GR5,LEN         ; LEN <- GR5
-        LD      GR2,LEN         ; GR2にLENの値を格納
-        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
-        CALL    REV             ; 文字列を逆順に並べ替え
-        OUT     STR,LEN         ; 文字列を出力
-        RPOP
-        RET
-STR     DS      17
-LEN     DS      1
-NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-        END
diff --git a/as/casl2lib/src_outb/outb_main.casl b/as/casl2lib/src_outb/outb_main.casl
deleted file mode 100644 (file)
index 91ee4fa..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-;;; GR1に格納された値を、2進数値として表示
-OUTB    START
-        RPUSH
-        LAD     GR2,2           ; GR2に2進数の「2」を格納。
-        LAD     GR0,0           ; GR0 <- 0
-        XOR     GR4,GR4         ; 2進数値の長さ
-        AND     GR1,GR1         ; GR1をテスト
-        JZE     ZERO            ; GR1が0の場合、ZEROにジャンプ
-STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
-        JMI     STLST           ; ↓
-        CALL    DIVL            ; GR1とGR2の、商をGR0、剰余をGR3に格納
-        LD      GR1,GR3         ; GR1にGR3をコピー
-        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR4     ; (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        LD      GR1,GR0         ; GR0をGR1にコピー
-        JUMP    STI             ; ループ終端
-STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR4     ; (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        JUMP    EMB             ; EMBにジャンプ
-ZERO    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
-        ST      GR1,STR,GR4     ; ↓ (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
-EMB     LD      GR1,NCHAR       ; GR1 <- '0'
-EMLOOP  CPA     GR4,DIG         ; ループ先頭。(GR4 = DIG)の場合は、ループ脱出
-        JZE     PRT             ; ↓
-        ST      GR1,STR,GR4     ; ↓ (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
-        JUMP    EMLOOP          ; ループ終端
-PRT     ST      GR4,LEN         ; LEN <- GR4
-        LD      GR2,LEN         ; GR2にLENの値を格納
-        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
-        CALL    REV             ; 文字列を逆順に並べ替え
-        OUT     STR,LEN         ; 文字列を出力
-        RPOP
-        RET
-STR     DS      17
-LEN     DS      1
-NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-DIG     DC      16
-        END
diff --git a/as/casl2lib/src_outl/outl_main.casl b/as/casl2lib/src_outl/outl_main.casl
deleted file mode 100644 (file)
index 881db90..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-;;; GR1に格納された値を、10進数の整数値(0〜65535)として表示
-OUTL    START
-        RPUSH
-        LAD     GR2,10          ; GR2に10進数の「10」を格納。
-        LAD     GR0,0           ; GR0 <- 0
-        XOR     GR4,GR4         ; 整数値の長さ
-        AND     GR1,GR1         ; GR1をテスト
-        JZE     ZERO            ; GR1が0の場合、ZEROにジャンプ
-STI     CPL     GR1,GR2         ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
-        JMI     STLST           ; ↓
-        CALL    DIVL            ; GR1とGR2の、商をGR0、剰余をGR3に格納
-        LD      GR1,GR3         ; GR1にGR3をコピー
-        LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR4     ; (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        LD      GR1,GR0         ; GR0をGR1にコピー
-        JUMP    STI             ; ループ終端
-STLST   LD      GR1,NCHAR,GR1   ; GR1を文字に変換
-        ST      GR1,STR,GR4     ; (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        JUMP    PRT             ; PRTにジャンプ
-ZERO    LD      GR1,NCHAR       ; 「0」をSTR領域に格納
-        ST      GR1,STR,GR4     ; ↓ (STR + GR4) <- GR1
-        LAD     GR4,1,GR4       ; ↓ GR4 <- GR4 + 1
-PRT     ST      GR4,LEN         ; LEN <- GR4
-        LD      GR2,LEN         ; GR2にLENの値を格納
-        LAD     GR1,STR         ; GR1に文字列のアドレスを格納
-        CALL    REV             ; 文字列を逆順に並べ替え
-        OUT     STR,LEN         ; 文字列を出力
-        RPOP
-        RET
-STR     DS      17              ; 符号付き2進数で表記した場合を想定
-LEN     DS      1
-NCHAR   DC      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-        END
diff --git a/as/casl2lib/src_str2l/str2l_main.casl b/as/casl2lib/src_str2l/str2l_main.casl
deleted file mode 100644 (file)
index 70532d3..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-;;; 0〜65535の範囲にある整数の入力を受け付ける
-;;; 10進数の整数を表す文字列を数値に変換
-;;; 入力 GR1: 文字列を格納するアドレス
-;;;      GR2: 文字列の長さ。1-5を想定
-;;; 出力 GR0: 数値(0〜65535)
-;;;           文字列が長過ぎる場合や数値以外の場合は、GR2に#FFFFを格納
-STR2L   START
-        PUSH    0,GR3
-        PUSH    0,GR4
-        XOR     GR0,GR0         ; GR0:初期化
-        AND     GR2,GR2         ; (GR2 = 0)の場合、FINへジャンプ
-        JZE     FIN             ; ↓
-        CPL     GR2,MAXLEN      ; (GR2 > MAXLEN)の場合、LENOVへジャンプ
-        JPL     LENOV           ; ↓
-        ST      GR1,STR         ; STR <- GR1 文字列の開始アドレス
-        ST      GR2,LEN         ; LEN <- GR2
-        LAD     GR2,10          ; GR2:10進数の「10」
-        XOR     GR3,GR3         ; GR3:値の一時格納
-        XOR     GR4,GR4         ; GR4:インデックス
-STOL    CPL     GR4,LEN         ; ループ先頭。(GR4 = LEN)の場合、ループ脱出
-        JZE     CP              ; ↓
-        LD      GR1,STR         ; GR1に、入力文字列中の次の桁を格納
-        ADDL    GR1,GR4         ; ↓
-        LD      GR1,0,GR1       ; ↓
-        CPL     GR1,ZERO        ; (GR1 < '0')の場合、NANへジャンプ
-        JMI     NAN             ; ↓
-        CPL     GR1,NINE        ; (GR1 > '9')の場合、NANへジャンプ
-        JPL     NAN             ; ↓
-        SUBL    GR1,ZERO        ; GR1の文字を、対応する数値に変換
-        ST      GR4,NLEN        ; GR4 <- LEN - NLEN - 1
-        LD      GR4,LEN         ; ↓
-        SUBA    GR4,NLEN        ; ↓
-MUL10   CPA     GR4,=1          ; ループ先頭。GR1 <- 10 ** GR4
-        JZE     NEXT            ; (GR4 = 1)の場合、ループ脱出
-        JMI     NEXT            ; ↓
-        CALL    MULL            ; MULLを呼び出し、GR0 <- GR1 * GR2
-        JOV     FIN             ; ↓
-        LD      GR1,GR0         ; GR1 <- GR0
-        LAD     GR4,-1,GR4      ; GR4 <- GR4 -1
-        JUMP    MUL10           ; ループ終端
-NEXT    LD      GR4,NLEN        ; GR4 <- NLEN。復元
-        ADDL    GR3,GR1         ; GR3 <- GR3 + GR1
-        JOV     FIN             ; ↓
-        LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
-        JUMP    STOL            ; ループ終端
-NAN     LAD     GR2,#FFFF       ; GR2 <- #FFFF
-        JUMP    FIN             ; FINへジャンプ
-CP      LD      GR1,GR3         ; GR0 <- GR3
-        LD      GR0,LEN         ; GR0 <- LEN
-        JUMP    FIN
-LENOV   LAD     GR0,#FFFF
-        SRA     GR0,1
-FIN     POP     GR4
-        POP     GR3
-        RET
-ZERO    DC      '0'
-NINE    DC      '9'
-MAXLEN  DC      10              ; 10桁の数値まで入力可能
-STR     DS      1
-LEN     DS      1
-NLEN    DS      1
-        END
diff --git a/as/casl2lib/test/divl/divl0/call_divl.casl b/as/casl2lib/test/divl/divl0/call_divl.casl
new file mode 100644 (file)
index 0000000..eb5fdea
--- /dev/null
@@ -0,0 +1,18 @@
+;; CASL2LIB > DIVLを呼び出し、65535 / 256 の商と剰余を表示
+MAIN    START
+BEGIN   LD      GR1,A
+        LD      GR2,B
+        CALL    DIVL
+        JOV     ERR
+        LD      GR1,GR0
+        CALL    OUTA
+        LD      GR1,GR3
+        CALL    OUTA
+        JUMP    FIN        
+ERR     OUT     EMSG,ELEN
+FIN     RET
+A       DC      65535
+B       DC      256
+EMSG    DC      'error'
+ELEN   DC      5
+        END
diff --git a/as/casl2lib/test/inl/cmd b/as/casl2lib/test/inl/cmd
new file mode 100644 (file)
index 0000000..9e91fb1
--- /dev/null
@@ -0,0 +1 @@
+casl2 cal_inl.casl $CASL2LIB/inl.casl $CASL2LIB/outl.casl < in.txt
\ No newline at end of file
diff --git a/doc/casl2lib/Define.mk b/doc/casl2lib/Define.mk
new file mode 100644 (file)
index 0000000..efc1aeb
--- /dev/null
@@ -0,0 +1,130 @@
+# autotest.mk > test_template > Define.mk
+# 自動テスト用の変数、マクロ定義
+
+ifndef DEFINE_INCLUDED
+DEFINE_INCLUDED = 1
+
+# 現在の日時
+DATE = $(shell date +"%F %T")
+
+# 現在のディレクトリー
+CURRDIR = $(shell pwd)
+
+# Makefile
+MAKEFILE := Makefile
+
+######################################################################
+# コマンド
+######################################################################
+
+CP ?= cp
+
+CAT ?= cat
+
+MKDIR ?= mkdir
+
+RM ?= rm -f
+
+ECHO ?= echo
+
+TIME ?= /usr/bin/time --quiet
+
+DIFF ?= diff -c
+
+DEV_NULL ?= /dev/null
+
+CHMOD ?= chmod
+
+GREP ?= grep
+
+LINECOUNT ?= wc -l
+
+FIND ?= find
+
+TR ?= tr
+
+EXPR ?= expr
+
+LINK ?= ln -s
+
+######################################################################
+# テストグループとテストでの共通マクロ
+######################################################################
+
+# chk_var_null: 引数がNULLの場合、エラー
+# 用例: $(call chk_var_null,var)
+define chk_var_null
+    $(if $1,,$(error NULL argument))
+endef
+
+# chk_file_ext: 指定されたファイルが実在する場合、エラー
+# 用例: $(call chk_file_ext,file)
+define chk_file_ext
+    $(if $(wildcard $1),$(error $1 exists in $(CURRDIR)))
+endef
+
+# chk_file_notext: 指定されたファイルが実在しない場合、エラー
+# 用例: $(call chk_file_notext,file)
+define chk_file_notext
+    $(if $(wildcard $1),,$(error $1 not exists in $(CURRDIR)))
+endef
+
+######################################################################
+# テストグループのディレクトリー
+######################################################################
+
+# テストグループとテストの変数を定義したMakefile
+DEF_FILE := Define.mk
+
+# テストグループの変数を定義したMakefile
+DEF_GROUP_FILE := Define_group.mk
+
+# テストの変数を定義したMakefile
+DEF_TEST_FILE := Define_test.mk
+
+# テストのターゲットを定義したMakefile
+TEST_MAKEFILE := Test.mk
+
+# すべてのMakefile群
+MAKEFILES := $(DEF_FILE) $(DEF_GROUP_FILE) $(DEF_TEST_FILE) $(TEST_MAKEFILE)
+
+MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file))
+
+# テストごとのMakefileでインクルードするMakefile群
+TEST_MAKEFILES := $(DEF_FILE) $(DEF_TEST_FILE) $(TEST_MAKEFILE)
+
+######################################################################
+# テストのディレクトリー
+######################################################################
+
+# テストコマンドファイル
+CMD_FILE := cmd
+
+# テスト説明ファイル
+DESC_FILE := desc.txt
+
+# テスト想定結果ファイル
+TEST0_FILE := 0.txt
+
+# テスト結果ファイル
+TEST1_FILE := 1.txt
+
+# テストの、想定結果と結果の差分ファイル
+DIFF_FILE := diff.txt
+
+# テストエラーファイル
+ERR_FILE := err.txt
+
+# テストログファイル
+LOG_FILE := test.log
+
+# 実行時間ファイル
+TIME_FILE := time.log
+
+# テスト詳細レポートファイル
+DETAIL_FILE := detail.log
+
+# テストの結果として作成されるファイル群
+TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE)
+
+endif
diff --git a/doc/casl2lib/Define_group.mk b/doc/casl2lib/Define_group.mk
new file mode 100644 (file)
index 0000000..f3cda2c
--- /dev/null
@@ -0,0 +1,95 @@
+######################################################################
+# テストグループのディレクトリー
+# ほかに、Define.mkでも一部定義
+######################################################################
+
+# グループディレクトリー
+GROUP_DIR := $(CURRDIR)
+
+# グループ名。ディレクトリ名から取得
+GROUP := $(notdir $(GROUP_DIR))
+
+# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー
+TESTS = $(notdir $(shell $(FIND) -maxdepth 1 -name "[^A-Z.]*" -type d))
+
+# テストグループログファイル
+GROUP_LOG_FILE := $(shell $(ECHO) $(GROUP) | $(TR) '[a-z]' '[A-Z]').log
+
+# テストグループレポートファイル
+GROUP_REPORT_FILE := Report.log
+
+# テストグループ実行時間ファイル
+GROUP_TIME_FILE := $(shell echo $(GROUP) | $(TR) '[a-z]' '[A-Z]')_time.log
+
+# グループで、テスト結果として作成されるファイル群
+GROUP_RES_FILES := $(GROUP_LOG_FILE) $(GROUP_REPORT_FILE) $(GROUP_TIME_FILE)
+
+# テストごとのログファイル
+TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE))
+
+######################################################################
+# テストグループのマクロ
+######################################################################
+
+# 指定したディレクトリーを作成
+# 用例: $(call create_dir,name)
+define create_dir
+    $(call chk_var_null,$1)
+    $(call chk_file_ext,$1)
+    $(MKDIR) $1
+endef
+
+# リストで指定された親ディレクトリーにあるMakefileをインクルードするMakefileを作成
+# 用例: $(call create_makefile,file,list_include_file)
+define create_makefile
+    $(RM) $1
+    $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; )
+endef
+
+# テストごとのファイルをグループファイルに出力
+# 引数は、テストのリスト、グループファイル、テストファイル
+# 用例: $(call group_log,files_test_log,file_group_log)
+define group_log
+    $(foreach target,$1,$(call group_log_each,$(target),$2))
+endef
+
+# テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル
+# 用例: $(call group_log_each,file_test_log,file_group_log)
+define group_log_each
+    if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi
+    $(ECHO) >>$2;
+
+endef
+
+# 成功したテストの数。テストグループログファイルから取得
+SUCCESS_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | $(LINECOUNT))
+
+# 失敗したテストの数。テストグループログファイルから取得
+FAIL_TEST = $(shell $(GREP) "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | $(LINECOUNT))
+
+# すべてのテストの数
+ALL_TEST = $(shell $(EXPR) $(SUCCESS_TEST) + $(FAIL_TEST))
+
+# テストごとの実行時間ファイル
+TEST_TIME_FILES := $(foreach test,$(TESTS),$(test)/$(TIME_FILE))
+
+# テストの結果を、グループログファイルを元にレポート。
+# 引数は、グループ名、グループログファイル、グループレポートファイル
+# 用例: $(call group_report,name,file_log,file_report)
+define group_report
+    $(ECHO) "$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Detail in $(GROUP_DIR)/$2" >$3;
+    if test $(FAIL_TEST) -eq 0; then $(ECHO) "$1: All tests are succeded." >>$3; fi
+endef
+
+# リストで指定したディレクトリーでmakeを実行
+# 用例: $(call make_tests,list_dir,target)
+define make_tests
+    $(foreach dir,$1,$(call make_test_each,$(dir),$2))
+endef
+
+# 指定したディレクトリーでmakeを実行
+# 用例: $(call make_test_each,tests,target)
+define make_test_each
+    $(MAKE) $2 -sC $1;
+
+endef
diff --git a/doc/casl2lib/Define_test.mk b/doc/casl2lib/Define_test.mk
new file mode 100644 (file)
index 0000000..78394cb
--- /dev/null
@@ -0,0 +1,80 @@
+######################################################################
+# マクロ
+######################################################################
+
+# 引数のファイルをチェックし、内容がない場合は削除
+# 用例: $(call rm_null,file)
+define rm_null
+    if test ! -s $1; then $(RM) $1; fi
+endef
+
+# 説明ファイルの内容を、引数のファイルに出力
+# 用例: $(call desc_log,file_out)
+define desc_log
+    if test -s $(DESC_FILE); then $(CAT) $(DESC_FILE) >>$1; fi
+endef
+
+# テスト実行の経過時間を、ファイルに出力して表示
+# 引数は、テスト名、コマンドファイル、出力ファイル
+# 用例: $(call time_cmd,name,file_cmd,file_out)
+define time_cmd
+    $(call chk_file_notext,$2)
+    $(CHMOD) u+x $2
+    $(TIME) -f"$1: %E" -o $3 ./$2 >$(DEV_NULL) 2>&1
+endef
+
+# テスト実行コマンド。引数は、コマンドファイル、出力ファイル、エラーファイル
+# コマンドファイルを実行し、標準出力を出力ファイルに保存。
+# エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。
+# 用例: $(call exec_cmd,file_cmd,file_out,file_err)
+define exec_cmd
+    $(call chk_file_notext,$1)
+    $(CHMOD) u+x $1
+    ./$1 >>$2 2>$3
+    if test -s $3; then $(CAT) $3 >>$2; fi
+    $(call rm_null,$3)
+endef
+
+# 2つのファイルを比較し、差分ファイルを作成
+# 引数は、2ファイルのリスト、差分ファイル
+# 用例: $(call diff_files,files,file_out)
+define diff_files
+    $(DIFF) $1 >$2 2>&1
+    $(call rm_null,$2)
+endef
+
+# 差分ファイルの内容をログファイルに出力
+# 引数は、テスト名、差分ファイル、ログファイル
+# 用例: $(call test_log,name,file_diff,file_log)
+define test_log
+    $(call desc_log,$3)
+    if test ! -s $2; then RES=Success; else RES=Failure; fi; $(ECHO) "$1: Test $$RES $(DATE)" >>$3
+    $(ECHO) "Detail in $(CURRDIR)/$(DETAIL_FILE)" >>$3
+endef
+
+# NODISPが設定されていない時は、ログファイルを表示
+# 引数は、ログファイル
+# 用例: $(call disp_test_log,file_log)
+define disp_test_log
+    $(if $(NODISP),,$(CAT) $1)
+endef
+
+# ファイル群から、ファイル名とファイルの内容を出力
+# 引数は、対象ファイル群、出力ファイル
+# 用例: $(call report_files,list_file_target,file_out)
+define report_files
+    $(call chk_file_ext,$2)
+    $(foreach tfile,$1,$(call report_file,$(tfile),$2))
+endef
+
+# ファイル名とファイルの内容を出力
+# 引数は、対象ファイル、出力ファイル
+# 用例: $(call report_file,file_target,file_out)
+define report_file
+    $(call chk_var_null,$1)
+    if test -s $1; then $(ECHO) "== $1 ==" >>$2; $(call echo_hr,$2); cat $1 >>$2; $(call echo_hr,$2); $(ECHO) >>$2; fi
+endef
+
+define echo_hr
+    $(ECHO) "----------------------------------------------------------------------" >>$1
+endef
diff --git a/doc/casl2lib/Makefile b/doc/casl2lib/Makefile
new file mode 100644 (file)
index 0000000..e22d03c
--- /dev/null
@@ -0,0 +1,52 @@
+# autotest.mk > template > Group.mk
+# テストグループのMakefile
+#
+# オペレーター
+# make         : すべてのテストを実施し、ログファイルを作成
+# make check   : ↓
+# make create  : TESTNAMEで指定されたテストを新規に作成
+# make set     : すべてのテストの、想定結果を出力
+# make checkeach: すべてのテストを実施
+# make report  : ログファイルから、テストの結果をレポート
+# make clean   : すべてのテストで、"make" で生成されたファイルをクリア
+# make cleanall: すべてのテストで、"make" と "make set" で生成されたファイルをクリア
+
+SHELL = /bin/sh
+
+include Define.mk
+include Define_group.mk
+
+.PHONY: check checkall time create clean cleantime
+
+check checkall: clean $(GROUP_REPORT_FILE)
+       @$(CAT) $(GROUP_REPORT_FILE)
+
+time: cleantime $(GROUP_TIME_FILE)
+       @$(CAT) $(GROUP_TIME_FILE)
+
+create:
+       @$(call create_dir,$(TEST))
+       @$(call create_makefile,$(TEST)/$(MAKEFILE),$(TEST_MAKEFILES))
+
+clean:
+       @$(call make_tests,$(TESTS),$@)
+       @$(RM) $(GROUP_RES_FILES)
+
+cleantime:
+       @$(call make_tests,$(TESTS),$@)
+       @$(RM) $(GROUP_TIME_FILE)
+
+$(GROUP_REPORT_FILE): $(GROUP_LOG_FILE)
+       @$(call group_report,$(GROUP),$^,$@)
+
+$(GROUP_LOG_FILE): $(TEST_LOG_FILES)
+       @$(call group_log,$^,$@)
+
+$(TEST_LOG_FILES):
+       @$(MAKE) $(MAKECMDGOALS) -sC $(dir $@) NODISP=1
+
+$(GROUP_TIME_FILE): $(TEST_TIME_FILES)
+       @$(call group_log,$^,$@)
+
+$(TEST_TIME_FILES):
+       @$(MAKE) time -sC $(dir $@)
diff --git a/doc/casl2lib/Test.mk b/doc/casl2lib/Test.mk
new file mode 100644 (file)
index 0000000..edfa278
--- /dev/null
@@ -0,0 +1,65 @@
+# autotest.mk > test_template > Test.mk
+# 自動テスト用のMakefile
+#
+# 要: Define.mk Define_test.mk
+#
+# オペレーター
+# make         : CMDの標準出力をTEST1_FILEに保存したあと、TEST0_FILEとの差分を比較し、結果をLOG_FILEに出力
+# make check   : ↓
+# make set     : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない
+# make reset   : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き
+# make time    : CMDの実行にかかった時間をTIME_FILEに保存し、出力
+# make cleantime: "make time" で作成されたファイルをクリア
+# make clean   : "make" で作成されたファイルをクリア
+# make cleanall: "make" と "make set" で作成されたファイルをクリア
+
+SHELL = /bin/sh
+
+# テスト名。カレントディレクトリー名から取得
+TEST = $(notdir $(CURRDIR))
+
+.PHONY: check set reset time cleantime clean cleanall
+
+check: clean $(DETAIL_FILE)
+       @$(call disp_test_log,$(LOG_FILE))
+
+checkall: check $(TIME_FILE)
+       @$(CAT) $(TIME_FILE) >>$(LOG_FILE)
+       @$(call disp_test_log,$(LOG_FILE))
+
+set: $(TEST0_FILE)
+       @$(CAT) $^
+
+reset: cleanall $(TEST0_FILE)
+       @$(CAT) $(TEST0_FILE)
+
+time: cleantime $(TIME_FILE)
+
+cleantime:
+       @$(RM) $(TIME_FILE)
+
+clean:
+       @$(RM) $(TEST_RES_FILES)
+
+cleanall: clean
+       @$(RM) $(TEST0_FILE)
+
+$(CMD_FILE):
+       @$(call chk_file_notext,$@)
+       @$(CHMOD) u+x $@
+
+$(TEST0_FILE) $(TEST1_FILE): $(CMD_FILE)
+       @-$(call exec_cmd,$^,$@,$(ERR_FILE))
+
+$(DIFF_FILE): $(TEST0_FILE) $(TEST1_FILE)
+       @$(call chk_file_notext,$(TEST0_FILE))
+       @-$(call diff_files,$^,$@)
+
+$(LOG_FILE): $(DIFF_FILE)
+       @$(call test_log,$(TEST),$^,$@)
+
+$(DETAIL_FILE): $(LOG_FILE)
+       @$(call report_files,$(LOG_FILE) $(CMD_FILE) $(TEST0_FILE) $(ERR_FILE) $(DIFF_FILE) $(TEST1_FILE),$@)
+
+$(TIME_FILE): $(CMD_FILE)
+       @-$(call time_cmd,$(TEST),$^,$@)
diff --git a/doc/casl2lib/abs/0.txt b/doc/casl2lib/abs/0.txt
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/doc/casl2lib/abs/Makefile b/doc/casl2lib/abs/Makefile
new file mode 100644 (file)
index 0000000..e38b63c
--- /dev/null
@@ -0,0 +1,3 @@
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
diff --git a/doc/casl2lib/abs/call_abs.casl b/doc/casl2lib/abs/call_abs.casl
new file mode 100644 (file)
index 0000000..251ee3d
--- /dev/null
@@ -0,0 +1,8 @@
+;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
+MAIN    START
+        LD      GR1,A
+        CALL    ABS
+        CALL    OUTA
+        RET
+A       DC      -1
+        END
diff --git a/doc/casl2lib/abs/cmd b/doc/casl2lib/abs/cmd
new file mode 100755 (executable)
index 0000000..700039d
--- /dev/null
@@ -0,0 +1,3 @@
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_abs.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/outa.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl
diff --git a/doc/casl2lib/addl32/0.txt b/doc/casl2lib/addl32/0.txt
new file mode 100644 (file)
index 0000000..97b23a9
--- /dev/null
@@ -0,0 +1,15 @@
+MAIN    START
+        LAD     GR1,A
+        LAD     GR2,B
+        CALL    ADDL32
+        LD      GR2,GR0
+        LD      GR1,1,GR2
+        CALL    OUTL
+        LD      GR1,0,GR2
+        CALL    OUTL
+        RET
+A       DC      6,10
+B       DC      2,65530
+        END
+4
+9
diff --git a/doc/casl2lib/addl32/Makefile b/doc/casl2lib/addl32/Makefile
new file mode 100644 (file)
index 0000000..e38b63c
--- /dev/null
@@ -0,0 +1,3 @@
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
diff --git a/doc/casl2lib/addl32/call_addl32.casl b/doc/casl2lib/addl32/call_addl32.casl
new file mode 100644 (file)
index 0000000..6072b8b
--- /dev/null
@@ -0,0 +1,13 @@
+MAIN    START
+        LAD     GR1,A
+        LAD     GR2,B
+        CALL    ADDL32
+        LD      GR2,GR0
+        LD      GR1,1,GR2
+        CALL    OUTL
+        LD      GR1,0,GR2
+        CALL    OUTL
+        RET
+A       DC      6,10
+B       DC      2,65530
+        END
diff --git a/doc/casl2lib/addl32/cmd b/doc/casl2lib/addl32/cmd
new file mode 100755 (executable)
index 0000000..ac6c38a
--- /dev/null
@@ -0,0 +1,3 @@
+PATH=../../../..:$PATH
+CASL2LIBDIR=../../../../as/casl2lib
+cat call_addl32.casl && casl2 call_addl32.casl $CASL2LIBDIR/addl32.casl $CASL2LIBDIR/outl.casl
diff --git a/doc/casl2lib/diva/0.txt b/doc/casl2lib/diva/0.txt
new file mode 100644 (file)
index 0000000..bab389d
--- /dev/null
@@ -0,0 +1,2 @@
+-128
+-127
diff --git a/doc/casl2lib/diva/Makefile b/doc/casl2lib/diva/Makefile
new file mode 100644 (file)
index 0000000..e38b63c
--- /dev/null
@@ -0,0 +1,3 @@
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
diff --git a/doc/casl2lib/diva/call_diva.casl b/doc/casl2lib/diva/call_diva.casl
new file mode 100644 (file)
index 0000000..13acb85
--- /dev/null
@@ -0,0 +1,18 @@
+;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
+MAIN    START
+BEGIN   LD      GR1,A
+        LD      GR2,B
+        CALL    DIVA
+        JOV     ERR
+        LD      GR1,GR0
+        CALL    OUTA
+        LD      GR1,GR3
+        CALL    OUTA
+        JUMP    FIN
+ERR     OUT     EMSG,ELEN
+FIN     RET
+A       DC      -32767
+B       DC      255
+EMSG    DC      'error'
+ELEN    DC      5
+        END
diff --git a/doc/casl2lib/diva/cmd b/doc/casl2lib/diva/cmd
new file mode 100755 (executable)
index 0000000..c758964
--- /dev/null
@@ -0,0 +1,3 @@
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_diva.casl $CASL2LIBDIR/diva.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outa.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/rev.casl
diff --git a/doc/casl2lib/divl/0.txt b/doc/casl2lib/divl/0.txt
new file mode 100644 (file)
index 0000000..130f552
--- /dev/null
@@ -0,0 +1,2 @@
+256
+254
diff --git a/doc/casl2lib/divl/Makefile b/doc/casl2lib/divl/Makefile
new file mode 100644 (file)
index 0000000..e38b63c
--- /dev/null
@@ -0,0 +1,3 @@
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
diff --git a/doc/casl2lib/divl/call_divl.casl b/doc/casl2lib/divl/call_divl.casl
new file mode 100644 (file)
index 0000000..2347a43
--- /dev/null
@@ -0,0 +1,18 @@
+;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
+MAIN    START
+BEGIN   LD      GR1,A
+        LD      GR2,B
+        CALL    DIVL
+        JOV     ERR
+        LD      GR1,GR0
+        CALL    OUTL
+        LD      GR1,GR3
+        CALL    OUTL
+        JUMP    FIN        
+ERR     OUT     EMSG,ELEN
+FIN     RET
+A       DC      65534
+B       DC      255
+EMSG    DC      'error'
+ELEN   DC      5
+        END
diff --git a/doc/casl2lib/divl/cmd b/doc/casl2lib/divl/cmd
new file mode 100755 (executable)
index 0000000..9936525
--- /dev/null
@@ -0,0 +1,3 @@
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl $CASL2LIBDIR/rev.casl
diff --git a/doc/casl2lib/inl/0.txt b/doc/casl2lib/inl/0.txt
new file mode 100644 (file)
index 0000000..a3de2d7
--- /dev/null
@@ -0,0 +1,14 @@
+0
+1
+2
+10
+12
+32767
+32768
+65535
+Over 65535
+Over 65535
+Not A Number
+Not A Number
+12345
+Str too long. Stop
diff --git a/doc/casl2lib/inl/Makefile b/doc/casl2lib/inl/Makefile
new file mode 100644 (file)
index 0000000..e38b63c
--- /dev/null
@@ -0,0 +1,3 @@
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
diff --git a/doc/casl2lib/inl/call_inl.casl b/doc/casl2lib/inl/call_inl.casl
new file mode 100644 (file)
index 0000000..28c6a9c
--- /dev/null
@@ -0,0 +1,25 @@
+;;; casl2 inl.casl ../casl2lib/inl.casl ../casl2lib/outl.casl
+MAIN    START
+LOOP    CALL    INL             ; GR1に数値、GR0に文字列の長さ
+        JOV     OV
+        AND     GR0,GR0
+        JZE     FIN
+        CPL     GR0,=#FFFF
+        JZE     NAN
+        CALL    OUTL
+        JUMP    LOOP
+OV      CPL     GR0,=#FFFF
+        JZE     LENOV
+        OUT     OVMSG,MLEN1
+        JUMP    LOOP
+NAN     OUT     NANMSG,MLEN2
+        JUMP    LOOP
+LENOV   OUT     LENOVMSG,MLEN3
+FIN     RET
+OVMSG   DC      'Over 65535'
+MLEN1   DC      10
+NANMSG  DC      'Not A Number'
+MLEN2   DC      12
+LENOVMSG DC     'Str too long. Stop'
+MLEN3   DC      18
+        END
diff --git a/doc/casl2lib/inl/cmd b/doc/casl2lib/inl/cmd
new file mode 100755 (executable)
index 0000000..b17a5b0
--- /dev/null
@@ -0,0 +1,3 @@
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 -M 720 call_inl.casl $CASL2LIBDIR/inl.casl $CASL2LIBDIR/outl.casl $CASL2LIBDIR/str2l.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl $CASL2LIBDIR/mull.casl <in.txt
diff --git a/doc/casl2lib/inl/in.txt b/doc/casl2lib/inl/in.txt
new file mode 100644 (file)
index 0000000..b6b862a
--- /dev/null
@@ -0,0 +1,15 @@
+0
+1
+2
+10
+12
+32767
+32768
+65535
+65536
+90000
+-1
+NOTNU
+12345
+100000
+1234
index 47d47b5..6dcc251 100644 (file)
@@ -121,7 +121,12 @@ pre.example em {
 <li><a href="#Build">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</a>
 <li><a href="#Simple-Test">2.5 <kbd>casl2</kbd>の実行テスト</a>
 <li><a href="#Detail-Test">2.6 詳細なテスト</a>
-<li><a href="#Path-Setting">2.7 環境変数<code>PATH</code>の設定</a>
+<li><a href="#Environment">2.7 環境変数の設定</a>
+<ul>
+<li><a href="#Environment">シェルの確認</a>
+<li><a href="#Environment"><code>PATH</code>にYACASL2のディレクトリを追加</a>
+<li><a href="#Environment"><code>CASL2LIB</code>の設定</a>
+</li></ul>
 </li></ul>
 <li><a name="toc_Usage" href="#Usage">3 YACASL2の使い方</a>
 <ul>
@@ -164,38 +169,38 @@ pre.example em {
 <li><a href="#ABS">依存する副プログラム</a>
 <li><a href="#ABS">使用例</a>
 </li></ul>
-<li><a href="#ADDL32">5.2 <kbd>ADDL32</kbd> - <samp><span class="file">addl32.casl</span></samp></a>
-<ul>
-<li><a href="#ADDL32">入力</a>
-<li><a href="#ADDL32">出力</a>
-<li><a href="#ADDL32">使用例</a>
-<li><a href="#ADDL32">依存する副プログラム</a>
-</li></ul>
-<li><a href="#DIVA">5.3 <kbd>DIVA</kbd> -<samp><span class="file">diva.casl</span></samp></a>
+<li><a href="#DIVA">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></a>
 <ul>
 <li><a href="#DIVA">入力</a>
 <li><a href="#DIVA">出力</a>
 <li><a href="#DIVA">依存する副プログラム</a>
+<li><a href="#DIVA">使用例</a>
 </li></ul>
-<li><a href="#DIVL">5.4 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></a>
+<li><a href="#DIVL">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></a>
 <ul>
 <li><a href="#DIVL">入力</a>
 <li><a href="#DIVL">出力</a>
 <li><a href="#DIVL">依存する副プログラム</a>
 <li><a href="#DIVL">使用例</a>
 </li></ul>
-<li><a href="#INL">5.5 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></a>
-<li><a href="#L2STR">5.6 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></a>
-<li><a href="#MAX">5.7 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></a>
-<li><a href="#MINIM">5.8 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></a>
-<li><a href="#MULA">5.9 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></a>
-<li><a href="#MULL">5.10 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></a>
-<li><a href="#OUTA">5.11 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></a>
-<li><a href="#OUTB">5.12 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></a>
-<li><a href="#OUTD_005fQ15">5.13 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></a>
-<li><a href="#OUTL">5.14 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></a>
-<li><a href="#REV">5.15 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></a>
-<li><a href="#STR2L">5.16 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></a>
+<li><a href="#INL">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></a>
+<ul>
+<li><a href="#INL">入力</a>
+<li><a href="#INL">出力</a>
+<li><a href="#INL">依存する副プログラム</a>
+<li><a href="#INL">使用例</a>
+</li></ul>
+<li><a href="#L2STR">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></a>
+<li><a href="#MAX">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></a>
+<li><a href="#MINIM">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></a>
+<li><a href="#MULA">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></a>
+<li><a href="#MULL">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></a>
+<li><a href="#OUTA">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></a>
+<li><a href="#OUTB">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></a>
+<li><a href="#OUTD_005fQ15">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></a>
+<li><a href="#OUTL">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></a>
+<li><a href="#REV">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></a>
+<li><a href="#STR2L">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></a>
 </li></ul>
 </li></ul>
 </div>
@@ -259,7 +264,7 @@ YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試
 <a href="http://github.com/j8takagi/YACASL2">GitHub/j8takagi/YACASL2</a>の<a href="http://github.com/j8takagi/YACASL2/downloads">ダウンロードページ</a>
 </blockquote>
 
- <p>続けて、対応する<samp><span class="file">md5sum</span></samp>ファイルをダウンロードします(2010年3月6日現在、<samp><span class="file">j8takagi-YACASL2-6323ce4.tar.gz.md5sum</span></samp>)
+ <p>続けて、対応する<samp><span class="file">md5sum</span></samp>ファイルをダウンロードします。
 
 <p><a name="Verify"></a>
 
@@ -336,24 +341,42 @@ YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試
   /dumpword/Test.log
   All tests are succeded.
 </pre>
- <p><a name="Path-Setting"></a>
+ <p><a name="Environment"></a>
 
-<h3 class="section">2.7 環境変数<code>PATH</code>の設定</h3>
+<h3 class="section">2.7 環境変数の設定</h3>
 
-<p>環境変数<code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでも<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。
+<p>環境変数を設定することで、YACASL2が使いやすくなります。環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されます。
+するときは、
+環境変数<code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでも<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。また、
 
- <p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
+<h4 class="unnumberedsubsec">シェルの確認</h4>
+
+<p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
 
 <pre class="example">  $ <kbd>echo $SHELL</kbd>
   /bin/bash
 </pre>
- <p>現在もっとも多く使われているシェルは、BASHでしょう。BASHでは、次のコマンドを実行すると環境変数<code>PATH</code>にYACASL2のディレクトリが追加されます。
+ <p>現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を記載します。
+
+<h4 class="unnumberedsubsec"><code>PATH</code>にYACASL2のディレクトリを追加</h4>
+
+<p><code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
 
 <pre class="example">  $ <kbd>PATH=$PATH:~/yacasl2 &amp;&amp; export PATH</kbd>
 </pre>
- <p>シェルの初期設定ファイルに上記のコマンドを追加すれば、今後ログインした後は自動的にどのディレクトリでも <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルのため、次のコマンドで追加されます。
+ <p>BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルです。次のコマンドで追加できます。
 
 <pre class="example">  $ <kbd>echo ’PATH=$PATH:~/yacasl2 &amp;&amp; export PATH’ &gt;&gt;~/.bashrc</kbd>
+</pre>
+ <h4 class="unnumberedsubsec"><code>CASL2LIB</code>の設定</h4>
+
+<p>環境変数<code>CASL2LIB</code>を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
+
+<pre class="example">  $ <kbd>CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB</kbd>
+</pre>
+ <p>BASHの初期設定ファイル<samp><span class="file">.bashrc</span></samp>には、次のコマンドで追加できます。
+
+<pre class="example">  $ <kbd> echo 'CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB' &gt;&gt;~/.bashrc</kbd>
 </pre>
  <p><a name="Usage"></a>
 
@@ -665,12 +688,12 @@ YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試
 <pre class="example">  $ <kbd>dumpword 72</kbd>
       72:     72 = #0048 = 0000000001001000 = 'H'
 </pre>
- <p>マイナスの数は、次のように指定します。
+ <p>マイナスの数は、次のように<kbd>--</kbd>を付けて指定します。
 
 <pre class="example">  $ <kbd>dumpword -- -72</kbd>
      -72:    -72 = #FFB8 = 1111111110111000
 </pre>
- <p>16進数は、次のように指定します。
+ <p>16é\80²æ\95°ã\81¯ã\80\81次ã\81®ã\82\88ã\81\86ã\81«æ¬¡ã\81®ã\82\88ã\81\86ã\81«<kbd>'</kbd>ã\81§å\9b²ã\81¿<kbd>#</kbd>ã\82\92ä»\98ã\81\91ã\81¦æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82
 
 <pre class="example">  $ <kbd>dumpword '#0048'</kbd>
    #0048:     72 = #0048 = 0000000001001000 = 'H'
@@ -739,25 +762,53 @@ YACASL2のコマンドとオプションについて解説します。
      <dl>
 <dt><samp><span class="option">-s</span></samp><dt><samp><span class="option">--source</span></samp><dd>CASLファイルの内容を表示します。
 
-     <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を表示し、ほかの作業を続行します。
+     <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
 
-     <br><dt><samp><span class="option">-L</span></samp><dt><samp><span class="option">--labelonly</span></samp><dd>ラベルの一覧を表示して終了します。
+     <pre class="example">       &lt;プログラム名&gt;.&lt;ラベル名&gt; ---&gt; &lt;アドレスの16進数表現&gt;
+</pre>
+     <br><dt><samp><span class="option">-L</span></samp><dt><samp><span class="option">--labelonly</span></samp><dd><samp><span class="option">-l</span></samp>と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
 
      <br><dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--assembledetail</span></samp><dd>アセンブル詳細結果を表示し、ほかの作業を続行します。
 
-     <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--show-all</span></samp><dd>アセンブル詳細結果を表示して終了します。
+     <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--assembledetailonly</span></samp><dd>アセンブル詳細結果を表示して終了します。
+
+     <br><dt><samp><span class="option">-o&lt;OBJECTFILE&gt;</span></samp><dt><samp><span class="option">--assembleout&lt;OBJECTFILE&gt;</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
+
+     <br><dt><samp><span class="option">-O[&lt;OBJECTFILE&gt;]</span></samp><dt><samp><span class="option">--assembleoutonly[&lt;OBJECTFILE&gt;]</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、終了します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
+
+     <br><dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>プログラム実行中のレジスタの値を次の形式で表示します。<code>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
+
+     <pre class="example">       &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; = &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
+</pre>
+          <ul>
+<li><code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;値の16進数表現&gt;</code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
+
+          <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
+
+          <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+</ul>
+
+     <p>表示されるレジスタには、次の種類があります。
 
-     <br><dt><samp><span class="option">-o&lt;OBJECTFILE&gt;</span></samp><dt><samp><span class="option">--assembleout</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
+          <dl>
+<dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
 
-     <br><dt><samp><span class="option">-O&lt;OBJECTFILE&gt;</span></samp><dt><samp><span class="option">--assembleoutonly</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、終了します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
+          <br><dt><code>SP</code><dd>スタックポインタ
 
-     <br><dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数を表示するので、算術演算の結果を確認する場合に使えます。
+          <br><dt><code>PR</code><dd>プログラムレジスタ
 
-     <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じく、実行時のレジスタをトレースします。<samp><span class="option">-t</span></samp>と異なり0〜65,535の範囲の整数を表示するので、論理演算の結果を確認する場合に使えます。
+          <br><dt><code>FR</code><dd>フラグレジスタ
+</dl>
+
+     <p>例えば、次のように表示されます。
+
+     <pre class="example">       #0002: GR1:      3 = #0003 = 0000000000000011
+</pre>
+     <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じように、プログラム実行中のレジスタの値を表示します。ただし、<samp><span class="option">-t</span></samp>と異なり、<code>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
 
      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
 
-     <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>ã\82¢ã\82»ã\83³ã\83\96ã\83«ã\81\8aã\82\88ã\81³å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>ã\82\92\80\9c65,535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82ºã\81¯512です。
+     <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>ã\82¢ã\82»ã\83³ã\83\96ã\83«ã\81\8aã\82\88ã\81³å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>ã\82\92\81\8bã\82\8965535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81512です。
 
      <br><dt><samp><span class="option">-C &lt;CLOCKS&gt;</span></samp><dt><samp><span class="option">--clocks &lt;CLOCKS&gt;</span></samp><dd>実行時のクロック周波数<samp><span class="option">&lt;CLOCKS&gt;</span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
 
@@ -780,15 +831,41 @@ YACASL2のコマンドとオプションについて解説します。
 <p><kbd>comet2</kbd>は、次のオプションを指定できます。
 
      <dl>
-<dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数が表示されるので、算術演算の結果を確認する場合に使えます。
+<dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>プログラム実行中のレジスタの値を次の形式で表示します。<code>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
+
+     <pre class="example">       &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; = &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
+</pre>
+          <ul>
+<li><code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;値の16進数表現&gt;</code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
+
+          <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
+
+          <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+</ul>
+
+     <p>例えば、次のように表示されます。
+
+     <pre class="example">       #0002: GR1:      3 = #0003 = 0000000000000011
+</pre>
+     <p>表示されるレジスタには、次の種類があります。
 
-     <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じく、実行時のレジスタをトレースします。<samp><span class="option">-t</span></samp>と異なり0〜65,535の範囲の整数を表示するので、論理演算の結果を確認する場合に使えます。
+          <dl>
+<dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
+
+          <br><dt><code>SP</code><dd>スタックポインタ
+
+          <br><dt><code>PR</code><dd>プログラムレジスタ
+
+          <br><dt><code>FR</code><dd>フラグレジスタ
+</dl>
+
+     <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じように、プログラム実行中のレジスタの値を表示します。ただし、<samp><span class="option">-t</span></samp>と異なり、<code>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
 
      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
 
-     <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>ã\82\92\80\9c65,535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82ºã\81¯512です。
+     <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>ã\82\92\81\8bã\82\8965535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81512です。
 
-     <br><dt><samp><span class="option">-C &lt;CLOCKS&gt;</span></samp><dt><samp><span class="option">--clocks &lt;CLOCKS&gt;</span></samp><dd>実行時のクロック周波数<samp><span class="option">&lt;CLOCKS&gt;</span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5,000,000です。
+     <br><dt><samp><span class="option">-C &lt;CLOCKS&gt;</span></samp><dt><samp><span class="option">--clocks &lt;CLOCKS&gt;</span></samp><dd>実行時のクロック周波数<samp><span class="option">&lt;CLOCKS&gt;</span></samp>を0より大きい整数で指定します。指定しない場合、5000000です。
 
      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>comet2</kbd>の使用方法を表示して終了します。
 </dl>
@@ -798,7 +875,7 @@ YACASL2のコマンドとオプションについて解説します。
 <h3 class="section">4.3 <kbd>dumpword</kbd></h3>
 
 <p><a name="index-dumpword-6"></a><a name="index-dumpword-7"></a>
-<kbd>dumpword</kbd>は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより-32,768〜32,767または0〜65,535の範囲です。オプションなしの場合は、-32,768〜32,767です。
+<kbd>dumpword</kbd>は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
 
 <pre class="example">  $ <kbd>dumpword 10</kbd>
 </pre>
@@ -824,22 +901,22 @@ YACASL2のコマンドとオプションについて解説します。
 
 <h3 class="section">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></h3>
 
-<p>å\85¥å\8a\9bã\81\95ã\82\8cã\81\9fæ\95´æ\95°ã\82\92絶対å\80¤ã\81«å¤\89æ\8f\9bã\81\97ã\81¦å\87ºå\8a\9b
+<p>GR1ã\82\92符å\8f·ä»\98ã\81\8dæ\95´æ\95°ã\81¨ã\81¿ã\81ªã\81\97ã\80\81絶対å\80¤ã\81«å¤\89æ\8f\9b
 
 <h4 class="unnumberedsubsec">入力</h4>
 
      <dl>
-<dt><var>GR1</var><dd>-32768〜32767の整数
+<dt><code>GR1</code><dd>符号付き整数
 </dl>
 
 <h4 class="unnumberedsubsec">出力</h4>
 
      <dl>
-<dt><var>GR1</var><dd>入力された整数の絶対値
+<dt><code>GR1</code><dd>入力された値の絶対値
 
-     <br><dt><var>OF</var><dd>入力されたGR1が-32768の場合、1
+     <br><dt><code>OF</code><dd>入力された値が-32768の場合、1
 
-     <br><dt><var>SF</var><dd>入力されたGR1が負数(-32767〜-1)の場合、1
+     <br><dt><code>SF</code><dd>入力された値が負数(-32767から-1)の場合、1
 </dl>
 
 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
@@ -848,259 +925,240 @@ YACASL2のコマンドとオプションについて解説します。
 
 <h4 class="unnumberedsubsec">使用例</h4>
 
-<pre class="example"><pre class="verbatim">  ;;; ABSを呼び出す
+<pre class="example"><pre class="verbatim">  ;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
   MAIN    START
-          LAD     GR2,0
-  MLOOP   CPA     GR2,MLEN
-          JZE     MFIN
-          LD      GR1,MVAL,GR2
-          CALL    OUTA
+          LD      GR1,A
           CALL    ABS
-          JOV     PUTOV
-          JMI     PUTM
-          OUT     PLUS,=1
-          JUMP    PUTD
-  PUTM    OUT     MINUS,=1
-          JUMP    PUTD
-  PUTOV   OUT     OV,=2
-  PUTD    CALL    OUTA
-          OUT     SEP,MLEN
-          LAD     GR2,1,GR2
-          JUMP    MLOOP
-  MFIN    RET
-  MVAL    DC      12,-12,1,-1,32767,-32767,0,-32768
-  MLEN    DC      8
-  SEP     DC      '--------'
-  PLUS    DC      '+'
-  MINUS   DC      '-'
-  OV      DC      'OV'
+          CALL    OUTA
+          RET
+  A       DC      -1
           END
 </pre></pre>
-<pre class="example"><pre class="verbatim">  ../../../../casl2 abs.casl ../../../../as/casl2lib/outa.casl
-  12
-  +
-  12
-  --------
-  -12
-  -
-  12
-  --------
+<pre class="example">  $ <kbd>casl2 call_abs.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/outa.casl
+    $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl</kbd>
   1
-  +
-  1
-  --------
-  -1
-  -
-  1
-  --------
-  32767
-  +
-  32767
-  --------
-  -32767
-  -
-  32767
-  --------
-  0
-  +
-  0
-  --------
-  -32768
-  OV
-  -32768
-  --------
-</pre></pre>
- <p><a name="ADDL32"></a>
+</pre>
+ <p><a name="DIVA"></a>
 
-<h3 class="section">5.2 <kbd>ADDL32</kbd> - <samp><span class="file">addl32.casl</span></samp></h3>
+<h3 class="section">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></h3>
 
-<p>32ビットの値を、連続する2語の領域に格納
+<p>符号付き整数の割算を筆算方式で行う
 
 <h4 class="unnumberedsubsec">入力</h4>
 
      <dl>
-<dt><var>GR1</var><dd>32ビット値1の先頭アドレス
+<dt><code>GR1</code><dd>被除数
 
-     <br><dt><var>GR2</var><dd>32ビット値2の先頭アドレス
+     <br><dt><code>GR2</code><dd>除数
 </dl>
 
 <h4 class="unnumberedsubsec">出力</h4>
 
      <dl>
-<dt><var>GR0</var><dd>和の先頭アドレス
+<dt><code>GR0</code><dd>商
+
+     <br><dt><code>GR3</code><dd>剰余
+
+     <br><dt><code>OF</code><dd>次の場合、1
+          <ul>
+<li>GR2が0
 
-     <br><dt><var>OF</var><dd>上位アドレスでオーバーフローした場合、1
+          <li>GR1が-32768
 
-     <br><dt><var>SF</var><dd>和が負数(-32767〜-1)の場合、1
+          <li>GR2が-32768
+</ul>
+
+     <br><dt><code>SF</code><dd>商が負数(-32767から-1)の場合、1
 
-     <br><dt><var>ZF</var><dd>和が0の場合、1
+     <br><dt><code>ZF</code><dd>商が0の場合、1
 </dl>
 
+<h4 class="unnumberedsubsec">依存する副プログラム</h4>
+
+     <ul>
+<li><code>DIVL</code>
+</ul>
+
 <h4 class="unnumberedsubsec">使用例</h4>
 
-<pre class="example"><pre class="verbatim">  MAIN    START
-          LAD     GR1,A
-          LAD     GR2,B
-          CALL    ADDL32
-          LD      GR2,GR0
-          LD      GR1,1,GR2
-          CALL    OUTL
-          LD      GR1,0,GR2
-          CALL    OUTL
-          RET
-  A       DC      6,10
-  B       DC      2,65530
+<pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
+  MAIN    START
+  BEGIN   LD      GR1,A
+          LD      GR2,B
+          CALL    DIVA
+          JOV     ERR
+          LD      GR1,GR0
+          CALL    OUTA
+          LD      GR1,GR3
+          CALL    OUTA
+          JUMP    FIN
+  ERR     OUT     EMSG,ELEN
+  FIN     RET
+  A       DC      -32767
+  B       DC      255
+  EMSG    DC      'error'
+  ELEN    DC      5
           END
 </pre></pre>
-<pre class="example">  4
-  9
+<pre class="example">  $ <kbd>casl2 call_diva.casl $CASL2LIBDIR/diva.casl $CASL2LIBDIR/divl.casl
+    $CASL2LIBDIR/outa.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/rev.casl</kbd>
+  -128
+  -127
 </pre>
- <h4 class="unnumberedsubsec">依存する副プログラム</h4>
-
-<p>なし
+ <p><a name="DIVL"></a>
 
-<p><a name="DIVA"></a>
+<h3 class="section">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></h3>
 
-<h3 class="section">5.3 <kbd>DIVA</kbd> -<samp><span class="file">diva.casl</span></samp></h3>
-
-<p>-32,767〜32,767の範囲にある整数の割算(筆算方式)を行う
+<p>符号なし整数の割算を筆算方式で行う
 
 <h4 class="unnumberedsubsec">入力</h4>
 
      <dl>
-<dt><var>GR1</var><dd>被除数
+<dt><code>GR1</code><dd>被除数
 
-     <br><dt><var>GR2</var><dd>除数
+     <br><dt><code>GR2</code><dd>除数
 </dl>
 
 <h4 class="unnumberedsubsec">出力</h4>
 
      <dl>
-<dt><var>GR0</var><dd>商
+<dt><code>GR0</code><dd>商
 
-     <br><dt><var>GR3</var><dd>剰余
+     <br><dt><code>GR3</code><dd>剰余
 
-     <br><dt><var>OF</var><dd>除数が0の場合、1
+     <br><dt><code>OF</code><dd>GR2が0の場合、1
 
-     <br><dt><var>SF</var><dd>商が負数(-32767〜-1)の場合、1
+     <br><dt><code>SF</code><dd>商が32768から65535の場合、1
 
-     <br><dt><var>ZF</var><dd>商が0の場合、1
+     <br><dt><code>ZF</code><dd>商が0の場合、1
 </dl>
 
 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
 
-     <ul>
-<li><kbd>DIVL</kbd>
-</ul>
+<p>なし
 
-<!-- @unnumberedsubsec 使用例 -->
-<!-- @iftex -->
-<!-- @cartouche -->
-<!-- @end iftex -->
-<!-- @example -->
-<!-- @verbatiminclude ../as/casl2lib/test/diva/diva.casl -->
-<!-- @end example -->
-<!-- @iftex -->
-<!-- @end cartouche -->
-<!-- @end iftex -->
-<!-- @iftex -->
-<!-- @cartouche -->
-<!-- @end iftex -->
-<!-- @example -->
-<!-- @verbatiminclude ../as/casl2lib/test/diva/0.txt -->
-<!-- @end example -->
-<!-- @iftex -->
-<!-- @end cartouche -->
-<!-- @end iftex -->
-<p><a name="DIVL"></a>
-
-<h3 class="section">5.4 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></h3>
-
-<p>0〜65,535の範囲にある整数の割算(筆算方式)を行う
+<h4 class="unnumberedsubsec">使用例</h4>
+
+<pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
+  MAIN    START
+  BEGIN   LD      GR1,A
+          LD      GR2,B
+          CALL    DIVL
+          JOV     ERR
+          LD      GR1,GR0
+          CALL    OUTL
+          LD      GR1,GR3
+          CALL    OUTL
+          JUMP    FIN        
+  ERR     OUT     EMSG,ELEN
+  FIN     RET
+  A       DC      65534
+  B       DC      255
+  EMSG    DC      'error'
+  ELEN DC      5
+          END
+</pre></pre>
+<pre class="example">  $ <kbd>casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl
+    $CASL2LIBDIR/rev.casl</kbd>
+  256
+  254
+</pre>
+ <p><a name="INL"></a>
+
+<h3 class="section">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></h3>
+
+<p>符号なし整数の入力を受け付ける
 
 <h4 class="unnumberedsubsec">入力</h4>
 
      <dl>
-<dt><var>GR1</var><dd>被除数
-
-     <br><dt><var>GR2</var><dd>除数
+<dt><code>標準入力</code><dd>符号なし整数
 </dl>
 
 <h4 class="unnumberedsubsec">出力</h4>
 
      <dl>
-<dt><var>GR0</var><dd>商
-
-     <br><dt><var>GR3</var><dd>剰余
-
-     <br><dt><var>OF</var><dd>除数が0の場合、1
+<dt><code>GR1</code><dd>入力された符号なし整数
 
-     <br><dt><var>SF</var><dd>商が32,768〜65535の場合、1
-
-     <br><dt><var>ZF</var><dd>商が0の場合、1
+     <br><dt><code>GR0</code><dd>文字列の長さ。数字以外が入力された場合は<code>#FFFF</code>
 </dl>
 
 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
 
-<p>なし
+     <ul>
+<li><code>STR2L</code>
+</ul>
 
 <h4 class="unnumberedsubsec">使用例</h4>
 
-<pre class="example"><pre class="verbatim">  MAIN    START
-  BEGIN   LAD     GR1,101
-          LAD     GR2,10
+<pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
+  MAIN    START
+  BEGIN   LD      GR1,A
+          LD      GR2,B
           CALL    DIVL
-          RET
+          JOV     ERR
+          LD      GR1,GR0
+          CALL    OUTL
+          LD      GR1,GR3
+          CALL    OUTL
+          JUMP    FIN        
+  ERR     OUT     EMSG,ELEN
+  FIN     RET
+  A       DC      65534
+  B       DC      255
+  EMSG    DC      'error'
+  ELEN DC      5
           END
 </pre></pre>
-<p><a name="INL"></a>
-
-<h3 class="section">5.5 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></h3>
-
-<p><a name="L2STR"></a>
+<pre class="example">  $ <kbd>casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl
+    $CASL2LIBDIR/rev.casl</kbd>
+  256
+  254
+</pre>
+ <p><a name="L2STR"></a>
 
-<h3 class="section">5.6 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></h3>
+<h3 class="section">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></h3>
 
 <p><a name="MAX"></a>
 
-<h3 class="section">5.7 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></h3>
+<h3 class="section">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></h3>
 
 <p><a name="MINIM"></a>
 
-<h3 class="section">5.8 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></h3>
+<h3 class="section">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></h3>
 
 <p><a name="MULA"></a>
 
-<h3 class="section">5.9 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></h3>
+<h3 class="section">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></h3>
 
 <p><a name="MULL"></a>
 
-<h3 class="section">5.10 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></h3>
+<h3 class="section">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></h3>
 
 <p><a name="OUTA"></a>
 
-<h3 class="section">5.11 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></h3>
+<h3 class="section">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></h3>
 
 <p><a name="OUTB"></a>
 
-<h3 class="section">5.12 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></h3>
+<h3 class="section">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></h3>
 
 <p><a name="OUTD_Q15"></a>
 <a name="OUTD_005fQ15"></a>
 
-<h3 class="section">5.13 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></h3>
+<h3 class="section">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></h3>
 
 <p><a name="OUTL"></a>
 
-<h3 class="section">5.14 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></h3>
+<h3 class="section">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></h3>
 
 <p><a name="REV"></a>
 
-<h3 class="section">5.15 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></h3>
+<h3 class="section">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></h3>
 
 <p><a name="STR2L"></a>
 
-<h3 class="section">5.16 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></h3>
+<h3 class="section">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></h3>
 
 </body></html>
 
index a097830..e79d678 100644 (file)
@@ -110,7 +110,7 @@ YACASL2をインストールするには、Linux上で次の作業をします
 * Build::    @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
 * Simple Test::    @kbd{casl2}の実行テスト
 * Detail Test::    詳細なテスト
-* Path Setting::    環境変数@code{PATH}の設定
+* Environment::    環境変数の設定
 @end menu
 
 @node Download, Verify, Install, Install
@@ -127,7 +127,7 @@ YACASL2をインストールするには、Linux上で次の作業をします
 @end cartouche
 @end iftex
 
-続けて、対応する@file{md5sum}ファイルをダウンロードします(2010年3月6日現在、@file{j8takagi-YACASL2-6323ce4.tar.gz.md5sum})
+続けて、対応する@file{md5sum}ファイルをダウンロードします。
 
 @node Verify, Expand, Download, Install
 @section YACASL2ファイルの検証
@@ -191,7 +191,7 @@ $ @kbd{./casl2 as/hello.casl}
 Hello, World!
 @end example
 
-@node Detail Test, Path Setting, Simple Test, Install
+@node Detail Test, Environment, Simple Test, Install
 @section 詳細なテスト
 
 次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
@@ -209,10 +209,16 @@ All tests are succeded.
 All tests are succeded.
 @end example
 
-@node Path Setting,, Detail Test, Install
-@section 環境変数@code{PATH}の設定
+@node Environment,, Detail Test, Install
+@section 環境変数の設定
 
-環境変数@code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでも@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。
+環境変数を設定することで、YACASL2が使いやすくなります。環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されます。
+するときは、
+環境変数@code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでも@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。また、
+
+
+
+@unnumberedsubsec シェルの確認
 
 環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
 
@@ -221,18 +227,38 @@ $ @kbd{echo $SHELL}
 /bin/bash
 @end example
 
-現在もっとも多く使われているシェルは、BASHでしょう。BASHでは、次のコマンドを実行すると環境変数@code{PATH}にYACASL2のディレクトリが追加されます。
+現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を記載します。
+
+@unnumberedsubsec @code{PATH}にYACASL2のディレクトリを追加
+
+@code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
 
 @example
 $ @kbd{PATH=$PATH:~/yacasl2 && export PATH}
 @end example
 
-シェルの初期設定ファイルに上記のコマンドを追加すれば、今後ログインした後は自動的にどのディレクトリでも @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。BASHではホームディレクトリにある@file{.bashrc}が初期設定ファイルのため、次のコマンドで追加されます。
+BASHではホームディレクトリにある@file{.bashrc}が初期設定ファイルです。次のコマンドで追加できます。
 
 @example
 $ @kbd{echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc}
 @end example
 
+
+@unnumberedsubsec @code{CASL2LIB}の設定
+
+環境変数@code{CASL2LIB}を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
+
+@example
+$ @kbd{CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB}
+@end example
+
+BASHの初期設定ファイル@file{.bashrc}には、次のコマンドで追加できます。
+
+@example
+$ @kbd{ echo 'CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB' >>~/.bashrc}
+@end example
+
+
 @node Usage, Command Manual, Install, Top
 @chapter YACASL2の使い方
 YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある@file{as}ディレクトリからコピーして作成することもできます。
@@ -586,14 +612,14 @@ $ @kbd{dumpword 72}
     72:     72 = #0048 = 0000000001001000 = 'H'
 @end example
 
-マイナスの数は、次のように指定します。
+マイナスの数は、次のように@kbd{--}を付けて指定します。
 
 @example
 $ @kbd{dumpword -- -72}
    -72:    -72 = #FFB8 = 1111111110111000
 @end example
 
-16進数は、次のように指定します。
+16é\80²æ\95°ã\81¯ã\80\81次ã\81®ã\82\88ã\81\86ã\81«æ¬¡ã\81®ã\82\88ã\81\86ã\81«@kbd{'}ã\81§å\9b²ã\81¿@kbd{#}ã\82\92ä»\98ã\81\91ã\81¦æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82
 
 @example
 $ @kbd{dumpword '#0048'}
@@ -686,36 +712,77 @@ CASLファイルの内容を表示します。
 
 @item -l
 @itemx --label
-ラベルの一覧を表示し、ほかの作業を続行します。
+ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
+
+@example
+<プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
+@end example
 
 @item -L
 @itemx --labelonly
-ラベルの一覧を表示して終了します。
+@option{-l}と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
 
 @item -a
 @itemx --assembledetail
 アセンブル詳細結果を表示し、ほかの作業を続行します。
 
 @item -A
-@itemx --show-all
+@itemx --assembledetailonly
 アセンブル詳細結果を表示して終了します。
 
 @item -o<OBJECTFILE>
-@itemx --assembleout
+@itemx --assembleout<OBJECTFILE>
 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
 
-@item -O<OBJECTFILE>
-@itemx --assembleoutonly
+@item -O[<OBJECTFILE>]
+@itemx --assembleoutonly[<OBJECTFILE>]
 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
 
 @item -t
 @itemx --trace
 @itemx --tracearithmetic
-実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数を表示するので、算術演算の結果を確認する場合に使えます。
+プログラム実行中のレジスタの値を次の形式で表示します。@code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
+
+@example
+<PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
+@end example
+
+@itemize
+@item
+@code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。範囲は、@code{#0000}から@code{#FFFF}です
+
+@item
+@code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
+
+@item
+@code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+@end itemize
+
+表示されるレジスタには、次の種類があります。
+
+@table @code
+@item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
+汎用レジスタ
+
+@item SP
+スタックポインタ
+
+@item PR
+プログラムレジスタ
+
+@item FR
+フラグレジスタ
+@end table
+
+例えば、次のように表示されます。
+
+@example
+#0002: GR1:      3 = #0003 = 0000000000000011
+@end example
 
 @item -T
 @itemx --tracelogical
-@option{-t}ã\81¨å\90\8cã\81\98ã\81\8fã\80\81å®\9fè¡\8cæ\99\82ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\82\92ã\83\88ã\83¬ã\83¼ã\82¹ã\81\97ã\81¾ã\81\99ã\80\82@option{-t}ã\81¨ç\95°ã\81ªã\82\8a\80\9c65,535ã\81®ç¯\84å\9b²ã\81®æ\95´æ\95°ã\82\92表示ã\81\99ã\82\8bã\81®ã\81§ã\80\81è«\96ç\90\86æ¼\94ç®\97ã\81®çµ\90æ\9e\9cã\82\92確èª\8dã\81\99ã\82\8bå ´å\90\88ã\81«ä½¿ã\81\88ã\81¾す。
+@option{-t}ã\81¨å\90\8cã\81\98ã\82\88ã\81\86ã\81«ã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 å®\9fè¡\8c中ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\81®å\80¤ã\82\92表示ã\81\97ã\81¾ã\81\99ã\80\82ã\81\9fã\81 ã\81\97ã\80\81@option{-t}ã\81¨ç\95°ã\81ªã\82\8aã\80\81@code{<å\80¤ã\81®10é\80²æ\95°è¡¨ç\8f¾>}ã\81¯ç¬¦å\8f·ã\81®ä»\98ã\81\8bã\81ªã\81\8410é\80²æ\95°ã\81§ã\81\99ã\80\82å\80¤ã\81®ç¯\84å\9b²ã\81¯0ã\81\8bã\82\8965535ã\81§す。
 
 @item -d
 @itemx --dump
@@ -723,7 +790,7 @@ CASLファイルの内容を表示します。
 
 @item -M <MEMORYSIZE>
 @itemx --memorysize <MEMORYSIZE>
\82¢ã\82»ã\83³ã\83\96ã\83«ã\81\8aã\82\88ã\81³å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º@option{<MEMORYSIZE>}ã\82\92\80\9c65,535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82ºã\81¯512です。
\82¢ã\82»ã\83³ã\83\96ã\83«ã\81\8aã\82\88ã\81³å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º@option{<MEMORYSIZE>}ã\82\92\81\8bã\82\8965535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81512です。
 
 @item -C <CLOCKS>
 @itemx --clocks <CLOCKS>
@@ -757,11 +824,48 @@ $ @kbd{comet2 hello.o}
 @item -t
 @itemx --trace
 @itemx --tracearithmetic
-実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数が表示されるので、算術演算の結果を確認する場合に使えます。
+プログラム実行中のレジスタの値を次の形式で表示します。@code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
+
+@example
+<PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
+@end example
+
+@itemize
+@item
+@code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。範囲は、@code{#0000}から@code{#FFFF}です
+
+@item
+@code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
+
+@item
+@code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+@end itemize
+
+例えば、次のように表示されます。
+
+@example
+#0002: GR1:      3 = #0003 = 0000000000000011
+@end example
+
+表示されるレジスタには、次の種類があります。
+
+@table @code
+@item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
+汎用レジスタ
+
+@item SP
+スタックポインタ
+
+@item PR
+プログラムレジスタ
+
+@item FR
+フラグレジスタ
+@end table
 
 @item -T
 @itemx --tracelogical
-@option{-t}ã\81¨å\90\8cã\81\98ã\81\8fã\80\81å®\9fè¡\8cæ\99\82ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\82\92ã\83\88ã\83¬ã\83¼ã\82¹ã\81\97ã\81¾ã\81\99ã\80\82@option{-t}ã\81¨ç\95°ã\81ªã\82\8a\80\9c65,535ã\81®ç¯\84å\9b²ã\81®æ\95´æ\95°ã\82\92表示ã\81\99ã\82\8bã\81®ã\81§ã\80\81è«\96ç\90\86æ¼\94ç®\97ã\81®çµ\90æ\9e\9cã\82\92確èª\8dã\81\99ã\82\8bå ´å\90\88ã\81«ä½¿ã\81\88ã\81¾す。
+@option{-t}ã\81¨å\90\8cã\81\98ã\82\88ã\81\86ã\81«ã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 å®\9fè¡\8c中ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\81®å\80¤ã\82\92表示ã\81\97ã\81¾ã\81\99ã\80\82ã\81\9fã\81 ã\81\97ã\80\81@option{-t}ã\81¨ç\95°ã\81ªã\82\8aã\80\81@code{<å\80¤ã\81®10é\80²æ\95°è¡¨ç\8f¾>}ã\81¯ç¬¦å\8f·ã\81®ä»\98ã\81\8bã\81ªã\81\8410é\80²æ\95°ã\81§ã\81\99ã\80\82å\80¤ã\81®ç¯\84å\9b²ã\81¯0ã\81\8bã\82\8965535ã\81§す。
 
 @item -d
 @itemx --dump
@@ -769,11 +873,11 @@ $ @kbd{comet2 hello.o}
 
 @item -M <MEMORYSIZE>
 @itemx --memorysize <MEMORYSIZE>
-å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º@option{<MEMORYSIZE>}ã\82\92\80\9c65,535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82ºã\81¯512です。
+å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º@option{<MEMORYSIZE>}ã\82\92\81\8bã\82\8965535ã\81®ç¯\84å\9b²ã\81§æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\80\81512です。
 
 @item -C <CLOCKS>
 @itemx --clocks <CLOCKS>
-実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、クロック周波数は5,000,000です。
+実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、5000000です。
 
 @item -h
 @itemx --help
@@ -786,7 +890,7 @@ $ @kbd{comet2 hello.o}
 @pindex dumpword
 @cindex dumpword
 
-@kbd{dumpword}は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより-32,768〜32,767または0〜65,535の範囲です。オプションなしの場合は、-32,768〜32,767です。
+@kbd{dumpword}は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
 
 @example
 $ @kbd{dumpword 10}
@@ -818,7 +922,6 @@ $ @kbd{dumpword 10}
 
 @menu
 * ABS::
-* ADDL32::
 * DIVA::
 * DIVL::
 * INL::
@@ -835,28 +938,26 @@ $ @kbd{dumpword 10}
 * STR2L::
 @end menu
 
-@node ABS
+@node ABS, DIVA, CASL2LIB Manual, CASL2LIB Manual
 @section @kbd{ABS} - @file{abs.casl}
-å\85¥å\8a\9bã\81\95ã\82\8cã\81\9fæ\95´æ\95°ã\82\92絶対å\80¤ã\81«å¤\89æ\8f\9bã\81\97ã\81¦å\87ºå\8a\9b
+GR1ã\82\92符å\8f·ä»\98ã\81\8dæ\95´æ\95°ã\81¨ã\81¿ã\81ªã\81\97ã\80\81絶対å\80¤ã\81«å¤\89æ\8f\9b
 
 @unnumberedsubsec 入力
-@table @var
-
+@table @code
 @item GR1
--32768〜32767の整数
+符号付き整数
 @end table
 
 @unnumberedsubsec 出力
-@table @var
-
+@table @code
 @item GR1
-入力された整数の絶対値
+入力されたの絶対値
 
 @item OF
-入力されたGR1が-32768の場合、1
+入力されたが-32768の場合、1
 
 @item SF
-入力されたGR1が負数(-32767〜-1)の場合、1
+入力された値が負数(-32767から-1)の場合、1
 @end table
 
 @unnumberedsubsec 依存する副プログラム
@@ -864,60 +965,79 @@ $ @kbd{dumpword 10}
 
 @unnumberedsubsec 使用例
 @example
-@verbatiminclude ../as/casl2lib/test/abs/abs.casl
+@verbatiminclude casl2lib/abs/call_abs.casl
 @end example
 
 @example
-@verbatiminclude ../as/casl2lib/test/abs/0.txt
+$ @kbd{casl2 call_abs.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/outa.casl
+  $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl}
+1
 @end example
 
-@node ADDL32
-@section @kbd{ADDL32} - @file{addl32.casl}
-32ビットの値を、連続する2語の領域に格納
+@node DIVA, DIVL, ABS, CASL2LIB Manual
+@section @kbd{DIVA} - @file{diva.casl}
+符号付き整数の割算を筆算方式で行う
 
 @unnumberedsubsec 入力
-@table @var
+@table @code
 @item GR1
-32ビット値1の先頭アドレス
+被除数
 
 @item GR2
-32ビット値2の先頭アドレス
+除数
 @end table
 
 @unnumberedsubsec 出力
-@table @var
+@table @code
 @item GR0
-和の先頭アドレス
+商
+
+@item GR3
+剰余
 
 @item OF
-上位アドレスでオーバーフローした場合、1
+次の場合、1
+@itemize
+@item
+GR2が0
+
+@item
+GR1が-32768
+
+@item
+GR2が-32768
+@end itemize
 
 @item SF
\92\8cã\81\8cè² æ\95°(-32767ã\80\9c-1)の場合、1
\95\86ã\81\8cè² æ\95°(-32767ã\81\8bã\82\89-1)の場合、1
 
 @item ZF
\92\8cが0の場合、1
\95\86が0の場合、1
 @end table
 
+@unnumberedsubsec 依存する副プログラム
+@itemize
+@item @code{DIVL}
+@end itemize
+
 @unnumberedsubsec 使用例
 @example
-@verbatiminclude ../as/casl2lib/test/addl32/addl32_1.casl
+@verbatiminclude casl2lib/diva/call_diva.casl
 @end example
 
 @example
-4
-9
+$ @kbd{casl2 call_diva.casl $CASL2LIBDIR/diva.casl $CASL2LIBDIR/divl.casl
+  $CASL2LIBDIR/outa.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/rev.casl}
+-128
+-127
 @end example
 
-@unnumberedsubsec 依存する副プログラム
-なし
-
-@node DIVA
-@section @kbd{DIVA} -@file{diva.casl}
--32,767〜32,767の範囲にある整数の割算(筆算方式)を行う
+@node DIVL, INL, DIVA, CASL2LIB Manual
+@section @kbd{DIVL} - @file{divl.casl}
+符号なし整数の割算を筆算方式で行う
 
 @unnumberedsubsec 入力
-@table @var
+@table @code
 @item GR1
 被除数
 
@@ -926,7 +1046,7 @@ $ @kbd{dumpword 10}
 @end table
 
 @unnumberedsubsec 出力
-@table @var
+@table @code
 @item GR0
 商
 
@@ -934,82 +1054,67 @@ $ @kbd{dumpword 10}
 剰余
 
 @item OF
-除数が0の場合、1
+GR2が0の場合、1
 
 @item SF
-商が負数(-32767〜-1)の場合、1
+商が32768から65535の場合、1
 
 @item ZF
 商が0の場合、1
 @end table
 
 @unnumberedsubsec 依存する副プログラム
-@itemize
-@item @kbd{DIVL}
-@end itemize
-
-@c @unnumberedsubsec 使用例
-@c @iftex
-@c @cartouche
-@c @end iftex
-@c @example
-@c @verbatiminclude ../as/casl2lib/test/diva/diva.casl
-@c @end example
-@c @iftex
-@c @end cartouche
-@c @end iftex
-
-@c @iftex
-@c @cartouche
-@c @end iftex
-@c @example
-@c @verbatiminclude ../as/casl2lib/test/diva/0.txt
-@c @end example
-@c @iftex
-@c @end cartouche
-@c @end iftex
-
-@node DIVL
-@section @kbd{DIVL} - @file{divl.casl}
-0〜65,535の範囲にある整数の割算(筆算方式)を行う
+なし
 
-@unnumberedsubsec 入力
-@table @var
-@item GR1
-被除数
+@unnumberedsubsec 使用例
+@example
+@verbatiminclude casl2lib/divl/call_divl.casl
+@end example
 
-@item GR2
-除数
-@end table
+@example
+$ @kbd{casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl
+  $CASL2LIBDIR/rev.casl}
+256
+254
+@end example
 
-@unnumberedsubsec 出力
-@table @var
-@item GR0
-商
+@node INL, L2STR, DIVL, CASL2LIB Manual
+@section @kbd{INL} - @file{inl.casl}
 
-@item GR3
-剰余
+符号なし整数の入力を受け付ける
 
-@item OF
-除数が0の場合、1
+@unnumberedsubsec 入力
+@table @code
+@item 標準入力
+符号なし整数
+@end table
 
-@item SF
-商が32,768〜65535の場合、1
+@unnumberedsubsec 出力
+@table @code
+@item GR1
+入力された符号なし整数
 
-@item ZF
-商が0の場合、1
+@item GR0
+文字列の長さ。数字以外が入力された場合は@code{#FFFF}
 @end table
 
 @unnumberedsubsec 依存する副プログラム
-なし
+@itemize
+@item
+@code{STR2L}
+@end itemize
 
 @unnumberedsubsec 使用例
 @example
-@verbatiminclude ../as/casl2lib/test/divl/divl0/divl0.casl
+@verbatiminclude casl2lib/divl/call_divl.casl
 @end example
 
-@node INL
-@section @kbd{INL} - @file{inl.casl}
+@example
+$ @kbd{casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl
+  $CASL2LIBDIR/rev.casl}
+256
+254
+@end example
 
 @node L2STR
 @section @kbd{L2STR} - @file{l2str.casl}