2017-01-31 2 views
0

アセンブリ言語を学んでいますが、アセンブリ言語と機械語の間の変換方法を理解しようとしています。私は私が働いている次のコードで、ソースを読んで、そのようなしようとしても、私の教授に尋ねるが、どれもhelpful.Thisされていないよ:ARM - アセンブリコードを機械語に変換する方法

MOV R10, #63488 
LSL R9, R6, #7 
STR R4, [R11, R8] 
ASR R6, R7, R3 

私はHEXコンバータのウェブサイトにARMを発見し、これはコンバージョンです:

3EABA0E3 
8693A0E1 
08408BE7 
5763A0E1 

これはどのように動作するのですか?どうもありがとうございます!

+2

[この質問](http://stackoverflow.com/q/11785973/1072229)の回答を確認しましたか? –

+0

サイトを使用しているとき、どのプロセッサまたはアーキテクチャを想定していますか?あなたはどんな授業を受けていますか?これは宿題ですか? – InfinitelyManic

+0

@GrishaLevitありがとうございます。私はこれを逃した。確認してみるよ。 – Ani

答えて

4

必要なのはArmのWebサイトから自由に入手できるARM ARM(アーキテクチャリファレンスマニュアル)ですが、登録が必要な場合があります。使用可能なすべての命令のエンコーディングが含まれています。

+0

それは最も使いやすいものではありません:Pしかし、私はもう一度それを試してみましょう! – Ani

2

コリンの答えは基本的に答え、ちょっとした情報を追加しています。必要なツールは、アームから16進への変換ではなく、アセンブラと呼ばれます。次に、あなたのプログラムはGNUのツールを使用して、たとえば、それを見るために逆アセンブラを使用することができます。

arm-none-eabi-as so.s -o so.o 
arm-none-eabi-objdump -D so.o 

00000000 <.text>: 
    0: e3a0ab3e mov r10, #63488 ; 0xf800 
    4: e1a09386 lsl r9, r6, #7 
    8: e78b4008 str r4, [r11, r8] 
    c: e1a06357 asr r6, r7, r3 

を生成し、プロセッサはよくARMのARMに記載されているマシンのコードをどのように解釈しますか、おそらくARMv5のものから始めるでしょう。 ARMv6、ARMv7は多くのオペレーティングシステムと保護機能を備えていますが、大部分は同じ命令セットですが、ARMv8はaarch32と古いARMv4からARMv7命令セット、次にまったく新しいaarch64命令セットを同じコアに混ぜたハイブリッドです。だから、Googleの腕の建築のリファレンスマニュアル、いくつかの人々は不法にそれらを寝かせたり、実際のものを得るためにinfocenter.arm.comに行く。

+0

私はいくつかの人々と協力し、あなたが提案したのと同じ答えを得ました。 KeilのuVisionというツールを使ってターゲットを構築し、デバッグしています。私は、デバッグプロセスが私に役立つ何かを表示するかどうかを調べようとしています。しかし、最終的にはツールを一切使わずに手動でトレースすることができます:P – Ani

+0

マシンコードをトレースしますか?技術的に可能な限り、それは痛みであり、名誉のバッジに値するものではありません。 ARMのエンコーディングは全面的に行われているので、ツールを実行するには多大な労力がかかります。たとえば、それがmipsならば、マシンコードを見て手作業で解読するほうがはるかに簡単です。もっと面白くて便利なのは、あなた自身の逆アセンブラをゼロから書いて、同じ知識が異なる方法で書かれていることです。 –

関連する問題