ARMの逆アセンブルについて質問です。00811F00 E59F801C00811F04 E581801C00811F08 E581802000811F0C E581802400811F10 E581802800811F14 E581802C00811F18 E3A0800100811F1C E5C1803000811F20 EBF2DF1100811F24 01010101上はr1+28〜48の数値を01に書き換えます。これを短縮するにはどう書けばいいか教えてください。

1件の回答

回答を書く

1275103

2026-03-14 23:45

+ フォロー

r8 に読み込んだ 0x01010101 をそのまま使えばよいので、実質短縮できるのは「E3A08001(MOV r8,#1)」を消すことだけです。
つまり STRB も r8 のまま使えば同じ結果になります。

理由として、最初の
E59F801C で r8 に 0x01010101 を読み込み、
そのあと STR で [r1+1C]〜[r1+2C] に 0x01010101 を書いています。
0x01010101 の最下位バイトは 0x01 ですから、わざわざ

E3A08001 ; MOV r8,#1

で 1 を入れ直さなくても、r8 をそのまま使って

E5C18030 ; STRB r8,[r1,#0x30]

とすれば r1+30 の 1 バイトも 0x01 になります。

それ以上まとめて短くするには、ループや memset 相当の処理に書き換える必要があり、命令数は逆に増えやすいです。

うったえる有益だ(0シェアするブックマークする

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有