|
环境:eUIDE
单片机:EM78P153S
//这是编译器自己产生的C程序框架,我一句没动
void main()
{
}
void _intcall interrupt(void) @ int
{
// Write your code (inline assembly or C) here
//restore ACC
_asm
{
reti //Tell Compiler to recover common registers here.
//Don't remove or duplicate this instruction in this function
}
}
void _intcall interrupt_l(void) @ 0x08:low_int 0
{
}
//下面是上面C代码编译产生的汇编代码,我也一句没动
JMP 0x001 ;'0x000000'
RET ;'0x000001'
ADD A, @0xFF ;'0x000002'
ADD A, @0xFF ;'0x000003'
ADD A, @0xFF ;'0x000004'
ADD A, @0xFF ;'0x000005'
ADD A, @0xFF ;'0x000006'
ADD A, @0xFF ;'0x000007'
JMP 0x00B ;'0x000008'
ADD A, @0xFF ;'0x000009'
ADD A, @0xFF ;'0x00000A'
MOV 0x10, A ;'0x00000B'//把A的值保存到0x10寄存器里
SWAPA 0x04 ;'0x00000C'
MOV 0x20, A ;'0x00000D'//把R4的值保存到0x20寄存器里
SWAPA 0x03 ;'0x00000E'
MOV 0x21, A ;'0x00000F'//把R3的值保存到0x21寄存器里
SWAPA 0x21 ;'0x000010'
MOV 0x03, A ;'0x000011'//恢复R3
SWAPA 0x20 ;'0x000012'
MOV 0x04, A ;'0x000013'//恢复R4
SWAP 0x1F ;'0x000014'
SWAPA 0x1F ;'0x000015'//这里恢复A的值时,怎么变成了0x1F ???
RETI ;'0x000016'
这里的疑问是,中断保存现场时,是把A的值保存到0x10里了,恢复时怎么从0x1f里恢复? |
|