7.40 컴파일러 피질-R5IAR I가 암을위한 인라인 어셈블리 코드가 생성 잘못 조립
#include <stdio.h>
#define mtcpsr(v) __asm volatile(\
"msr cpsr,%0\n"\
: : "r" (v)\
)
int mfcpsr (void)
{
int rval;
asm("mrs %0, cpsr" : "=r"(rval));
return rval;
}
void main(void)
{
/*
* Enable interrupts in the ARM
*/
mtcpsr(mfcpsr() & ~ ((0x80U) & (0x40U | 0x80U)));
}
이것 컴파일러 플래그로서 --cpu_mode = 엄지 설정 엄지 모드 IAR 7.40 컴파일러로 컴파일, 생성되는 어셈블리는
`.text6`:
mfcpsr:
0xfffc040c: 0xf3ef 0x8000 MRS R0, APSR
0xfffc0410: 0x4770 BX LR
0xfffc0412: 0x0000 MOVS R0, R0
main:
0xfffc0414: 0xb580 PUSH {R7, LR}
0xfffc0416: 0xf7ff 0xfff9 BL mfcpsr ; 0xfffc040c
0xfffc041a: 0xf020 0x0080 BIC.W R0, R0, #128 ; 0x80
0xfffc041e: 0xf380 0x8000 MSR ??-0-0, R0
0xfffc0422: 0xbd01 POP {R0, PC}
MSR ?? - 0-0, R0은 잘못된 어셈블리입니다. MSR CPSR_fc, R0 (엄지 옵션이없는 경우)으로 예상합니다. 문제를 찾을 수 있도록 도와 줄 수 있습니까?
당신의 asm은'msrs'가 아니라'mrs'라고 말합니까? –
안녕하세요. David 님, 지금 제 질문을 수정했습니다. 죄송합니다. – kvnsk