2016-09-29 15 views
1

SPR(Special Purpose Register)の内容をグローバル変数に保存します。 私は議会で多くの経験を持っていないが、次のように私はそれを実行しようとしました:PowerPCアセンブリファイルのグローバル変数の定義と使用

.global __The_Global_Variable 

mfspr r16, 695 #695 is the number of the SPR Register 
stw  r16, __The_Global_Variable #I get Syntax error at this line 

私は構文エラーを取得するので、誰もがそれに役立つことができますか?

私はまた、次のような質問があります。アセンブリファイル内のグローバル変数を定義する方法

1-? 2レジスタの内容を変数に格納するための正しい命令は何ですか?

+1

それは何をしているのですか?あなたはそれが何をすると思いますか? – fuz

+0

一般に、私はWinIDEAを使用してSPRレジスタの内容を表示したい。そのためには、私はSPRの内容をグローバル変数に格納しなければなりません。そして、そのように私はレジスタの内容を見ることができます。 –

+0

これは、「あなたは何をしたいのですか」ということです。その代わりにあなたが持っているコードは何ですか?それは組み立てられますか?エラーメッセージはありますか?あなたが持っているすべての情報を私たちに提供します。 – fuz

答えて

1

インラインasmディレクティブでこれを行うことができます。たとえば、ここにあなたがPPC64システム上で非特権DSCRを得ることができる方法は次のとおりです。それがなければならないよう

#include <stdio.h> 

int spr_val; 

int main(int argc, char ** argv) { 

    asm ("mfspr %0, 3" 
     : "=r" (spr_val) 
     : :); 

    printf("DSCR is %x\n", spr_val); 
    return 0; 
} 

は、これは動作します - ppc64_cpuを使用してDSCRを設定することにより、検証:

[email protected]er ~/e/foo> make foo 
cc  foo.c -o foo 
[email protected] ~/e/foo> sudo ppc64_cpu --dscr=0 
[email protected] ~/e/foo> ./foo 
DSCR is 0 
[email protected] ~/e/foo> sudo ppc64_cpu --dscr=6 
[email protected] ~/e/foo> ./foo 
DSCR is 6 
+0

私はあなたがasmのグローバル変数に関するいくつかの疑問を追加したのを見ました。これは、生のアセンブラレベルでは少し難解です:グローバルオフセットテーブル(GOT)/目次(TOC)を使用しています。これはr2を通じて格納されます。インラインasmを使用することができない場合は、より具体的な別の質問をすることをお勧めします。 – dja

関連する問題