カタツムリ2011年01月18日

「データー領域を分ける」

みなさん、おはようございます。

例えば、ファミコンやスーファミ時代のアセンブラでは、
こんな風にして、データー領域を分けていました、

こちらは、65816のアセンブラです。

ldx #$10
lda $1000,x

ldx #$20
lda $1000,x

x レジスターに、オフセット値を入れます。
ここでは、$10 (hex) を入れて、

lda $1000,x を実行すると、
アドレス、$1000番地+$10=$1010番地のデーターが、
a レジに格納されます。

次は、x レジスターに、$20 (hex) を入れて、
lda $1000,x を実行すると、

アドレス、$1000番地+$20=$1020番地のデーターが、
a レジに格納されるのです。

x レジスターの値を変えれば、
lda $1000,x という一行のプログラムが、
汎用的になるわけです。

先日お話した、データー領域を分けるということは、
メモリーに割り振られた、アドレスを変化させることでもあります。

この場合、$10(hex) 単位で区切ることができますから、
もし、メモリー容量が、1K bytes 確保できるなら、
0000-03FF までを、$10(hex) で、64分割できることになりますね。

※ x reg = 16 bit

でも、まあ~いまどき、自分で作ったプログラムが走ったとき、
データーアドレスが、どこに割り当てられて、
どのぐらいの領域が使えるのかなんて、気にする人は、
1%にも、満たないと思いますが・・・(^^;;

次は、C言語で言えば、配列や構造体が、
データーを分ける手段です。

int temp[64]

なんて書けば、int 型で、64個分のメモリーを確保して、
さらに、インデックスを、0~63 にまで可変することによって、
データー領域を分けて、load save できますよね。

int temp[64];
int data;

data = temp[0];
data = temp[1];
data = temp[2];
data = temp[3];

ここで、int 型を、4bytes とすると、
以下のような、アセンブラーイメージになります。

ldx #$00
lda $1000,x

ldx #$04
lda $1000,x

ldx #$08
lda $1000,x

ldx #$0c
lda $1000,x

上記は、$10(hex) バイト単位、
今度は、$4(hex) バイト単位で、
データー領域が分かれていますね。

C言語など、高級言語になると、
データー型を意識しないで、
メモリー領域を分けることができます。

今では当たりまえですが、
当時はとても画期的で便利なものでしたよ~

今日も「いいスマイル」で行きましょう!


ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓

にほんブログ村 経営ブログへランキングUP!

ランキングUP!

banner2.gif 人気blogランキング!

投稿者 shiozumi : 09:39