2016-05-02 20 views
-1

私は大学の学生で、ARMアーキテクチャのアセンブリを使用してコーディングする必要がある試験があります。基本的には、人間の言葉からアセンブリに翻訳するように求められます。 それは本当に基本的なコースなので、私は各文章の正しい指示を書かなければなりません。たとえば、次のプログラム(...)で 合計2つの符号なしの数値ARMアーキテクチャのコーディングアセンブリの学習

1._________ ; store on the previous frame and link register 
    2._________ ; new frame 

    (....) 

私が直面しています問題は、私はARMでコード化されたことがないと私はどこの書き込み時に開始するために理解していないということですプログラム。アセンブリで正しくコーディングする方法を学ぶのに時間がかかりますが、どこから始めたらいいですか? 練習問題/オンラインビデオコースはどこにありますか? (私たちは大学でsamsung s3c2440を使用しています) 私たちは作成したプログラムをコンパイルするために、arm-elf-insightツールとarm-elfを使用しています。

+4

これはコースです。あなたの先生に相談し、クラスで注意を払う?チュートリアルやその他のリソースを求めることは残念ながらSOの話題です。 – Jester

+2

すぐにあなたの大学のオンブズマンに行って、授業料や参考資料が提供されていないトピックに関する試験が行われているという公式の苦情を登録してください。 – Notlikethat

+1

他にどのようなアセンブリ言語がありますか?私は、ARMのものを探しているときに、Intelのx86 insn set reference(x86タグwikiを参照)ほど素晴らしいものを見つけるのは苦労しました。本当にコンパクトな[リファレンスシート](http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001m/QRC0001_UAL.pdf)があります。これは、実際にはかなり良いですが、Thumbと何ではない。公式のARMのWebサイトでは、(Intelのマニュアルにはまだ詳細なレベルの詳細がない)ページをナビゲートするのは難しいが、すべてのinsnのリストをまとめて見るのは難しい。 –

答えて

0

so.c

unsigned int fun (unsigned int a, unsigned int b) 
{ 
    return(a+b); 
} 

ツールチェーンは、手に入れるのは簡単です。ハードウェアなし

arm-none-eabi-gcc -c -O2 so.c -o so.o 
arm-none-eabi-objdump -D so.o 

Disassembly of section .text: 

00000000 <fun>: 
    0: e0800001 add r0, r0, r1 
    4: e12fff1e bx lr 

または最適化なし

arm-none-eabi-gcc -c so.c -o so.o 
arm-none-eabi-objdump -D so.o 

so.o:  file format elf32-littlearm 


Disassembly of section .text: 

00000000 <fun>: 
    0: e52db004 push {fp}  ; (str fp, [sp, #-4]!) 
    4: e28db000 add fp, sp, #0 
    8: e24dd00c sub sp, sp, #12 
    c: e50b0008 str r0, [fp, #-8] 
    10: e50b100c str r1, [fp, #-12] 
    14: e51b2008 ldr r2, [fp, #-8] 
    18: e51b300c ldr r3, [fp, #-12] 
    1c: e0823003 add r3, r2, r3 
    20: e1a00003 mov r0, r3 
    24: e24bd000 sub sp, fp, #0 
    28: e49db004 pop {fp}  ; (ldr fp, [sp], #4) 
    2c: e12fff1e bx lr 

あなたはコンパイラがどのように機能するかを見て感触を得るために開始することができます。また、asmでespを理解するには、コンパイラーがそれを行うための方法がないので、問題の解決策が多数あります。彼らが何をしているかを調べることで、あなたを得ることができます。

+0

これは私たちが実験室でやっていることですが、逆の処理をするにはどうすればいいですか?演習? –

+0

命令セットを知りたい場合は、アームマニュアルをお読みください。一般的にASMからCを作り直すことはできません。他のこともできます。この最後の質問は、2つの数字を追加するという元の質問とは一致しません。ちょうどそれを行い、呼び出し規約を選び、スタックフレームを設定し(必要であれば必要な場合)、2つの入力を加えて結果を返します。 –