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にご協力をお願いします。↓↓↓
投稿者 shiozumi : 09:39