4

私は asm を学んでいますが、これが私の (多くの) 問題の 1 つです: 配列のインデックスの値を変更したいと思います。それを言いましょう:

  • %eax には新しい値が含まれています
  • スタックの一番上 (つまり (0)%esp) には配列のインデックスが含まれます
  • -4(%ebp) には、配列のアドレスが含まれます。

試してみましmovl %eax, (-4(%ebp),0(%esp),4)たが、うまくいきませんでした。さらに悪いことに、構文エラーがスローされます: bobi.s:15: Error: jump `(%ebp),0(%esp),4)' after expression

正しい構文は何ですか?

4

1 に答える 1

5

x86 アセンブリでこれを行う単一の命令はありません。利用可能なレジスターを見つけ、それを使用して取得した配列のアドレスを格納し-4(%ebp)、インデックスを保持する別のレジスターを見つけてから、0(%esp)目的のセルにアクセスできるようになります (さらに RISC で)アセンブリのように、メモリ アクセスを行う前に、これら 2 つのレジスタを一緒に追加する必要があります)。

レジスタが利用可能であると仮定すると、次のようになります。

movl -4(%ebp), %ebx
movl 0(%esp), %ecx
movl %eax, 0(%ebx,%ecx,4)

動作するはずです。

于 2009-10-31T21:25:23.977 に答える