CASLの課題
1回分のコピーは出来ました。でもそれ以降のコピーがうまく出来ませんでした。ジャンプ命令を使うとき番地の設定を絶対番地になるので、一回分のコピーしか出来ない事がわかりました。そこは個人検討しながら作成しみてください。
;*** [Let'S CASLⅡ] ***
REI03 START
DATA1 LD GR2,ZERO
LD GR3,N
LOOP LD GR1,DATA1,GR2
ST GR1,DATA2,GR2
ADDA GR2,ONE
CPA GR2,GR3
JNZ LOOP
ZERO DC 0
ONE DC 1
N DC 20
DATA2 DS 20
END
CASL課題 05b105
全体を複製していくものは出来なかったが、前半を参照しながら後半のみ複製を繰り返すものは出来た。
前半を「A」、後半を「B」、複製されたものには「'」をつけるとすると、
A B B' B'' B''' B'''' ・・・・・・・・・・・・・・・
となり、メモリを1周し、Aの部分が消えるまで動作する。
TEST START
NOP ;コピー元アドレスの記憶用
NOP ;ループ回数の判定用(1E固定)
LAD GR7,#0001 ;カウント増加用(1固定)
LAD GR6,#100F ;ループの始点
LAD GR5,#000F ;ループ回数のカウント
LD GR4,GR5 ;コピー元アドレスの算出用
LAD GR3,#001E ;コピー先アドレスの算出用
ST GR3,#1001 ;ループ回数判定用の定数を書き込む
ST GR6,#1000 ;最初のコピー元アドレスを書き込む
LD GR0,#1000,GR4
;コピー元のオペランドを読み込む、コピー範囲の始点、ループの先頭
ST GR0,#1000,GR3 ;コピー先にオペランドを書き込む
ADDA GR3,GR7 ;コピー先アドレス+1
ADDA GR4,GR7 ;コピー元アドレス+1
ADDA GR5,GR7 ;ループカウント+1
CPA GR5,#1001 ;ループ判定
JMI #0000,GR6 ;判定が負ならループの先頭へ
ADDA GR6,GR5 ;ループの先頭アドレスを移動(1)
LAD GR5,#000F ;ループカウントリセット
SUBA GR6,GR5
;ループの先頭アドレスを移動(2)、コピー範囲の終点
END
最終更新:2008年07月25日 19:44