最初に、infocenter.arm.comのARMアーキテクチャリファレンスマニュアル(ARM ARM)、リファレンスマニュアル、最古のものを入手する(armv5または何でも)。命令セットはそこによく定義されています。
第2に、いくつかの手順を組み立てて何が起こるかを見てみましょう。
;@test.s
cmp r1, r0
add r0, #0x1a
どんなクロスアセンブラお持ち(ちょうどそのスクリプトでのbinutilsスルーアップの実行、スクリプトのビルドgccのディレクトリにあるhttp://github.com/dwelch67/raspberrypiを参照)腕 - 対
arm-none-linux-gnueabi-as test.s -o test.o
arm-none-linux-gnueabi-objdump -D test.o
アームなし - のlinux-gnueabiいずれ-ELFアームエルフなどVSは、すべての条件フィールドを参照して、完全な32ビットARM命令(不親指)の上位4ビットの条件コードである同じ
Disassembly of section .text:
00000000 <.text>:
0: e1510000 cmp r1, r0
4: e280001a add r0, r0, #26
を実行し、このために重要でいけませんARM ARMのセクションを参照してください。 0xEは常にこの命令を実行することを意味します。 0b0000は、zフラグがセットされている場合にのみ実行され、0b0001は、zがクリアされている場合にのみ実行されます。
ARM命令でARM命令を実行し、アーム命令のアルファベット順のリストを検索してからcmpを検索しますcond 00I10101 rn sbzシフター
上記のcmp命令より、私たちは1110 000101010001を参照しています...私はゼロビットです15:12はゼロビットです27:26はゼロで、24:21は1010ですのでこれはcmpです命令
上記のビット19〜16は0b001であり、ARM ARMのシフタオペランドの場合はrn so rn = 1(r1)です。これは、アドレッシングモード1のデータ処理オペランドを参照するように指示し、pdf〜ページ
2番目のオペランドを単純にレジスタにすることを知っています。これはデータ処理オペランド - レジスタとページ番号です。そのページのそのページに移動します15:12はrd 11:4は0で3 :0はrmです。私たちはcmp命令から、15:12はゼロでなければならないことを知っています。気にするかどうか、cmpは結果をレジスタに格納しないので、rdは使用されません。 rmが使用され、この場合はr0が必要なので、0b0000は3:0になります。また、ビット27:25が0になっていることに注意してください。cmp命令25では、私たちはゼロを求めています。
CMPページと、このデータ処理の間
- ページを登録し、我々は全体像を持っている
1110 condition
000
1010 opcode
1 S (store flags, that is a 1 for a cmp to be useful)
0001 rn
0000 rd/dont care/sbz
00000
000
0000 rm
cmp rn,rm
cmp r1,r0
addは似ていますが、即時に使用するため、命令のアルファ・リストに追加命令に進みます。私たちは今cmpからこのクラスの命令の24:21がオペコードであることを知っています。シフターオペランドの項目に直接行くことができます。
今回私たちは加算rd、rn、#immediate
ので
1110 condition, always
001 (note the immediate bit is set)
0100 (opcode for add for this type of instruction)
0 (S not saving the flags, it would be adds r0,r0,#26 for that)
0000 (rn = r0)
0000 (rd = r0)
今興味深い部分が来るで、我々は26の異なる方法でエンコードすることができ#immediate
とエンコーディングのためのページを探してください。ビット7:0は即値でビット11:8はローテート、26は0x1A、下位8ビットには0x1Aを入れ、回転を0に設定するだけでgnuアセンブラと同じことができます。おそらく下位8ビットに0x68を入れることができ、rotate_immフィールドの1101000は右に1 * 2ビット回転して11010 = 0x1A = 26となります。
大きな質問;残念ながら、リンクは死んでいます。渡す人のために、ここには簡単な[Webアーカイブリンク](https://web.archive.org/web/20150426195854/http://www.nyx.net/~troddis/ARM.html) – Asu