ここでは指標レジスタの取り扱いを含む、新しい命令の実験を行います。 (下にある各種実験ボタンでソースを変更して実験ください。)
TEST START MAIN A1 DC 10, 9, 8, 7, 6, 5 MAIN LAD GR1, 1 ;1 を GR1にセット LAD GR2, A1 ;A1ラベルのアドレス を GR2へセット LAD GR3, 3, GR2 ;3+GR2 を GR3にセット LAD GR1, 1, GR1 ;1+GR1 を GR1にセット LAD GR4, A1, GR1 ;A1ラベルのアドレス+GR1 を GR1へセット RET END
上記のコードをアセンブラエディタに設定するボタン→
CASL,COMET仕様書の見方
LAD r , adr [ , x ]
で[ ]の中は記述しないケースがあることを意味し、xは指標レジスタと呼ばれ、それはGR1〜GR7でありGR0は使えません。
単に、adr+x を rへに記憶させます。実際の意味は、上記コメントとシミュレータを動かして理解ください。
TEST START MAIN A1 DC 10, 9, 8, 7, 6, 5 MAIN LD GR0, A1 ;A1アドレスのメモリ内容 を GR0へセット LAD GR1, 1 ;1 を GR1へセット LD GR0, A1, GR1 ;(A1+GR1)のアドレスのメモリ内容 を GR0へセット LAD GR1, A1 ;A1アドレス を GR1へセット LD GR0, 2, GR1 ;(2+GR1)のアドレスのメモリ内容 を GR0へセット RET END
上記のコードをアセンブラエディタに設定するボタン→
CASL,COMET仕様書の見方
LD r , adr [ , x ]
で[ ]の中は記述しないケースがあることを意味し、xは指標レジスタと呼ばれ、それはGR1〜GR7でありGR0は使えません。
(adr+x)番地のメモリ内容を rへに記憶させます。実際の意味は、上記コメントとシミュレータを動かして理解ください。
TEST START MAIN A1 DC 10, 9, 8, 7, 6, 5 MAIN LAD GR1, A1 ;A1ラベルのアドレス を GR1にセット LD GR0, 0, GR1 ;(0+GR1)のアドレスのメモリ内容 を GR0へセット LD GR0, 1, GR1 ;(1+GR1)のアドレスのメモリ内容 を GR0へセット LD GR0, 2, GR1 ;(2+GR1)のアドレスのメモリ内容 を GR0へセット LD GR0, 3, GR1 ;(3+GR1)のアドレスのメモリ内容 を GR0へセット LD GR0, 4, GR1 ;(4+GR1)のアドレスのメモリ内容 を GR0へセット RET END
上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ情報を、順番にGR0へセットしています。
TEST START MAIN A1 DC 10, 9, 8, 7, 6, 5 MAIN LAD GR1, 0 ;0を GR1にセット LD GR0, A1, GR1 ;(A1+GR1)のアドレスのメモリ内容 を GR0へセット LAD GR1, 1, GR1 ;GR1+1をGR1にセット。つまりGR1を増やして1に変更 LD GR0, A1, GR1 ;(A1+GR1)のアドレスのメモリ内容 を GR0へセット LAD GR1, 1, GR1 ;GR1を増やして2に変更 LD GR0, A1, GR1 ;(A1+GR1)のアドレスのメモリ内容 を GR0へセット LAD GR1, 1, GR1 ;GR1を増やして3に変更 LD GR0, A1, GR1 ;(A1+GR1)のアドレスのメモリ内容 を GR0へセット RET END
上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ情報を、順番にGR0へセットしています。
TEST START MAIN A1 DC 10, 9, 8, 7, 6, 5 MAIN LAD GR0, -1 ;-1 を GR0へセット LAD GR1, A1 ;A1ラベルのアドレス を GR1にセット ST GR0, 0, GR1 ;(0+GR1)のアドレスのメモリ内容 を GR0の-1に変更 ST GR0, 1, GR1 ;(1+GR1)のアドレスのメモリ内容 を GR0の-1に変更 ST GR0, 2, GR1 ;(2+GR1)のアドレスのメモリ内容 を GR0の-1に変更 ST GR0, 3, GR1 ;(3+GR1)のアドレスのメモリ内容 を GR0の-1に変更 ST GR0, 4, GR1 ;(4+GR1)のアドレスのメモリ内容 を GR0の-1に変更 RET END
上記のコードをアセンブラエディタに設定するボタン→
A1のラベル位置に並ぶメモリ内容を、順番に-1へ変更しています。
このアドレス方式は、指標アドレス方式と呼ばれて、ADDA、ADDL、SUBA、SUBL、CPA、CPL、AND、OR、XOR
命令で使えて、主メモリが操作対象(オペランド)になります。
対して LAD や、各種JUMP、シフト、PUSH、CALL において、 adr , x の部分は、
単に adr+x と足し算した結果が操作対象(オペランド)になります。
TEST START MAIN MAIN LD GR0, =-1 ;-1をメモリ空間に用意して、それを GR0にセット LD GR1, =#00FF ;#00FFをメモリ空間に用意して、それを GR1にセット ADDA GR1, =#FF00 ;#FF00をメモリ空間に用意して、それで GR1を増やす SUBA GR0, =1 ;1をメモリ空間に用意して、それで GR0を減らす RET END
上記のコードをアセンブラエディタに設定するボタン→
これは =値 で指定した値を、DCによる定数記憶域で自動的に作る指定で、その作った記憶域のアドレスを表現しています。
メモリ空間に作られる記憶域をシミュレータで確認ください。