2

私はパスlibc/arch-arm / bionicにあるAndroidプラットフォームのstrcpy.Sファイルを見ていました。このファイルには、理解できない多くのarm命令があります。また、ARMシステム開発者ガイドも参照しています。ここでは、「tst」と「tstne」を除いて、本やARMrefrenceマニュアルで他の人のrefrenceを見つけることができません。

tst r2, #0xff00
iteet   ne
strneh  r2, [ip], #2
lsreq   r2, r2, #8
    r2, [ip]
tstne   r2, #0xff

これらの指示だけでなく、さまざまなファイルに他の多くの指示もあります。

誰かがこれらの指示が何であるかを知っていますか?

4

2 に答える 2

1

最初の指示はそれです-親指の指示セットからの指示。

iteet   ne

この命令は、次の3つの命令を条件付き実行可能としてマークします。命令の最後の3文字は、e(else)またはt(then)で構成されるパターンを作成します。オペランド'ne'は、評価される条件を指定します。

他の3つの命令は、条件付きの通常のARM命令です。

strneh  r2, [ip], #2  ; store halfword if not equal
lsreq   r2, r2, #8    ; logical shift right if equal
tstne   r2, #0xff     ; test if not equal

これらは、it-instructionの影響を受ける3つの命令です。ne/eq条件付きフラグも付属しています。

ご覧のとおり、it-命令の条件と他の3つの命令の条件は互いに矛盾しています。これはコードのバグです。コードスニペットはARMビッグエンディアンコードからのものであり、ビッグエンディアンでARMを使用するAndroidスマートフォンはないため、これまでに発見されたことがない可能性があります。

ところで、条件がit-命令と命令自体に示されている理由を知ることは価値があります。これは、統合アームアセンブリ標準の一部です。ARMには、2つの操作モードがあります。Thumbモード(It命令を使用し、強力ではありません)とARMモード(より強力で、命令自体に条件フラグを使用します)です。

サムモードの機能に制限すると、サムモードとARMモードでコンパイルされるコードを記述できます。これはここで行われます。

Thumbモード用にアセンブルすると、It命令が次の3つの命令の条件を制御するために使用され、命令内の条件は無視されます。ARM命令セットにアセンブルすると、It命令は無視され、命令自体の条件がアクティブになります。

これは、it命令とarm命令の条件が一致している限りうまく機能します。前に言ったように、これはここでは当てはまらないので、サムモード、アームモード、またはその両方で機能しません:-)

于 2012-06-04T12:34:23.610 に答える
0

strnehは、いくつかの条件付き実行/サイズ指定子サフィックスを持つストアコマンドです。ARMドキュメントは開始するのに適した場所です:http: //infocenter.arm.com/help/index.jsp?topic = / com.arm.doc.dui0068b / Chdehgih.html

「armconditionalexecution」をグーグルで検索すると、役立つブログや記事がたくさん見つかります。http: //blogs.arm.com/software-enablement/258-condition-codes-2-conditional-execution/

あなたの*strneh"命令に関して:

  • str=ストア
  • ne =等しくない場合に実行(Zフラグをクリア)
  • h=ハーフワード操作を実行します
于 2012-06-04T12:37:15.250 に答える