projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ubuntu 10.04 PPC版で判明した問題を修正
[YACASL2.git]
/
as
/
casl2lib
/
addl32.casl
diff --git
a/as/casl2lib/addl32.casl
b/as/casl2lib/addl32.casl
index
cfb5c1d
..
23740bf
100644
(file)
--- a/
as/casl2lib/addl32.casl
+++ b/
as/casl2lib/addl32.casl
@@
-1,35
+1,43
@@
-;;; 2つの32ビット
数
値を加算する
-;;; 32ã
\83
\93
ã
\83
\83
ã
\83
\88
ã
\81
®å
\80
¤ã
\81
¯
、連続する2語の領域に格納
+;;; 2つの32ビット値を加算する
+;;; 32ã
\83
\93
ã
\83
\83
ã
\83
\88
ã
\81
®å
\80
¤ã
\82
\92
、連続する2語の領域に格納
;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス
;;; 出力 GR0:和の先頭アドレス
ADDL32 START
;;; 入力 GR1:数値1の先頭アドレス GR2:数値2の先頭アドレス
;;; 出力 GR0:和の先頭アドレス
ADDL32 START
- ST GR1,A
- ST GR2,B
+ RPUSH
+ ST GR1,X ; X <- GR1:数値1
+ ST GR2,Y ; Y <- GR2:数値2
LD GR3,LEN ; GR3:語を表すインデックス 初期化
LD GR3,LEN ; GR3:語を表すインデックス 初期化
+ XOR GR4,GR4 ; GR4:キャリー値 初期化
LAD GR3,-1,GR3 ; ↓
LOOP AND GR3,GR3 ; ループ先頭。(GR3 = 0)の場合は、ループ脱出
JMI FIN ; ↓
LAD GR3,-1,GR3 ; ↓
LOOP AND GR3,GR3 ; ループ先頭。(GR3 = 0)の場合は、ループ脱出
JMI FIN ; ↓
- LD GR1,
GR3 ; GR1 <- (A
+ GR3)の値
- ADDL GR1,
A
; ↓
+ LD GR1,
X ; GR1 <- (X
+ GR3)の値
+ ADDL GR1,
GR3
; ↓
LD GR1,0,GR1 ; ↓
LD GR1,0,GR1 ; ↓
- LD GR2,
GR3 ; GR2 <- (B
+ GR3)の値
- ADDL GR2,
B
; ↓
+ LD GR2,
Y ; GR2 <- (Y
+ GR3)の値
+ ADDL GR2,
GR3
; ↓
LD GR2,0,GR2 ; ↓
ADDL GR1,GR2 ; GR1 <- GR1 + GR2
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へジャンプ
JOV CRRY ; オーバーフロー時は、CRRYへジャンプ
- XOR GR1,GR1 ; GR1 <- 0
+ 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 ; ループ先頭へジャンプ
JUMP LOOP ; ループ先頭へジャンプ
-CRRY AND GR3,GR3 ; 最上位の語でオーバーフローした場合
- JZE OV ; ↓OVへジャンプ
- LAD GR1,1 ; GR1 <- 1
+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 ; ループ終端
JUMP LOOP ; ループ終端
-OV ADDL GR1,=#FFFF ; 強制的にオーバーフロー発生
-FIN LAD GR0,C ; GR3 <- C
+OV LAD GR3,=#8000 ; 強制的にオーバーフロー発生
+ SLL GR3,1 ; ↓
+FIN LAD GR0,A ; GR0 <- A
+ RPOP
RET
RET
-
A DS 1 ; 数値1の
アドレス
-
B DS 1 ; 数値2の
アドレス
-
C
DS 2 ; 和
+
X DS 1 ; 数値1の先頭
アドレス
+
Y DS 1 ; 数値2の先頭
アドレス
+
A
DS 2 ; 和
LEN DC 2 ; 数値の語数
END
LEN DC 2 ; 数値の語数
END