+++ /dev/null
-MAIN START
-BEGIN LAD GR1,3
- ADDA GR1,A
- RET
-A DC 1
- END
+++ /dev/null
-MAIN START BEGIN
-BEGIN LAD GR1,32766
- ADDA GR1,A
- RET
-A DC 29
- END
+++ /dev/null
-MAIN START BEGIN
-BEGIN LD GR0,A
- ADDL GR0,B
- ST GR0,C
- RET
-A DC 32766
-B DC 29
-C DS 1
- END
+++ /dev/null
-MAIN START BEGIN
-BEGIN LD GR1,A
- ADDL GR1,B
- ADDL GR1,C
- ADDL GR1,D
- RET
-A DC 32765
-B DC 4
-C DC 32764
-D DC 7
- END
+++ /dev/null
-MAIN START
-BEGIN LAD GR1,#8001
- LAD GR2,#3521
- AND GR1,GR2
- RET
- END
+++ /dev/null
-MAIN START
-BEGIN LAD GR0,#3444
- AND GR0,A
- RET
-A DC #00DD
- END
+++ /dev/null
-MAIN START
-BEGIN LAD GR0,#3444
- AND GR0,=#00DD
- RET
- END
+++ /dev/null
-MAIN START
-BEGIN LAD GR0,#0460
- AND GR0,=#00FF
- RET
- END
+++ /dev/null
-; リテラルに「=' '」を指定した場合のテスト
-MAIN START
- LD GR1,=' '
- ST GR1,BUF
- OUT BUF,LEN
- RET
-BUF DS 1
-LEN DC 1
- END
+++ /dev/null
-;;; 2つの32ビット数値を加算する
-;;; 32ビットの値は、連続する2語の領域に格納
-MAIN START BEGIN
-BEGIN LAD GR1,1 ; GR1にAの下位語を転送
- LD GR1,A,GR1 ; ↓
- LAD GR2,1 ; GR2にBの下位語を転送
- LD GR2,B,GR2 ; ↓
- ADDL GR1,GR2 ; GR1 <- GR1 + GR2
- JOV CARR ; オーバーフロー時は、CARRにジャンプ
- JUMP STL
-CARR LAD GR2,1 ; Cの上位語に1を格納
- ST GR2,C ; ↓
-STL LAD GR2,1 ; Cの下位語にGR1の内容を格納
- ST GR1,C,GR2 ; ↓
- LD GR1,A ; GR1にAの上位語を転送
- ADDL GR1,B ; GR1 <- GR1 + B
- ADDL GR1,C ; GR1 <- GR1 + C
- RET
-A DC 0,65534
-B DC 0,65535
-C DS 2
- END
+++ /dev/null
-COUNT1 START
-; 入力 GR1:検索する語
-; 処理 GR1中の'1'のビットの個数を求める
-; 出力 GR0:GR1中の'1'のビットの個数
- PUSH 0,GR1
- PUSH 0,GR2
- SUBA GR2,GR2
- AND GR1,GR1
- JZE RETURN
-MORE LAD GR2,1,GR2
- LAD GR0,-1,GR1
- AND GR1,GR0
- JNZ MORE
-RETURN LD GR0,GR2
- POP GR2
- POP GR1
- RET
- END
+++ /dev/null
-;;; 入力された数値をGR0で返す
-INL START
- RPUSH
- IN IBUF,ILEN
- LAD GR1,0
- LAD GR2,10 ; 10進数の「10」
- LAD GR3,0 ; 値の一時格納
- LAD GR4,0 ; インデックス
-ISTOL CPL GR4,ILEN ; ループ先頭。(GR4 = ILEN)の場合、ループ脱出
- JZE ICP ; ↓
- LD GR1,IBUF,GR4
- CPL GR1,INCHR ; (GR1 < (INCHR = '0'))の場合、IOVへジャンプ
- JMI IOV ; ↓
- CPL GR1,='9' ; (GR1 > '9')の場合、IOVへジャンプ
- JPL IOV ; ↓
- SUBL GR1,INCHR
- ST GR4,NLEN
- LD GR4,ILEN
- SUBA GR4,NLEN
-MUL10 CPL GR4,=1
- JZE ISNEXT
- CALL MULL
- LD GR1,GR0
- LAD GR4,-1,GR4
- JUMP MUL10
-ISNEXT LD GR4,NLEN
- ADDL GR3,GR1
- LAD GR4,1,GR4
- JUMP ISTOL ; ループ終端
-IOV LAD GR0,1
- ADDL GR0,=#FFFF
- JUMP IFIN
-ICP LD GR0,GR3
-IFIN RPOP
- RET
-INCHR DC '0123456789'
-IBUF DS 5
-ILEN DS 1
-NLEN DS 1
- END
-;GR1の値とGR2の値の積をGR0に格納
-MULL START
- RPUSH
- LAD GR3,1 ; 対象ビット
- LAD GR0,0 ; 積
-MLOOP CPL GR3,GR2 ; ループ先頭。(GR2 = GR3)の場合、ループ脱出
- JPL MFIN ; ↓
- PUSH 0,GR3 ; GR2の、GR3が示したビットが0の場合、MNEXTへジャンプ
- AND GR3,GR2 ; ↓
- POP GR3 ; ↓
- JZE MNEXT ; ↓
- ADDL GR0,GR1 ; GR0 <- GR0 + GR1
- JOV MFIN ; オーバーフローした場合、ループ脱出
-MNEXT SLL GR3,1 ; GR3を1回左シフト
- SLL GR1,1 ; GR1を1回左シフト
- JOV MFIN ; オーバーフローした場合、ループ脱出
- JUMP MLOOP ; ループ終端
-MFIN RPOP
- RET
- 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 LOOP ; ↓
- XOR GR2,ALLON ; GR2の正負を反転
- ADDA GR2,ONE ; ↓
- JOV FIN ; (GR2 = -32768)の場合は終了
- XOR GR4,ONE ; マイナスフラグを反転
-LOOP PUSH 0,GR3 ; ループ先頭。GR2のビット中でGR3の示したものが0の場合、NEXTへジャンプ
- AND GR3,GR2 ; ↓
- POP GR3 ; ↓
- JZE NEXT ; ↓
- ADDA GR0,GR1 ; GR0 <- GR0 + GR1
- JOV FIN ; オーバーフローした場合、終了
-NEXT SLA GR3,1 ; GR3を1回左シフト
- AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出
- JZE MIN ; ↓
- CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出
- JPL MIN ; ↓
- SLA GR1,1 ; GR1を1回左シフト
- JOV FIN ; オーバーフローした場合、終了
- JUMP LOOP ; ループ終端
-MIN AND GR4,GR4 ; マイナスフラグがオフの場合、終了
- JZE FIN ; ↓
- XOR GR0,ALLON ; GR1の正負を反転
- ADDA GR0,ONE ; ↓
-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
- ST GR0,LEN ; LENの初期化
- AND GR1,GR1 ; GR1をテスト
- JZE ZPRT ; GR1が0の場合、ZPRTにジャンプ
- JPL STI ; GR1が正数の場合、STIにジャンプ
- LAD GR4,1 ; GR1が負数の場合、GR4をオン
- CALL OABS ; GR1を正数に変換
-STI CPL GR1,GR2 ; ループ先頭。(GR1 < GR2)の場合は、ループ脱出
- JMI STLST ; ↓
- CALL ODIVL ; GR1とGR2の、商をGR0、剰余をGR3に格納
- LD GR1,GR3 ; GR1にGR3をコピー
- LD GR1,NCHAR,GR1 ; GR1を文字に変換
- CALL STSTR ; GR1をSTR領域に格納
- LD GR1,GR0 ; GR0をGR1にコピー
- JUMP STI ; ループ終端
-STLST LD GR1,NCHAR,GR1 ; GR1を文字に変換
- CALL STSTR ; GR1をSTR領域に格納
- AND GR4,GR4 ; 正数の場合
- JZE PRT ; ↓
- LD GR1,='-' ; 負数の場合、「-」をSTR領域に格納
- CALL STSTR ; ↓
- JUMP PRT ; PRTにジャンプ
-ZPRT LD GR1,NCHAR ; 「0」をSTR領域に格納
- CALL STSTR ; ↓
-PRT 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
-;; GR1をSTR領域に格納し、LENをインクリメント
-STSTR START
- PUSH 0,GR1
- PUSH 0,GR2
- LD GR2,LEN ; GR2にLENの値をロード
- ST GR1,STR,GR2 ; STR+GR2 <- GR1
- LAD GR2,1,GR2 ; GR2 <- GR2 + 1
- ST GR2,LEN ; LENにGR2を格納
- POP GR2
- POP GR1
- RET
- END
-;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する
-;;; 0〜65535の範囲の数値を扱う
-ODIVL START
- PUSH 0,GR1
- AND GR2,GR2 ; (GR2 = 0)の場合、ODYZへジャンプ
- JZE ODYZ ; ↓
- LAD GR0,0 ; GR0を初期化
- LD GR3,GR1 ; GR3 <- GR1
-ODLOOP CPL GR3,GR2 ; ループ先頭。(GR3 < GR2)の場合、終了
- JMI ODFIN ; ↓
- SUBL GR3,GR2 ; GR3 <- GR3 - GR2
- ADDL GR0,ODONE ; ↓
- JUMP ODLOOP ; ループ終端
-ODYZ LAD GR3,#FFFF ; 強制的にオーバーフローを発生させ、GR3 <- 0
- ADDL GR3,=1 ; ↓
- JUMP ODFIN ; ODFINへジャンプ
-ODFIN POP GR1
- RET
-ODONE DC 1
- END
-;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
-;; 例: 12345 -> 54321、54321- -> -12345
-REV START
- RPUSH
- LAD GR3,0 ; GR3の初期化
-RPU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
- JZE RNEXT ; ↓
- LD GR4,GR1 ; GR4にGR1の値をコピー
- ADDL GR4,GR3 ; GR4 <- GR4 + GR3
- LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
- PUSH 0,GR5 ; GR5をプッシュ
- LAD GR3,1,GR3 ; GR3 <- GR3 + 1
- JUMP RPU ; ループ終端
-RNEXT LAD GR3,0 ; GR3の初期化
-RPO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
- JZE RFIN ; ↓
- POP GR5 ; GR5にポップ
- LD GR4,GR1 ; GR4にGR1の値をコピー
- ADDL GR4,GR3 ; GR4 <- GR4 + GR3
- ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
- LAD GR3,1,GR3 ; GR3 <- GR3 + 1
- JUMP RPO ; ループ終端
-RFIN RPOP
- RET
- END
-;; GR1の値を絶対値に変換する。GR1にはマイナスの数値が格納されていると想定。
-;; 例: -10 -> 10, -20 -> 20
-OABS START
- XOR GR1,=#FFFF ; GR1の値を反転
- LAD GR1,1,GR1 ; GR1 <- GR1 + 1
- RET
- END
+++ /dev/null
-;;; sum.casl
-;;; 入力 GR1: 1以上の正数
-;;; 出力 GR2: 1からGR1で指定された値までの正数をすべて加算した値。
-;;; オーバーフローした場合は、#FFFF
-SUM START
- LAD GR2,0
- LAD GR3,1
-LOOP CPL GR3,GR1
- JPL FIN
- ADDL GR2,GR3
- JOV OV
- LAD GR3,1,GR3
- JUMP LOOP
-OV LAD GR2,#FFFF
-FIN RET
- END
cat $^ >$@
outb.casl: outb_main.casl divl1.casl rev.casl
cat $^ >$@
+inl.casl: inl_main.casl mull1.casl
+ cat $^ >$@
--- /dev/null
+;;; 2つの32ビット数値を加算する
+;;; 32ビットの値は、連続する2語の領域に格納
+;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス
+;;; 出力 GR0:和の先頭アドレス
+ADDL32 START
+ ST GR1,A
+ ST GR2,B
+ LD GR3,LEN ; GR3:語を表すインデックス 初期化
+ LAD GR3,-1,GR3 ; ↓
+LOOP AND GR3,GR3 ; ループ先頭。(GR3 = 0)の場合は、ループ脱出
+ JMI FIN ; ↓
+ LD GR1,GR3 ; GR1 <- (A + GR3)の値
+ ADDL GR1,A ; ↓
+ LD GR1,0,GR1 ; ↓
+ LD GR2,GR3 ; GR2 <- (B + GR3)の値
+ ADDL GR2,B ; ↓
+ LD GR2,0,GR2 ; ↓
+ ADDL GR1,GR2 ; GR1 <- GR1 + GR2
+ ST GR1,C,GR3 ; (C + GR3) <- GR1(フラグ不変)
+ LAD GR3,-1,GR3 ; GR3 <- GR3 - 1(フラグ不変)
+ JOV CRRY ; オーバーフロー時は、CRRYへジャンプ
+ XOR GR1,GR1 ; GR1 <- 0
+ JUMP LOOP ; ループ先頭へジャンプ
+CRRY AND GR3,GR3 ; 最上位の語でオーバーフローした場合
+ JZE OV ; ↓OVへジャンプ
+ LAD GR1,1 ; GR1 <- 1
+ JUMP LOOP ; ループ終端
+OV ADDL GR1,=#FFFF ; 強制的にオーバーフロー発生
+FIN LAD GR0,C ; GR3 <- C
+ RET
+A DS 1 ; 数値1のアドレス
+B DS 1 ; 数値2のアドレス
+C DS 2 ; 和
+LEN DC 2 ; 数値の語数
+ END
--- /dev/null
+;;; 入力された数値をGR0に格納する
+INL START
+ RPUSH
+ IN IBUF,ILEN ; 入力文字列を格納
+ XOR GR1,GR1 ; GR1:各桁の数値 初期化
+ LAD GR2,10 ; GR2:10進数の「10」 初期化
+ LAD GR3,0 ; GR3:値の一時格納 初期化
+ LAD GR4,0 ; GR4:インデックス 初期化
+STOL CPL GR4,ILEN ; ループ先頭。(GR4 = ILEN)の場合、ループ脱出
+ JZE CP ; ↓
+ LD GR1,IBUF,GR4 ; GR1に、入力文字列中の次の桁を格納
+ CPL GR1,ZERO ; (GR1 < '0')の場合、IOVへジャンプ
+ JMI OV ; ↓
+ CPL GR1,NINE ; (GR1 > '9')の場合、IOVへジャンプ
+ JPL OV ; ↓
+ SUBL GR1,ZERO ; GR1の文字を、対応する数値に変換
+ ST GR4,NLEN ; GR4 <- ILEN - NLEN - 1
+ LD GR4,ILEN ; ↓
+ SUBA GR4,NLEN ; ↓
+MUL10 CPA GR4,=1 ; ループ先頭。GR1 <- 10 ** GR4
+ JZE NEXT ; (GR4 = 1)の場合、ループ脱出
+ JMI NEXT ; ↓
+ CALL MULL ; MULLを呼び出し、GR0 <- GR1 * GR2
+ 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
+ LAD GR4,1,GR4 ; GR4 <- GR4 + 1
+ JUMP STOL ; ループ終端
+OV LAD GR0,1 ; GR0 <- 0。オーバーフローを強制的に発生させる
+ ADDL GR0,=#FFFF ; ↓
+ JUMP FIN ; FINへジャンプ
+CP LD GR0,GR3 ; GR0 <- GR3
+FIN RPOP
+ RET
+ZERO DC '0'
+NINE DC '9'
+IBUF DS 5
+ILEN DS 1
+NLEN DS 1
+ END
+;;; 0〜65535の範囲にある正数のかけ算(筆算方式)を行う
+;;; 入力 GR1:被乗数 GR2:乗数
+;;; 出力 GR0:積
+;;; 積が65535より大きい場合は、GR0は積の下位16ビットになり、オーバーフロー
+MULL START
+ PUSH 0,GR1
+ PUSH 0,GR3
+ XOR GR0,GR0 ; 積
+ AND GR1,GR1 ; (GR1 = 0)の場合、終了
+ JZE FIN ; ↓
+ AND GR2,GR2 ; (GR2 = 0)の場合、終了
+ JZE FIN ; ↓
+ LAD GR3,1 ; 対象ビット
+LOOP PUSH 0,GR3 ; ループ先頭。GR2のビット中でGR3が示すビットが0の場合、NEXTへジャンプ
+ AND GR3,GR2 ; ↓
+ POP GR3 ; ↓
+ JZE NEXT ; ↓
+ ADDL GR0,GR1 ; GR0 <- GR0 + GR1
+ JOV FIN ; GR0がオーバーフローした場合、ループ脱出
+NEXT SLL GR3,1 ; GR3を1回左シフト
+ AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出
+ JZE FIN ; ↓
+ CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出
+ JPL FIN ; ↓
+ SLL GR1,1 ; GR1を1回左シフト
+ JOV FIN ; GR1がオーバーフローした場合、ループ脱出
+ JUMP LOOP ; ループ終端
+FIN POP GR3
+ POP GR1
+ RET
+ END
--- /dev/null
+;;; 入力された数値をGR0に格納する
+INL START
+ RPUSH
+ IN IBUF,ILEN ; 入力文字列を格納
+ XOR GR1,GR1 ; GR1:各桁の数値 初期化
+ LAD GR2,10 ; GR2:10進数の「10」 初期化
+ LAD GR3,0 ; GR3:値の一時格納 初期化
+ LAD GR4,0 ; GR4:インデックス 初期化
+STOL CPL GR4,ILEN ; ループ先頭。(GR4 = ILEN)の場合、ループ脱出
+ JZE CP ; ↓
+ LD GR1,IBUF,GR4 ; GR1に、入力文字列中の次の桁を格納
+ CPL GR1,ZERO ; (GR1 < '0')の場合、IOVへジャンプ
+ JMI OV ; ↓
+ CPL GR1,NINE ; (GR1 > '9')の場合、IOVへジャンプ
+ JPL OV ; ↓
+ SUBL GR1,ZERO ; GR1の文字を、対応する数値に変換
+ ST GR4,NLEN ; GR4 <- ILEN - NLEN - 1
+ LD GR4,ILEN ; ↓
+ SUBA GR4,NLEN ; ↓
+MUL10 CPA GR4,=1 ; ループ先頭。GR1 <- 10 ** GR4
+ JZE NEXT ; (GR4 = 1)の場合、ループ脱出
+ JMI NEXT ; ↓
+ CALL MULL ; MULLを呼び出し、GR0 <- GR1 * GR2
+ 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
+ LAD GR4,1,GR4 ; GR4 <- GR4 + 1
+ JUMP STOL ; ループ終端
+OV LAD GR0,1 ; GR0 <- 0。オーバーフローを強制的に発生させる
+ ADDL GR0,=#FFFF ; ↓
+ JUMP FIN ; FINへジャンプ
+CP LD GR0,GR3 ; GR0 <- GR3
+FIN RPOP
+ RET
+ZERO DC '0'
+NINE DC '9'
+IBUF DS 5
+ILEN DS 1
+NLEN DS 1
+ END
-;;; GR1のアドレスに格納されたGR2の個数の値の中で、最小値をGR0に格納する
+;;; 複数のWORD値の中から、最小値を返す
+;;; 入力: GR1: WORD値を格納したアドレス GR2: 値の個数
+;;; 出力: GR0: 最小値
MINIM START
+ RPUSH
LD GR0,0,GR1
ST GR0,MIN
LAD GR3,0
S1 CPA GR3,GR2
- JZE LRET
+ JZE RET
LAD GR1,1,GR1
LD GR0,0,GR1
CPA GR0,MIN
ST GR0,MIN
S2 LAD GR3,1,GR3
JUMP S1
-LRET LD GR0,MIN
+RET LD GR0,MIN
+ RPOP
RET
MIN DS 1
END
--- /dev/null
+;;; sum.casl
+;;; 入力 GR1: 1以上の正数
+;;; 出力 GR0: 1からGR1で指定された値までの正数をすべて加算した値。
+;;; オーバーフローした場合は、0
+SUM START
+ LAD GR0,0
+ LAD GR2,1
+LOOP CPL GR2,GR1
+ JPL FIN
+ ADDL GR0,GR2
+ JOV OV
+ LAD GR2,1,GR2
+ JUMP LOOP
+OV LAD GR0,0
+FIN RET
+ END
--- /dev/null
+MAIN START
+ LAD GR1,A
+ LAD GR2,B
+ CALL ADDL32
+ RET
+A DC 12,34
+B DC 10,32767
+C DS 2
+ END
MAIN START
LAD GR1,361
CALL SUM
- LD GR1,GR2
+ LD GR1,GR0
CALL OUTL
MFIN RET
END
--- /dev/null
+MAIN START
+BEGIN LAD GR1,A
+ ADDA GR1,B
+ RET
+A DC 3
+B DC 1
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDA GR1,B
+ RET
+A DC 32767
+B DC 10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDA GR1,B
+ RET
+A DC #8001 ; -32767
+B DC #FFF6 ; -10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDA GR1,B
+ RET
+A DC 10
+B DC #FFEC ; -20
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDA GR1,B
+ RET
+A DC -10
+B DC 20
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC 32767
+B DC 10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC -32767
+B DC -10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC 10
+B DC #FFEC ; -20
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC -10
+B DC 20
+ END
--- /dev/null
+MAIN START
+BEGIN LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC 3
+B DC 1
+ END
--- /dev/null
+MAIN START
+BEGIN LAD GR1,A
+ ADDL GR1,B
+ RET
+A DC 3
+B DC 1
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDL GR1,B
+ RET
+A DC 32767
+B DC 10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDL GR1,B
+ RET
+A DC #8001 ; -32767
+B DC #FFF6 ; -10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ ADDL GR1,B
+ RET
+A DC 10
+B DC #FFEC ; 65516
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC 32767
+B DC 10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDA GR1,GR2
+ RET
+A DC -32767
+B DC -10
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ ADDL GR1,GR2
+ RET
+A DC 10
+B DC #FFEC ; 65516
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ AND GR1,B
+ RET
+A DC #3000
+B DC #4FFF
+ END
--- /dev/null
+MAIN START
+ LD GR1,A
+ LD GR2,B
+ AND GR1,GR2
+ RET
+A DC #3000
+B DC #4FFF
+ END
--- /dev/null
+; リテラルに「=' '」を指定
+MAIN START
+ LD GR1,=' '
+ ST GR1,BUF
+ OUT BUF,LEN
+ RET
+BUF DS 1
+LEN DC 1
+ END
LAD GR1,='a'
LAD GR2,10
LOOP CPA GR2,=0
- JZE LEND
- JMI LEND
+ JZE FIN
+ JMI FIN
LD GR3,0,GR1
ADDA GR1,=1
SUBA GR2,=1
JUMP LOOP
-LEND RET
+FIN RET
LEN DC 5
END
-MAIN START
- OUT BUF,LEN
- RET
-BUF DC 'Hello, World!'
-LEN DC 13
- END
+MAIN START
+ OUT OBUF,LEN
+ RET
+OBUF DC 'Hello, World!'
+LEN DC 13
+ END
--- /dev/null
+;;; CASL IIマクロ命令「IN IBUF LEN」で生成される命令群
+ PUSH 0,GR1
+ PUSH 0,GR2
+ LAD GR1,IBUF
+ LAD GR2,LEN
+ SVC 1
+ POP GR2
+ POP GR1
--- /dev/null
+MAIN START
+ IN IBUF,LEN
+ OUT IBUF,LEN
+ RET
+IBUF DS 100
+LEN DC 1
+ END
--- /dev/null
+MAIN START
+ PUSH 0,GR1
+ PUSH 0,GR2
+ LAD GR1,IBUF
+ LAD GR2,LEN
+ SVC 1
+ POP GR2
+ POP GR1
+ IN IBUF,LEN
+ OUT IBUF,LEN
+ RET
+IBUF DS 100
+LEN DC 1
+ END
--- /dev/null
+1234567890abcdefghijkLMNOPQRST
--- /dev/null
+MAIN START
+ OUT OBUF,LEN
+ RET
+OBUF DC 'Hello, World!'
+LEN DC 13
+ END
-;;; 「OUT」と同等のプログラム
-OTEST START
+MAIN START
PUSH 0,GR1
PUSH 0,GR2
LAD GR1,OBUF
POP GR2
POP GR1
RET
-OBUF DC 'abcd'
-LEN DC 4
+OBUF DC 'Hello, World!'
+LEN DC 13
END
--- /dev/null
+;;; CASL IIマクロ命令「OUT OBUF LEN」で生成される命令群
+ PUSH 0,GR1
+ PUSH 0,GR2
+ LAD GR1,OBUF
+ LAD GR2,LEN
+ SVC 2
+ LAD GR1,=#A
+ LAD GR2,=1
+ SVC 2
+ POP GR2
+ POP GR1
--- /dev/null
+;;; 「アセンブラ言語の使用」に掲載されているサンプル
+COUNT1 START
+; 入力 GR1:検索する語
+; 処理 GR1中の'1'のビットの個数を求める
+; 出力 GR0:GR1中の'1'のビットの個数
+ PUSH 0,GR1 ;
+ PUSH 0,GR2 ;
+ SUBA GR2,GR2 ; Count = 0
+ AND GR1,GR1 ; 全部のビットが'0'?
+ JZE RETURN ; 全部のビットが'0'なら終了
+MORE LAD GR2,1,GR2 ; Count = Count + 1
+ LAD GR0,-1,GR1 ; 最下位の'1'のビット1個を
+ AND GR1,GR0 ; '0'に変える
+ JNZ MORE ; '1'のビットが残っていれば繰返し
+RETURN LD GR0,GR2 ; GR0 = Count
+ POP GR2 ;
+ POP GR1 ;
+ RET ; 呼び出しプログラムへ戻る
+ END ;
IOTEST START
- OUT OBUF1,OLEN1
+ OUT OBUF1,OLEN1
LOOP IN IOBUF,IOLEN
- LD GR1,IOLEN
- JZE RETURN
- OUT OBUF2,OLEN2
- OUT IOBUF,IOLEN
- OUT OBUF3,OLEN3
- JUMP LOOP
-RETURN RET
+ LD GR1,IOLEN
+ JZE RETURN
+ OUT OBUF2,OLEN2
+ OUT IOBUF,IOLEN
+ OUT OBUF3,OLEN3
+ JUMP LOOP
+RETURN RET
; Memory
OBUF1 DC 'LET''S START. TYPE IN'
OLEN1 DC 20
OBUF3 DC 'WHAT''S NEXT?'
OLEN3 DC 12
IOBUF DS 64
-IOLEN DS 1
- END
+IOLEN DS 1
+ END
../../../../casl2 -sla ../../../../as/hello.casl
Assemble ../../../../as/hello.casl (0)
-../../../../as/hello.casl: 1:MAIN START
-../../../../as/hello.casl: 2: OUT BUF,LEN
-../../../../as/hello.casl: 3: RET
-../../../../as/hello.casl: 4:BUF DC 'Hello, World!'
-../../../../as/hello.casl: 5:LEN DC 13
-../../../../as/hello.casl: 6: END
+../../../../as/hello.casl: 1:MAIN START
+../../../../as/hello.casl: 2: OUT OBUF,LEN
+../../../../as/hello.casl: 3: RET
+../../../../as/hello.casl: 4:OBUF DC 'Hello, World!'
+../../../../as/hello.casl: 5:LEN DC 13
+../../../../as/hello.casl: 6: END
Label::::
MAIN.LEN ---> #0020
MAIN ---> #0000
-MAIN.BUF ---> #0013
+MAIN.OBUF ---> #0013
Assemble ../../../../as/hello.casl (1)
-../../../../as/hello.casl: 1:MAIN START
-../../../../as/hello.casl: 2: OUT BUF,LEN
+../../../../as/hello.casl: 1:MAIN START
+../../../../as/hello.casl: 2: OUT OBUF,LEN
#0000 #7001
#0001 #0000
#0002 #7002
#000F #0002
#0010 #7120
#0011 #7110
-../../../../as/hello.casl: 3: RET
+../../../../as/hello.casl: 3: RET
#0012 #8100
-../../../../as/hello.casl: 4:BUF DC 'Hello, World!'
+../../../../as/hello.casl: 4:OBUF DC 'Hello, World!'
#0013 #0048
#0014 #0065
#0015 #006C
#001D #006C
#001E #0064
#001F #0021
-../../../../as/hello.casl: 5:LEN DC 13
+../../../../as/hello.casl: 5:LEN DC 13
#0020 #000D
-../../../../as/hello.casl: 6: END
+../../../../as/hello.casl: 6: END
Hello, World!
include ../CMD.mk # YACASL2DIR, CASL2
-ASDIR = $(YACASL2DIR)/as/FUNC
-ASFILE = $(ASDIR)/minim_call.casl $(ASDIR)/minim.casl $(ASDIR)/outa.casl
+ASDIR = $(YACASL2DIR)/as/casl2lib_test
+LIBDIR = $(YACASL2DIR)/as/casl2lib
+ASFILE = $(ASDIR)/minim_call.casl $(LIBDIR)/minim.casl $(LIBDIR)/outa.casl
CMD = $(CASL2) $(ASFILE)
include ../TEST.mk
../../../../as/CMD/svc2_out.casl: 3: PUSH 0,GR1
../../../../as/CMD/svc2_out.casl: 4: PUSH 0,GR2
../../../../as/CMD/svc2_out.casl: 5: LAD GR1,OBUF
-../../../../as/CMD/svc2_out.casl: 6: LAD GR2,LEN
+../../../../as/CMD/svc2_out.casl: 6: LD GR2,LEN
../../../../as/CMD/svc2_out.casl: 7: SVC 2
../../../../as/CMD/svc2_out.casl: 8: LAD GR1,=#A
-../../../../as/CMD/svc2_out.casl: 9: LAD GR2,=1
+../../../../as/CMD/svc2_out.casl: 9: LAD GR2,1
../../../../as/CMD/svc2_out.casl: 10: SVC 2
../../../../as/CMD/svc2_out.casl: 11: POP GR2
../../../../as/CMD/svc2_out.casl: 12: POP GR1
../../../../as/CMD/svc2_out.casl: 5: LAD GR1,OBUF
#0004 #1210
#0005 #0013
-../../../../as/CMD/svc2_out.casl: 6: LAD GR2,LEN
- #0006 #1220
+../../../../as/CMD/svc2_out.casl: 6: LD GR2,LEN
+ #0006 #1020
#0007 #0017
../../../../as/CMD/svc2_out.casl: 7: SVC 2
#0008 #F000
#0018 #000A
#000A #1210
#000B #0018
-../../../../as/CMD/svc2_out.casl: 9: LAD GR2,=1
- #0019 #0001
+../../../../as/CMD/svc2_out.casl: 9: LAD GR2,1
#000C #1220
- #000D #0019
+ #000D #0001
../../../../as/CMD/svc2_out.casl: 10: SVC 2
#000E #F000
#000F #0002
#0000: FR (OF SF ZF): 000
#0000: Memory::::
#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0000: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0000: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0000: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0000: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0000: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0000: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0000: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0002: FR (OF SF ZF): 000
#0002: Memory::::
#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0002: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0002: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0002: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0002: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0002: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0002: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0002: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0004: FR (OF SF ZF): 000
#0004: Memory::::
#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0004: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0004: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0004: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0004: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0004: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0004: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0004: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0006: FR (OF SF ZF): 000
#0006: Memory::::
#0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0006: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0006: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0006: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0006: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0006: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0006: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0006: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0008: Register::::
#0008: GR0: 0 = #0000 = 0000000000000000
#0008: GR1: 19 = #0013 = 0000000000010011
-#0008: GR2: 23 = #0017 = 0000000000010111
+#0008: GR2: 4 = #0004 = 0000000000000100
#0008: GR3: 0 = #0000 = 0000000000000000
#0008: GR4: 0 = #0000 = 0000000000000000
#0008: GR5: 0 = #0000 = 0000000000000000
#0008: FR (OF SF ZF): 000
#0008: Memory::::
#0008: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0008: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0008: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0008: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0008: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0008: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0008: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0008: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
abcd#000A: Register::::
#000A: GR0: 0 = #0000 = 0000000000000000
#000A: GR1: 19 = #0013 = 0000000000010011
-#000A: GR2: 23 = #0017 = 0000000000010111
+#000A: GR2: 4 = #0004 = 0000000000000100
#000A: GR3: 0 = #0000 = 0000000000000000
#000A: GR4: 0 = #0000 = 0000000000000000
#000A: GR5: 0 = #0000 = 0000000000000000
#000A: FR (OF SF ZF): 000
#000A: Memory::::
#000A: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#000A: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#000A: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#000A: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#000A: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#000A: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000A: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000A: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000C: Register::::
#000C: GR0: 0 = #0000 = 0000000000000000
#000C: GR1: 24 = #0018 = 0000000000011000
-#000C: GR2: 23 = #0017 = 0000000000010111
+#000C: GR2: 4 = #0004 = 0000000000000100
#000C: GR3: 0 = #0000 = 0000000000000000
#000C: GR4: 0 = #0000 = 0000000000000000
#000C: GR5: 0 = #0000 = 0000000000000000
#000C: FR (OF SF ZF): 000
#000C: Memory::::
#000C: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#000C: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#000C: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#000C: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#000C: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#000C: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000C: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000C: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000E: Register::::
#000E: GR0: 0 = #0000 = 0000000000000000
#000E: GR1: 24 = #0018 = 0000000000011000
-#000E: GR2: 25 = #0019 = 0000000000011001
+#000E: GR2: 1 = #0001 = 0000000000000001
#000E: GR3: 0 = #0000 = 0000000000000000
#000E: GR4: 0 = #0000 = 0000000000000000
#000E: GR5: 0 = #0000 = 0000000000000000
#000E: FR (OF SF ZF): 000
#000E: Memory::::
#000E: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#000E: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#000E: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#000E: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#000E: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#000E: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000E: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#000E: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0010: Register::::
#0010: GR0: 0 = #0000 = 0000000000000000
#0010: GR1: 24 = #0018 = 0000000000011000
-#0010: GR2: 25 = #0019 = 0000000000011001
+#0010: GR2: 1 = #0001 = 0000000000000001
#0010: GR3: 0 = #0000 = 0000000000000000
#0010: GR4: 0 = #0000 = 0000000000000000
#0010: GR5: 0 = #0000 = 0000000000000000
#0010: FR (OF SF ZF): 000
#0010: Memory::::
#0010: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0010: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0010: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0010: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0010: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0010: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0010: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0010: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0011: FR (OF SF ZF): 000
#0011: Memory::::
#0011: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0011: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0011: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0011: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0011: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0011: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0011: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0011: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0012: FR (OF SF ZF): 000
#0012: Memory::::
#0012: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-#0012: 0000: 7001 0000 7002 0000 1210 0013 1220 0017 F000 0002 1210 0018 1220 0019 F000 0002
-#0012: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0001 0000 0000 0000 0000 0000 0000
+#0012: 0000: 7001 0000 7002 0000 1210 0013 1020 0017 F000 0002 1210 0018 1220 0001 F000 0002
+#0012: 0010: 7120 7110 8100 0061 0062 0063 0064 0004 000A 0000 0000 0000 0000 0000 0000 0000
#0012: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0012: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
#0012: 0040: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
--- /dev/null
+include ../CMD.mk # YACASL2DIR, CASL2
+CASL2FLAG = -slatd
+ASDIR = $(YACASL2DIR)/as/MISC/out
+ASFILE = $(ASDIR)/hello1.casl
+CMD = $(CASL2) $(CASL2FLAG) $(ASFILE)
+include ../TEST.mk
+++ /dev/null
-include ../CMD.mk # YACASL2DIR, CASL2
-CASL2FLAG = -slatd
-ASDIR = $(YACASL2DIR)/as/CMD
-ASFILE = $(ASDIR)/svc2_out.casl
-CMD = $(CASL2) $(CASL2FLAG) $(ASFILE) $(IN)
-include ../TEST.mk
../../../../comet2 a.o
-abcd
+Hello, World!
\ No newline at end of file
--- /dev/null
+include ../CMD.mk # YACASL2DIR, CASL2
+ASDIR = $(YACASL2DIR)/as/MISC/out
+ASFILE = $(ASDIR)/hello1.casl
+include ../TEST.mk
+++ /dev/null
-include ../CMD.mk # YACASL2DIR, CASL2
-ASDIR = $(YACASL2DIR)/as/CMD
-ASFILE = $(ASDIR)/svc2_out.casl
-include ../TEST.mk
INCLUDE = ../../../include
CC = gcc
CFLAGS = -g -Wall -I $(INCLUDE)
-COMMONSRC = $(SRCDIR)/word.c $(SRCDIR)/struct.c $(SRCDIR)/hash.c $(SRCDIR)/cmd.c $(SRCDIR)/cerr.c
-ASSRC = $(SRCDIR)/assemble.c $(SRCDIR)/token.c $(SRCDIR)/label.c $(SRCDIR)/macro.c
-EXECSRC = $(SRCDIR)/exec.c $(SRCDIR)/dump.c
+COMMONSRC = $(SRCDIR)/word.o $(SRCDIR)/struct.o $(SRCDIR)/hash.o $(SRCDIR)/cmd.o $(SRCDIR)/cerr.o
+ASSRC = $(SRCDIR)/assemble.o $(SRCDIR)/token.o $(SRCDIR)/label.o $(SRCDIR)/macro.o
+EXECSRC = $(SRCDIR)/exec.o $(SRCDIR)/dump.o
ifeq "$(UCLASS)" "AS"
SRC = $(COMMONSRC) $(ASSRC)
cleanall: clean
@rm -f 0.txt
a.out: $(SRC) $(TESTSRCFILE)
+ @make -C $(SRCDIR)
@gcc $(CFLAGS) $(SRC) $(TESTSRCFILE)
0.txt 1.txt: a.out
@./a.out >$@ 2>&1
}
return 0;
}
+
+/* エラー番号とエラーメッセージ */
+CERRARRAY cerr[] = {
+ { 101, "label already defined" },
+ { 102, "label table is full" },
+ { 103, "label not found" },
+ { 104, "label length is too long" },
+ { 105, "no command in the line" },
+ { 106, "operand count mismatch" },
+ { 107, "no label in START" },
+ { 108, "not command of operand \"r\"" },
+ { 109, "not command of operand \"r1,r2\"" },
+ { 110, "not command of operand \"r,adr[,x]\"" },
+ { 111, "not command of operand \"adr[,x]\"" },
+ { 112, "not command of no operand" },
+ { 113, "command not defined" },
+ { 114, "not integer" },
+ { 115, "not hex" },
+ { 116, "out of hex range" },
+ { 117, "operand is too many" },
+ { 118, "operand length is too long" },
+ { 119, "out of COMET II memory" },
+ { 120, "GR0 in operand x" },
+ { 121, "cannot get operand token" },
+ { 122, "cannot create hash table" },
+ { 123, "illegal string" },
+ { 124, "more than one character in literal" },
+ { 201, "execute - out of COMET II memory" },
+ { 202, "SVC input - out of Input memory" },
+ { 203, "SVC output - out of COMET II memory" },
+ { 204, "Program Register (PR) - out of COMET II memory" },
+ { 205, "Stack Pointer (SP) - cannot allocate stack buffer" },
+ { 206, "Address - out of COMET II memory" },
+ { 207, "Stack Pointer (SP) - out of COMET II memory" },
+ { 0, NULL },
+};
#include "casl2.h"
-int main(){
+#include "cerr.h"
+
+int main()
+{
puts("== CODE_TYPE TABLE ==");
create_code_type();
print_code_type();
}
return 0;
}
+
+/* エラー番号とエラーメッセージ */
+CERRARRAY cerr[] = {
+ { 101, "label already defined" },
+ { 102, "label table is full" },
+ { 103, "label not found" },
+ { 104, "label length is too long" },
+ { 105, "no command in the line" },
+ { 106, "operand count mismatch" },
+ { 107, "no label in START" },
+ { 108, "not command of operand \"r\"" },
+ { 109, "not command of operand \"r1,r2\"" },
+ { 110, "not command of operand \"r,adr[,x]\"" },
+ { 111, "not command of operand \"adr[,x]\"" },
+ { 112, "not command of no operand" },
+ { 113, "command not defined" },
+ { 114, "not integer" },
+ { 115, "not hex" },
+ { 116, "out of hex range" },
+ { 117, "operand is too many" },
+ { 118, "operand length is too long" },
+ { 119, "out of COMET II memory" },
+ { 120, "GR0 in operand x" },
+ { 121, "cannot get operand token" },
+ { 122, "cannot create hash table" },
+ { 123, "illegal string" },
+ { 124, "more than one character in literal" },
+ { 201, "execute - out of COMET II memory" },
+ { 202, "SVC input - out of Input memory" },
+ { 203, "SVC output - out of COMET II memory" },
+ { 204, "Program Register (PR) - out of COMET II memory" },
+ { 205, "Stack Pointer (SP) - cannot allocate stack buffer" },
+ { 206, "Address - out of COMET II memory" },
+ { 207, "Stack Pointer (SP) - out of COMET II memory" },
+ { 0, NULL },
+};