Чтение регистра ЦП MIPS с помощью инструкции asm - PullRequest
2 голосов
/ 30 октября 2011

Я хочу напечатать регистр $ra (обратный адрес) в моей функции assert для целей отладки. Я работаю на MIPS CPU. Я попробовал следующий код, но компилятору это не нравится:

unsigned int  RA;
unsigned int* pRA = &RA;
asm volatile("sw $ra, %0" : "=r" (pRA));

или

static volatile unsigned int RA;
asm ("mov $ra, %0" : "=m"(RA));

Я нашел документацию GCC относительно встроенной / расширенной сборки, но мне она кажется неясной.

1 Ответ

4 голосов
/ 30 октября 2011

Должно сработать любое из следующего:

 unsigned int x;
 asm volatile ("move %0, $ra" : "=r" (x));
 asm volatile ("sw $ra, %0" : "=m" (x));

Если вы настаиваете на использовании значения указателя asm volatile ("sw $ra, %0" : "=m" (*pRA)); - это путь (без разыменования вы получите pRA, в итогеуказатель на обратный адрес, а значение хранится в RA).Вы можете прочитать больше об ограничениях во встроенной сборке GCC HOWTO .

...