Store PC to different from memory and register?

I,m using keil uVison4.22 and the device is arm7 ,I am testing about SubroutineCall,but found a doubt that the code store the r15(PC) to the address r13 of memory,and the value is PC + 12 ,if i use mov instructions to anyOne register is PC + 8 correct . but why?

AREA SubroutineCall,CODE,READWRITE

	ENTRY

	ADR r13,Stack
	
	SUB r13,r13,#4
	
	STR r15,[r13] 
	
	B Target
	
	MOV r0,#0xFF
	
	MOV r0,#0x18
	
	LDR r1,=0x20026
	
	SVC #123456
	
Target MOV r1,#0xAA
	
	LDR r12,[r13],#+4
	
	SUB r12,r12,#4
	
	MOV r15,r12



	AREA SubroutineCall,DATA,READWRITE
	
	SPACE 64
	
Stack DCD 0x00000000
	
	END

so, what is the different store PC into between memory and register? because of the pipeline?