問題タブ [thumb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - ARM 環境で ARM 命令アドレスが整列しないのはなぜですか?
私のARM環境は
root@linaro-developer:~# uname -a Linux linaro-developer 3.2.0 #7 SMP Thu Feb 28 16:20:18 PST 2013 armv7l armv7l armv7l GNU/Linux
そして、私のアセンブリは
しかし、gdb を使用してデバッグしようとすると、pc がサブ r4、r4、r4 gdb の状態になるわけではありません。
subs r4、r4、r4 アドレスは 0x83d1 です 0x83d1 はアラインされていません
アセンブリ コードがアラインされていないアドレスにあるのはなぜですか?
arm - サム16/32ビット混合命令ストリームのアームPC値について
SO の質問を含むいくつかの記事を読みました。ARM PC レジスタは、次に実行される命令の後に命令を指すのはなぜですか? 、その pc レジスタ値は、実際には現在実行中の命令アドレスに 2 命令先を加えたものであるため、ARM 状態では +8 バイト (2*32 ビット) です。
私の質問は、サムステートの場合、16 ビットまたは 32 ビットの命令が存在する可能性があるということです。フェッチする PC アドレスは、それぞれ 16/32 ビット命令に対して +4 バイトまたは +8 バイトのオフセットになる可能性があるということですか?
例えば:
次のコードでさらにテストを行いました。
クラッシュ時のレジスタは次のとおりです。
上記のコード コメント (159c/15a3/15a6/15a9/15ac) に示されているアドレスは、objdump によって生成されます。これらの位置の内容をレジスタで確認したところ、問題ないようです。
16 ビット命令の場合:
一方、32 ビットのサム命令の場合:
これにより、32 ビット命令の場合、pc 読み取り = pc 実行 +2 になります。私は何かが欠けていますか?? 今、私はPCオフセットについて本当に混乱しています。
ところで、これはthumb2を使用したarmv7aプラットフォームです。
君たちありがとう。
arm - Thumb モードはどのように ARM よりエネルギー効率の高い方法で動作しますか?
32ビット命令を使用しながら、Thumb16ビット命令を使用しARMます。プロセッサーはどのような手段でエネルギー効率を高めていますか? 一部のユニットをオフにすることによって?
assembly - ARM アセンブリは即値と ADDS/ADCS を一緒に使用できません
現在、アセンブリを使用して Cortex-M0 (Freescale KL25Z) で C 関数の一部を高速化しようとしています。この最小限のテスト プログラムで問題が発生します。
.s ファイルを .o ファイルにアセンブルしようとすると、このエラーが発生します
エラーメッセージは私には意味がありません.ADDSはこのドキュメントによると有効な指示です. 私はstackoverflowで可能な答えを見つけ、プログラムの先頭に行を追加しました(2番目の答えが示唆したように、「.syntax Unified」は機能しました)。これにより、この問題が修正され、ADDS や ADCS などの命令を使用できるようになりましたが、新しいエラーが発生しました。
即値を使用する一部の命令では、このエラーが発生します。Mac OS 10.9.5 でコンパイルしています。Google または Stackoverflow でこれに対する解決策を見つけることができず、これらのエラーを回避する方法がわかりません。
arm - Thumb-2 に関する ARM/Thumb インターワーキングの混乱
私はしばらくの間、ARM ISA 関連のドキュメントに目を通してきましたが、これまでのところ、ARM/Thumb インターワーキングの基本について十分に理解していると思います。以下に簡単にまとめます。
- 命令は、4 バイト アライン (ARM) または 2 バイト アライン (Thumb) のいずれかです。
- Thumb 命令と ARM 命令は別々の領域に存在します。つまり、プロセッサの状態を明示的に変更しない限り、それらは混在しません。
bx、blx、ldm、のいずれかを実行すると、状態が変化する可能性がありldrます。ARM または Thumb のどちらを選択するかは、アドレスの最下位ビットの値 (それぞれ 0 または 1) によって決まります。- プロセッサの現在の状態は、ARM または Thumb のいずれかです。それは のビット 5 の状態に依存し
CPSRます。
状態変更のルールは、このペーパーから抜粋した次の図に要約できます。

しかし、Thumb-2 の命令は私を少し混乱させました。たとえば、ARMv7-A/R リファレンス マニュアルのADCセクションにある命令のエンコードを調べてみましょう。A8.8.2基本的に、同じ命令には、16 ビット (Thumb)、32 ビット (Thumb2)、および 32 ビット (ARM) の 3 つの異なるエンコーディングがあります。
ここに私の質問があります:
32 ビット Thumb-2 命令は、プロセッサの ARM または Thumb モードで実行されますか? (後者だと思いますが不明です)
一部のリソースでは、ARM/Thumb 命令を「自由に」thumb-2 に混在させることができると述べています。それは、 、、またはを使用した明示的な状態変更が発生する必要がないことを意味しますか?
bxblxldmldr
最後に、これは私に最も近い質問ですが、インターワーキングに焦点を当てています。