0

だから私はこのファイルに取り組んでいます。複雑なアドレス指定モードを単純なアドレス指定モードに変換する必要があります。

やりきった

movl $0, 0(%esp)

の中へ

addl $0, %esp
movl $0, (%esp)
addl $-0, %esp

すべてのケースで問題なく動作します。

しかし、私は同じことをすることはできません

cmpl $4, 28(%esp)

比較は移動と同じではないことを理解しています。しかし、最後の行の単純なバージョンがどのように見えるか、誰か知っていますか? 事前にThx

4

1 に答える 1

1

ただし、同じロジックです。

movl %esp, %eax
addl $28, %eax
cmpl $4, (%eax)

eax一時的に使用したことに注意してください。スタック ポインターを移動することもできますが、それは悪い考えです。また、復元しようとするとフラグが台無しになります。いずれにせよ、次のような一時的なものが必要になります。

addl $28, %esp
movl (%esp), %eax
addl $-28, %esp
cmpl $4, %eax

もちろんlea、フラグを変更しないので使用できますが、複雑なアドレス指定モードの使用は明らかに禁止されています。スタックポインタが必要なため、pushf/も使用できません。popf

于 2015-05-14T14:11:36.710 に答える