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 $^ >>$@
-;;; 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
-;;; 2つの32ビット数値を加算する
+;;; 2つの32ビット値を加算する
;;; 32ビットの値を、連続する2語の領域に格納
;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス
;;; 出力 GR0:和の先頭アドレス
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
-;;; -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
+++ /dev/null
-;;; -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
+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 数値を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
+++ /dev/null
-;;; -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
+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 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
+++ /dev/null
-;;; 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
--- /dev/null
+;; 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
--- /dev/null
+casl2 cal_inl.casl $CASL2LIB/inl.casl $CASL2LIB/outl.casl < in.txt
\ No newline at end of file
--- /dev/null
+# 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
--- /dev/null
+######################################################################
+# テストグループのディレクトリー
+# ほかに、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
--- /dev/null
+######################################################################
+# マクロ
+######################################################################
+
+# 引数のファイルをチェックし、内容がない場合は削除
+# 用例: $(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
--- /dev/null
+# 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 $@)
--- /dev/null
+# 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),$^,$@)
--- /dev/null
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
--- /dev/null
+;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
+MAIN START
+ LD GR1,A
+ CALL ABS
+ CALL OUTA
+ RET
+A DC -1
+ END
--- /dev/null
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_abs.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/outa.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl
--- /dev/null
+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
--- /dev/null
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
--- /dev/null
+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
--- /dev/null
+PATH=../../../..:$PATH
+CASL2LIBDIR=../../../../as/casl2lib
+cat call_addl32.casl && casl2 call_addl32.casl $CASL2LIBDIR/addl32.casl $CASL2LIBDIR/outl.casl
--- /dev/null
+-128
+-127
--- /dev/null
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
--- /dev/null
+;; 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
--- /dev/null
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_diva.casl $CASL2LIBDIR/diva.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outa.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/rev.casl
--- /dev/null
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
--- /dev/null
+;; 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
--- /dev/null
+PATH=../../..:$PATH
+CASL2LIBDIR=../../../as/casl2lib
+casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl $CASL2LIBDIR/rev.casl
--- /dev/null
+0
+1
+2
+10
+12
+32767
+32768
+65535
+Over 65535
+Over 65535
+Not A Number
+Not A Number
+12345
+Str too long. Stop
--- /dev/null
+include ../Define.mk
+include ../Define_test.mk
+include ../Test.mk
--- /dev/null
+;;; 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
--- /dev/null
+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
--- /dev/null
+0
+1
+2
+10
+12
+32767
+32768
+65535
+65536
+90000
+-1
+NOTNU
+12345
+100000
+1234
<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>
<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>
<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>
/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 && 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 && export PATH’ >>~/.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 && export CASL2LIB</kbd>
+</pre>
+ <p>BASHの初期設定ファイル<samp><span class="file">.bashrc</span></samp>には、次のコマンドで追加できます。
+
+<pre class="example"> $ <kbd> echo 'CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB' >>~/.bashrc</kbd>
</pre>
<p><a name="Usage"></a>
<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'
<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"> <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
+</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<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleout<OBJECTFILE></span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
+
+ <br><dt><samp><span class="option">-O[<OBJECTFILE>]</span></samp><dt><samp><span class="option">--assembleoutonly[<OBJECTFILE>]</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></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><値の10進数表現></code>は符号の付いた10進数です。範囲は-32768から32767です。
+
+ <pre class="example"> <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
+</pre>
+ <ul>
+<li><code><PR値の16進数表現></code>と<code><値の16進数表現></code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
+
+ <li><code><値の2進数表現></code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
+
+ <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+</ul>
+
+ <p>表示されるレジスタには、次の種類があります。
- <br><dt><samp><span class="option">-o<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleout</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></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<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleoutonly</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></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><値の10進数表現></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 <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></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"><MEMORYSIZE></span></samp>ã\82\920ã\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 <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></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"><MEMORYSIZE></span></samp>ã\82\920ã\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 <CLOCKS></span></samp><dt><samp><span class="option">--clocks <CLOCKS></span></samp><dd>実行時のクロック周波数<samp><span class="option"><CLOCKS></span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
<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><値の10進数表現></code>は符号の付いた10進数です。範囲は-32768から32767です。
+
+ <pre class="example"> <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
+</pre>
+ <ul>
+<li><code><PR値の16進数表現></code>と<code><値の16進数表現></code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
+
+ <li><code><値の2進数表現></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><値の10進数表現></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 <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></span></samp><dd>å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option"><MEMORYSIZE></span></samp>ã\82\920ã\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 <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></span></samp><dd>å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º<samp><span class="option"><MEMORYSIZE></span></samp>ã\82\920ã\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 <CLOCKS></span></samp><dt><samp><span class="option">--clocks <CLOCKS></span></samp><dd>実行時のクロック周波数<samp><span class="option"><CLOCKS></span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5,000,000です。
+ <br><dt><samp><span class="option">-C <CLOCKS></span></samp><dt><samp><span class="option">--clocks <CLOCKS></span></samp><dd>実行時のクロック周波数<samp><span class="option"><CLOCKS></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>
<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>
<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>
<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>
* 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
@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ファイルの検証
Hello, World!
@end example
-@node Detail Test, Path Setting, Simple Test, Install
+@node Detail Test, Environment, Simple Test, Install
@section 詳細なテスト
次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
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 シェルの確認
環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
/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}ディレクトリからコピーして作成することもできます。
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'}
@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\8a0ã\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
@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\920ã\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\920ã\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>
@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\8a0ã\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
@item -M <MEMORYSIZE>
@itemx --memorysize <MEMORYSIZE>
-å®\9fè¡\8cæ\99\82ã\81®ã\83¡ã\83¢ã\83ªã\82µã\82¤ã\82º@option{<MEMORYSIZE>}ã\82\920ã\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\920ã\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
@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}
@menu
* ABS::
-* ADDL32::
* DIVA::
* DIVL::
* INL::
* 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 依存する副プログラム
@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
被除数
@end table
@unnumberedsubsec 出力
-@table @var
+@table @code
@item GR0
商
剰余
@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}