0
GCC
및 inline assembly
을 사용하여 특정 레지스터 r0
에 즉시로드해야합니다. 그러나, 나는 올바른 결과를 얻지 못하고있다.PowerPC 인라인 어셈블리 : 레지스터에 C 값로드
unsigned short value = 0x1337;
asm volatile
(
"li 0, %0\n\t"
"sc\n\t"
"blr"
: /* Output registers */
:"r"(value) /* Input registers */
: /* No clobbered registers */
);
컴파일 할 때, 이것은 9
에서 온 않습니다
li r0, 9
sc
blr
을 준다? 대신 지정된 값 0x1337
을 원했습니다. Here은 내가 본 자습서입니다.
네는, 당연히 그 간단한 해결책 – BullyWiiPlaza
@BullyWiiPlaza했다 : 당신은 레지스터와 immediate 만을 혼합 할 수 없습니다, 그래서 맨손 수없는 이름을 등록 얻기 위해 GCC -mregnames''사용합니다. 또한 컴파일러에게 clobber에 대한 정보를 알려주고, 'asm goto'를 사용하여 점프하고 있음을 알리십시오. 컴파일러에게 알려주는 안전한 방법이 확실하지 않더라도 asm은'lr'에 리턴 주소가 필요하고 리턴합니다. 당신은 아마도 asm으로 전체 함수를 작성해야 할 것입니다. 왜냐하면 만약 그것이 인라인한다면 이것이 어떻게 작동하는지 보지 못하기 때문입니다. –
@PeterCordes : 네, 그게 전부입니다. :) – BullyWiiPlaza