X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fcasl2lib%2Fsrc%2Faddl32.casl;fp=as%2Fcasl2lib%2Fsrc%2Faddl32.casl;h=0000000000000000000000000000000000000000;hp=23740bf0b84efedc505d472c29c009f999a7fc69;hb=20134ec3ebf911ef241284c6bd9145c04a75c6ca;hpb=5be8def29beb565c49e7268f71add4a7758ba77b diff --git a/as/casl2lib/src/addl32.casl b/as/casl2lib/src/addl32.casl deleted file mode 100644 index 23740bf..0000000 --- a/as/casl2lib/src/addl32.casl +++ /dev/null @@ -1,43 +0,0 @@ -;;; 2つの32ビット値を加算する -;;; 32ビットの値を、連続する2語の領域に格納 -;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス -;;; 出力 GR0:和の先頭アドレス -ADDL32 START - RPUSH - ST GR1,X ; X <- GR1:数値1 - ST GR2,Y ; Y <- GR2:数値2 - LD GR3,LEN ; GR3:語を表すインデックス 初期化 - XOR GR4,GR4 ; GR4:キャリー値 初期化 - LAD GR3,-1,GR3 ; ↓ -LOOP AND GR3,GR3 ; ループ先頭。(GR3 = 0)の場合は、ループ脱出 - JMI FIN ; ↓ - LD GR1,X ; GR1 <- (X + GR3)の値 - ADDL GR1,GR3 ; ↓ - LD GR1,0,GR1 ; ↓ - LD GR2,Y ; GR2 <- (Y + GR3)の値 - ADDL GR2,GR3 ; ↓ - LD GR2,0,GR2 ; ↓ - ADDL GR1,GR2 ; GR1 <- GR1 + GR2 - JOV CRRY ; オーバーフロー時は、CRRYへジャンプ - ADDL GR1,GR4 ; GR1 <- GR1 + GR4 - JOV CRRY ; オーバーフロー時は、CRRYへジャンプ - ST GR1,A,GR3 ; (A + GR3) <- GR1 - LAD GR3,-1,GR3 ; GR3 <- GR3 - 1 - XOR GR4,GR4 ; GR4 <- 0 - JUMP LOOP ; ループ先頭へジャンプ -CRRY AND GR3,GR3 ; 最上位の語でオーバーフローした場合、OVへジャンプ - JMI OV ; ↓ - ST GR1,A,GR3 ; (A + GR3) <- GR1 - LAD GR3,-1,GR3 ; GR3 <- GR3 - 1 - LAD GR4,1 ; GR4 <- 1 - JUMP LOOP ; ループ終端 -OV LAD GR3,=#8000 ; 強制的にオーバーフロー発生 - SLL GR3,1 ; ↓ -FIN LAD GR0,A ; GR0 <- A - RPOP - RET -X DS 1 ; 数値1の先頭アドレス -Y DS 1 ; 数値2の先頭アドレス -A DS 2 ; 和 -LEN DC 2 ; 数値の語数 - END