- ベストアンサー
アセンブラの配列処理
C言語の配列処理は下記のように簡単に出来ますが、 アセンブラ(Z80)で同じような事が出来るのでしょうか? int Data(2) Data(0)=10 Data(1)=20 Data(2)=30
- みんなの回答 (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
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
簡単でなくてもよければできます. どこまでのことをしたいのかによりますが, 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 と書けます. とにかく「レジスタ間接アドレッシングのときに, オフセットとしてレジスタを指定できない」のが痛過ぎ.
- otto0001otto
- ベストアンサー率25% (64/249)
データー8bitと仮定します。 データーセグメントで DATA: DS 3 ;3バイト確保します データをAに、インデックスをHLにセットして下記をコールします。 DIRSET: LD DE,DATA ADD HL,DE LD (HL),A RET DEも引数にすれば汎用的になります。
お礼
お礼が遅くなって申し訳ありませんでした。 理解することが出来ました。 ありがとうございました。
- acombun
- ベストアンサー率16% (16/99)
できますよ。 直接アドレスを参照する方法やインデックスレジスタの利用もできます。 ただ、データの型による長さの調整は自分で行う必要があります。 int型を2バイトとした場合、CではData[0],Data[1]で良いですが、アセンブラではData,Data+2になります。
お礼
ご回答ありがとうございます。 No1の回答者様にも同様の質問をさせていただいたのですが、サンプルもしくは参考URL等教えていただけると幸いです。よろしくお願いします。
- chukenkenkou
- ベストアンサー率43% (833/1926)
アセンブラには配列という概念がないので、 DATA番地に10、 DATA+4番地に20、 DATA+8番地に30 をそれぞれ格納するという考え方になると思います。
お礼
ご回答ありがとうございます。 下記のような方法でよろしいのでしょうか? サンプルもしくは参考URL等教えていただけると幸いです。よろしくお願いします。 LD DATA,10 ADD DATA,4 LD DATA,20 ADD DATA,4 LD DATA,30
お礼
お礼が遅くなって申し訳ありませんでした。 詳しく説明していただきありがとうございました。