• ベストアンサー

アセンブラの配列処理

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

質問者が選んだベストアンサー

  • ベストアンサー
  • acombun
  • ベストアンサー率16% (16/99)
回答No.3

(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)
回答No.5

簡単でなくてもよければできます. どこまでのことをしたいのかによりますが, 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 と書けます. とにかく「レジスタ間接アドレッシングのときに, オフセットとしてレジスタを指定できない」のが痛過ぎ.

poohpiglet2
質問者

お礼

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

回答No.4

データー8bitと仮定します。 データーセグメントで DATA: DS  3  ;3バイト確保します データをAに、インデックスをHLにセットして下記をコールします。 DIRSET:     LD   DE,DATA     ADD   HL,DE     LD   (HL),A     RET DEも引数にすれば汎用的になります。

poohpiglet2
質問者

お礼

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

  • acombun
  • ベストアンサー率16% (16/99)
回答No.2

できますよ。 直接アドレスを参照する方法やインデックスレジスタの利用もできます。 ただ、データの型による長さの調整は自分で行う必要があります。 int型を2バイトとした場合、CではData[0],Data[1]で良いですが、アセンブラではData,Data+2になります。

poohpiglet2
質問者

お礼

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

回答No.1

アセンブラには配列という概念がないので、 DATA番地に10、 DATA+4番地に20、 DATA+8番地に30 をそれぞれ格納するという考え方になると思います。

poohpiglet2
質問者

お礼

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

関連するQ&A