Цитата(Spb_Alex @ Nov 15 2007, 11:22)

не, это не дело, просто в новом RV (>3) нельзя обращаться к r13,r14
__asm void func()
{
/*__asm*/ LDMFD sp!, {lr} /* Restore LR */
} - правильно
блин, только сегодня узнал,
а если asm перед операторами, то надо пользовать
__current_pc() и __current_sp()
Еще из хелпа.
The following methods enable you to access the sp, lr, and pc registers correctly in your source code:
Method 1
Use the compiler intrinsics in inline assembly, for example:
void printReg()
{
unsigned int spReg, lrReg, pcReg;
__asm
{
MOV spReg, __current_sp()
MOV pcReg, __current_pc()
MOV lrReg, __return_address()
}
printf("SP = 0x%X\n",spReg);
printf("PC = 0x%X\n",pcReg);
printf("LR = 0x%X\n",lrReg);
}
Method 2
Use embedded assembly to access physical ARM registers from within a C or C++ source file, for example:
__asm void func()
{
MOV r0, lr
...
BX lr
}
This enables the return address of a function to be captured and displayed, for example, for debugging purposes, to show the call tree.