ldr r0,[r0]
ARMアセンブリで行うことは合法ですか?
3 に答える
不明な点がある場合は、常に arm.com にある ARM アーキテクチャ リファレンス マニュアルを参照してください。それは言います:
The destination register. The SP can be used. The PC can be used, provided the
instruction is either outside an IT block or the last instruction of an IT block.
If the PC is used, the instruction branches to the address (data) loaded to the PC.
In ARMv5T and above, this branch is an interworking branch, see Pseudocode details of
operations on ARM core registers on page A2-12.
デスティネーション レジスタがベース レジスタと同じであってはならないというわけではありません。つまり、答えはイエスです。それらは同じである可能性があります。
エンコーディングは、ARMv4 以降のアームとサムの両方の命令セットで確実に有効です。
興味のあるファミリの ARM ARM (ARM アーキテクチャ リファレンス マニュアル) (http://infocenter.arm.com) を参照してください。この場合、ARM7 は ARMv5 ARM (元のARM ARM のみ、それらは別々の ARM ARM に分割されました)。
あなたはこのようなものを探しています:
if ConditionPassed(cond) then
Rd = (Rm * Rs)[31:0]
if S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected in v5 and above, UNPREDICTABLE in v4 and earlier
V Flag = unaffected
for mul または this
Specifying R15 for register <Rd>, <Rm>, or <Rs> has UNPREDICTABLE results.
またはこれ
Operand restriction: Specifying the same register for <Rd> and <Rm> was previously described as producing UNPREDICTABLE results. There is no restriction in ARMv6, and it is believed all relevant ARMv4 and ARMv5 implementations do not require this restriction either, because high performance multipliers read all their operands prior to writing back any results.
ARMv4/5 マニュアルの LDR 命令の場合:
オペランド制限 ベースレジスタライトバックを指定し、 と に同じレジスタを指定した場合、結果は予測不能です。
それが意味するのはこの指示だと思います
ldr r0,[r0,#+/-offset_12]!
ロード値と計算されたアドレスを r0 に保存するように指示しているため、予測できません。勝つことができるのは 1 つだけであり、トスアップのように聞こえます。なしで!最後に r0 に書き込まれるのは、ロードされた値だけです。そして、制限についてのコメントはありません (元の ARM ARM のリビジョン I では、印刷版であった ARM ARM と E のリビジョン B と C に戻ると、この点ですべてが互いに異なっていました。 arm では「関連」という用語を使用しています)。上でカットアンドペーストしたマルについて。
親指の指示では、制限や予期しない動作についてはコメントしていません。
これを ARM7 でタグ付けしたときに ARMv7 を意味する場合は、ARMv7 マニュアルの 1 つを参照してください。
ARMv7-AR マニュアルの同じ問題からの ARMv7 の場合:
LDR<c> <Rt>, [<Rn>, #+/-<imm12>]!
if wback && n == t then UNPREDICTABLE;
それと r15 の使用以外に、その方法での命令の使用に制限はありません。