2017-10-03 6 views
1

私はこれらの2つのファイルを持っています.1つは.cであり、1つは.sです。これらは単なるテストファイルなので、ARMスクリプトを使用してCのハングアップを得ることはできますが、私の人生ではそれらを一緒に働かせることはできません。私はこれをVisual StudioやVSコード(あるいはもしあれば他のIDE)を使って簡単にできるかどうか疑問に思っていました。ここで Visual Studioを使用してARMスクリプトでCコードを実行できますか?

は私のコードです:

ARM

.global add2 
add2: 
    stmfd sp!, {v1-v6, lr} @ 'standard' entry, save registers on the stack 
    add a1, a1, a2   @ do the addition requested 
    ldmfd sp!, {v1-v6, pc} 

C

#include <stdio.h> /* standard input and output */ 
#include <stdlib.h> /* standard library */ 
extern int add2(int i, int j); /* tell the compiler that the routine is not defined here */ 
int main(int argc, char * argv[]) /* entry point to the program */ 
{ 
    int i, j; /* declare the variable types */ 
    int answer; 
    i = 5; /* give the variables values */ 
    j = 20; 
    answer = add2(i, j); /* call the assembly language routine */ 
    printf("result is : %d\n", answer); /* print out the answer */ 
    exit(0); /* leave the driver program */ 
} 

現在、私はそれらをリンクするために使用してきた奇妙なJavaプログラムは私にエラー

"D:\Joe\College Stuff\CS 252\add.s:1: Error: bad instruction ` .global add2'"

を与えています

ヘルプ

+1

部分はファイルのエンコーディング問題のように見える....インデントやドンするスペースを使用してみてください」どのようなことが起こっているかを見てください。どのような "奇妙なJavaプログラム"?ご指定ください! – rickythefox

+2

これは "ARMスクリプト"ではありません。ARMアセンブリコードのように見えます(ただし、特定の構文に慣れていませんが、AT&TとIntelスタイルなど、同じ基本アセンブリ言語の構文が異なります)。 – Dai

+1

ここではVisual Studioは役に立ちません。あなたは、アセンブラを実行して、ARMアセンブリファイルを実行可能なARMオブジェクトファイルに変換し、Cプログラムと静的にリンクする方法を学ぶ必要があります。 Visual StudioのVisual C++コンポーネントは実際にはCのツールチェーンではありません(C99で確認さえしていません)。コマンドラインツールのみを使用し、教師/教授から指示を求めてください。また、あなたはWindowsを使用することを意味していますか?この種の作業は、クロスコンパイル機能のためにLinuxシステムで行うのが最善です。 – Dai

答えて

3

このエラーを修正するには、ファイルの先頭にBOM(バイトオーダマーク)を挿入しないようにエディタを設定します。 「別名で保存」を選択し、別のエンコーディング(「ASCII」や「UTF-8 no BOM」など)を選択することで、これを行うことができます。 ARMアセンブリファイルの作成に使用したエディタを教えていただけたら、より具体的なヘルプを提供することができます。

+0

私は初期のファイルを作成するためにメモ帳を使用しましたが、今からVSコード – wjmccann

+0

を使用します。@wjmccann VSコードはデフォルトで適切なエンコーディングを使用する必要があります。 – fuz

関連する問題