CASL U - 実効アドレス |
実効アドレス
実効アドレスとは、処理の対象となるアドレスそのものをいう。
例えば、加算命令を次のように書いたとする。
@ ADDA GR0, ADR1
A ADDA GR0, ADR1, GR1
ADDAは算術加算命令である。
@は次のレジスタGR0の内容とADR1番地(ラベルという)の内容を加算して、計算結果をレジスタGR0に記憶することを表している。この場合の実効アドレスはADR1番地となる。これをアドレスの直接指定という。
Aは次のレジスタGR0の内容と「ADR1番地にレジスタGR1の内容を論理加算したものを番地としてその番地の内容」を加算して、計算結果をレジスタGR0に記憶することを表している。この場合の実効アドレスは(ADR1+GR1)番地となる。これをアドレスの指標修飾指定(インデックス修飾指定)という。アドレスの指標修飾に使用できる汎用レジスタはGR1〜GR7の7つである。GR0は指標修飾に使えない。
例えば、0100番地からのメモリの状態及びレジスタGR0, GR1の内容が下図のとおりで、ADR1番地が0100番地とする。(値及び番地はすべて16進数とする。)
メモリ | レジスタ | |||||||||||
|
|
GR0=0010 GR1=0002 |
@の場合、加算の結果は
0010(GR0の内容)+0005(0100番地の内容)
=0015
となる。
Aの場合、加算の結果は
0010(GR0の内容)+0023(0100+0002番地の内容)
=0033
となる。GR0に加算する値が記憶されている番地は、ADR1の0100番地とGR1の0002を加算した0102番地となる。この番地を実効アドレスという。
実効アドレスを計算する場合は論理加算(負数を考えない)で行う。アドレスには負数がないからである。
例題 メモリ、ラベル及びレジスタが下図のとき、加算結果を答えよ。(値及び番地はすべて16進数とする。)
レジスタ | メモリ | |||||||||||||||
GR0=0022 GR1=0001 GR2=0003 GR3=FFFF |
|
|
||||||||||||||
ラベル | ||||||||||||||||
ADR1=1201 ADR2=1204 |
(1) ADDA GR0, ADR1
答え 0055
レジスタGR0の内容である0022とラベルADR1(1201番地)の内容である0033を加算する。加算結果はGR0に記憶される。
(2) ADDA GR0, ADR1, GR2
答え 0123
実効アドレスはラベルADR1(1201番地)とレジスタGR2の内容である0003を加算した1204番地である。
レジスタGR0の内容である0022と実効アドレス1204番地の内容である0101を加算する。
(3) ADDA GR2, ADR2, GR3
答え 0237
実効アドレスはラベルADR2とレジスタGR3を加算したものである。したがって、1204+FFFF=11203となるが、COMETUは16ビット、すなわち16進数で4けたまでしか記憶できないので実効アドレスは1203番地となる。
レジスタGR2の内容である0003と実効アドレス1203番地の内容である0234を加算する。
CASL U | Copyright © 2003 Hiroshi Masuda |