最初に:アセンブリコードレベルでは、「配列」という概念はありません。開発者、あなたが解釈するのは設定するビットとバイトだけです。
あなたの例の配列を達成する最も簡単な方法は、自分のブロックに文字列を分割するために、次のようになります。
string1: db "abcd"
string2: db "efgh"
string3: db "ijkl"
string4: db "mnop"
string5: db "qrst"
あなたは今ユニットとして参照することができ、個々の文字列のブロックを作成しました個別に最後のステップは、5列のそれぞれの先頭アドレスを含む新しいデータ要素を介して「アレイ」を宣言することであろう。
string_array: dq string1, string2, string3, string4, string5
上記今5つのアドレス(各占有64ビット)を保持します。
1つは、配列のアドレスをコードセグメントのどこかのレジスタに取得します。あなたは、配列、コードのアプローチでやっていることを知らず
xor rdx, rdx ; Starting at offset zero
lea rdi, [string_array] ; RDI now has the address of the array
mov rsi, [rdi+rdx] ; Get the address of string1
; Process String1
; Get next string
add rdx, 8 ; Get the next offset which is 64 bits
mov rsi, [rdi+rdx] ; Get the address of string2
; Process String2
; etc.
異なる場合があります。次は、配列を横断し、各文字列自体を得ることについて移動するむしろ残酷な方法があります。
16,32,64ビットのコーディングはありますか?どのアセンブラを使用していますか?詳細があれば、より正確な応答が得られます。 –
あなたが表示したソリューションに何が問題なのですか?どのような "クリーンな構文"を探していますか?配列は単なるバイト列であり、何も魔法ではありません。必要に応じて、そのデータを文字列として解釈することもできます。 –
私のアプローチは、文字列の配列を初期化していることを直感的に示していないようです。それは、文字の単一の配列のように見えます。 –