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
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 |