プロが教えるわが家の防犯対策術!

C言語の配列処理は下記のように簡単に出来ますが、
アセンブラ(Z80)で同じような事が出来るのでしょうか?

int Data(2)
Data(0)=10
Data(1)=20
Data(2)=30

A 回答 (5件)

(2)です。


(1)さんのお礼のところの記述ですが、Z80では
ADD DATA,4
のような記述はできないでしょう。
下記のような記述になると思います。
LD DATA,10
LD DATA+4,20
LD DATA+8,30
又は
LD (DATA),10
LD (DATA+4),20
LD (DATA+8),30
    • good
    • 1

簡単でなくてもよければできます.


どこまでのことをしたいのかによりますが, Z80 ではメモリに対するアクセスがかなり厳しくって
・16ビットデータだと
LD (nnnn), rr
・8ビットデータだと
LD (BC), A
LD (DE), A
LD (nnnn), A
LD (HL), r
LD (HL), n
LD (IX+d), r
LD (IX+d), n
(とその逆. nnnn は 16ビット即値アドレス, rr は 16ビットレジスタペアで BC/DE/HL/SP/IX/IY のいずれか, r は 8ビットレジスタ, n と d は 8ビット即値) しか使えません.
なので, 例えば
Data[1] = 20;
は (int = 16ビットと仮定すると)
LD HL, Data
LD DE, 2
ADD HL, DE
LD (HL), 20
INC HL
LD (HL), 0
となります.IX を使えばもうちょっと簡単に
LD IX, Data
LD (IX+2), 20
LD (IX+3), 0
と書けます.
とにかく「レジスタ間接アドレッシングのときに, オフセットとしてレジスタを指定できない」のが痛過ぎ.
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありませんでした。
詳しく説明していただきありがとうございました。

お礼日時:2006/05/20 07:58

データー8bitと仮定します。



データーセグメントで

DATA: DS  3  ;3バイト確保します

データをAに、インデックスをHLにセットして下記をコールします。

DIRSET:
    LD   DE,DATA
    ADD   HL,DE
    LD   (HL),A
    RET

DEも引数にすれば汎用的になります。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありませんでした。
理解することが出来ました。
ありがとうございました。

お礼日時:2006/05/20 07:59

できますよ。


直接アドレスを参照する方法やインデックスレジスタの利用もできます。
ただ、データの型による長さの調整は自分で行う必要があります。

int型を2バイトとした場合、CではData[0],Data[1]で良いですが、アセンブラではData,Data+2になります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
No1の回答者様にも同様の質問をさせていただいたのですが、サンプルもしくは参考URL等教えていただけると幸いです。よろしくお願いします。

お礼日時:2006/05/08 14:55

アセンブラには配列という概念がないので、


DATA番地に10、
DATA+4番地に20、
DATA+8番地に30
をそれぞれ格納するという考え方になると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
下記のような方法でよろしいのでしょうか?
サンプルもしくは参考URL等教えていただけると幸いです。よろしくお願いします。

LD DATA,10
ADD DATA,4
LD DATA,20
ADD DATA,4
LD DATA,30

お礼日時:2006/05/08 14:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!