51 lines
		
	
	
		
			721 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			721 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     AREA |.text|, CODE, READONLY, ALIGN=2
 | ||
|     THUMB
 | ||
|     REQUIRE8
 | ||
|     PRESERVE8
 | ||
| 
 | ||
| ;指针调用会使用LDR指令,通过解析这个指令使用的寄存器
 | ||
| ;可以从这个寄存器得到类的基地址
 | ||
| ;在调用这个函数之前,调用者会压栈,此时LR已经不是之前的值
 | ||
| ;所以只能解析PHSH指令,找到栈中存储的LR值
 | ||
| __self_pointer    PROC
 | ||
|     EXPORT  __self_pointer
 | ||
|     MOV     R0,LR
 | ||
|     LDRH    R0,[R0,#-2]
 | ||
|     BX      LR
 | ||
|     ENDP
 | ||
| 
 | ||
| 
 | ||
| __interrupt_disable    PROC
 | ||
|     EXPORT  __interrupt_disable
 | ||
|     MRS     r0, PRIMASK
 | ||
|     CPSID   I
 | ||
|     BX      LR
 | ||
|     ENDP
 | ||
| 
 | ||
| __interrupt_enable    PROC
 | ||
|     EXPORT  __interrupt_enable
 | ||
|     MSR     PRIMASK, r0
 | ||
|     BX      LR
 | ||
|     ENDP
 | ||
| 
 | ||
| __set_msp   PROC
 | ||
|     EXPORT __set_msp
 | ||
|     MSR msp, r0
 | ||
|     BX lr
 | ||
|     ENDP
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     ALIGN   4
 | ||
| 
 | ||
|     END
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | 
