2016-09-29 3 views
1

Я хочу сохранить содержимое SPR (регистр специального назначения) в глобальную переменную. У меня нет большого опыта работы в Ассамблее, но я пытался сделать это следующим образом:Определение и использование глобальной переменной в файле сборки 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

Как правило, я хочу просмотреть содержимое реестра SPR с помощью WinIDEA. и для этого мне нужно сохранить содержимое SPR для глобальной переменной, и, как и я, я могу посмотреть содержимое регистра. –

+0

Это то, «что вы хотите сделать». Итак, что же вместо этого имеет код? Собирает ли он? Есть ли сообщения об ошибках? Дает нам всю информацию, которую вы имеете. – fuz

ответ

1

Вы можете сделать это с помощью встроенной директивы asm. Например, вот как вы могли бы получить непривилегированных DSCR в системе PPC64:

#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; 
} 

Это работает, как следует - проверить, установив DSCR с помощью ppc64_cpu:

[email protected] ~/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

Смежные вопросы