私はかなり可能だと確信していますが、そのように宣言されたときに.dataセクションのデータにアクセスする方法がわかりません。.data内の特定のデータにアクセスする方法
msg: db 0xEA, 0xBA, 0x35, 0xB4, 0x88, 0x24, 0x14, 0x2C, 0xA1, 0x97, 0x5F, 0x1B, 0x56, 0xFA, 0xA3
たとえば、4番目をレジスタに移動したい場合、どうすればよいですか?
私はかなり可能だと確信していますが、そのように宣言されたときに.dataセクションのデータにアクセスする方法がわかりません。.data内の特定のデータにアクセスする方法
msg: db 0xEA, 0xBA, 0x35, 0xB4, 0x88, 0x24, 0x14, 0x2C, 0xA1, 0x97, 0x5F, 0x1B, 0x56, 0xFA, 0xA3
たとえば、4番目をレジスタに移動したい場合、どうすればよいですか?
これは非常に簡単です。ここではそのためのインテルの表記があります:
mov al, [msg+3]
この回答へのコメントでは、あなたのフォローアップの質問に対処するために、あなたは、32ビットモデル用(使用を16ビットモデルを仮定し、そのような配列を反復処理することができますEBXなど)(また、私はあなたの配列の最後には0xFFを追加したことに注意してこれを行うには、他の多くの方法がありますが、これはただ一つである):。
mov bx, msg
next:
mov al, [bx]
cmp al, 0xff
je done
call printAL
inc bx
jump next
done:
ret
msg: db 0xEA, 0xBA, 0x35, 0xB4, 0x88, 0x24, 0x14, 0x2C, 0xA1, 0x97, 0x5F, 0x1B, 0x56, 0xFA, 0xA3, 0xFF
このコードは、あなたが持っていることを前提としていal
で何かを行うためにprintAL
と呼ばれる関数が定義されていて、このコードを他の場所から呼び出したことがあります(したがって、ret
)。
私が言ったように、それは非常に基本的な問題だと分かっています。とにかく、お返事ありがとうございました。 しかし、私は以前のものに関連した別の質問ました:私はループを使って配列を通過する場合、私は以来行うことになってる方法: MOVら、[MSG +「登録」] はしていません仕事? この場合に使用する特別なレジスタはありますか? –
私はあなたに役立つ追加コードを追加しました。元の回答が問題を解決した場合は、その回答を受け入れる必要があります。さらに、コメントに新しい質問をするのではなく、本当に新しい質問をする必要があります。 –
@ B.Wing 'mov al、[msg + eax]'が動作するので、何がうまく動作していないのか分かりません。 (おそらく、あなたは16bリアルモードのコードをしようとするマゾヒストですが、いくつかの組み合わせは合法です:https://courses.engr.illinois.edu/ece390/books/artofasm/CH04/CH04-2.html#HEADING2-35。 ..とにかく、アセンブリで合法であることを「推測できません。インテルの指導ガイドで有効なものと各指導の仕組みをチェックしてください。」 – Ped7g
私は実際これを閉じるために投票したかったのですが、質問の基本的な性質にもかかわらず、私は本当に近いものは見ません。 –