私は3つのパラメータを持っており、それらをR1、R8、R9という3つの異なるレジスタに格納します。私は、複数のプッシュが完了したらPUSH {r1、r8 ...など}私がメモリ内で見つけるものは、プッシュ{r9、r8、R1}と同じです。アセンブリの複数のプッシュは、プッシュリストの注文を考慮していません
実際には値が異なります.R9は1000、r1とr8は両方とも50未満です。命令で書いた順番にプッシュされないのはなぜですか?
実際には、私が注文r8、r9、r1を取ったとしても、それらを再びスタックにr9、r8、r1の下から上に格納します。
PUSH {r1,r8,r9}
はPUSH {r9,r8,r1}
と同じではないと考えていました。
マシンエンコーディングは、押さなければならないビットマップです。可変注文をエンコードする余地はありません。なぜなら、それはもっと多くのビットを要するからです。プッシュオーダーが制御可能であるというプログラマの間違った希望を黙って無視するのではなく、アセンブラが 'push {r9、r8、r1}'のような順不同プッシュを受け入れることを拒否すれば、おそらく良いでしょう。 –
@PeterCordes従って、私は複数のプッシュをどのように適用しているかに関わらず、スタックの最下位から最上位に20 11 1000を格納することはできません。代わりにスタックに1000 11 20 bottom-topが常に表示されます。私はレジスタで値を取得し、値をプッシュし、3番目の値をプッシュすることによってそれを行うことができますが、それはタスクではありません。タスクでは、最適化が必要なので、適切な順序で複数の3つのレジスタを一度にプッシュすると、2つの命令が保存されます。 – KDX2
それで最初に適切に順序付けられたレジスタにデータを移動してください;) – Notlikethat