stkchk16.asm

来自「OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI」· 汇编 代码 · 共 60 行

ASM
60
字号
;******************************************************************************
;* STKCHK.ASM  - STACK OVERFLOW CHECK -  v2.24                               *
;* Copyright (c) 1996-2002 Texas Instruments Incorporated                     *
;******************************************************************************
 
;****************************************************************************
;* C$STKCHK - CHECK THE STACK FOR OVERFLOW TO MANAGE THE STACK DYNAMICALLY
;*            16 BIS
;****************************************************************************
;*
;*   o FRAME SIZE IS IN V1            
;****************************************************************************
	.state16

        .global C$STKCHK
        .global C$STKCHK_LEAF

C$STKCHK:
C$STKCHK_LEAF:
        PUSH      {V2}

        LDR       V2, c_stack 		; Load the top of the stack address
	ADD	  V2, V2, V1		; Add frame size to it
	ADD	  V2, #32		; Add the maximum register save size 
        CMP       V2, SP	
        BLT       L2			; Return if stack does not overflow

        LDR       V1, c_stkchkc 	; Load the stkchk called flag
        LDR       V2, [V1, #0]
        CMP       V2, #0		; If flag is set, we already detected 
        BNE       L2			; overflow, just exit

        MOV       V2, #1		; Set the stkchk called flag
        STR       V2, [V1, #0]	
        BL        $handle_stkovf 	; Call the user defined function

        MOV       R0, #0
        BL        $exit			; Call the exit routine
L2:
        POP       {V2}
        BX	  LR

;******************************************************************************
;* CONSTANT TABLE                                                             *
;******************************************************************************
           .align  4
c_stkchkc: .field          _stkchk_called,32
           .align  4
c_stack:   .field          __stack,32

;******************************************************************************
;* UNDEFINED EXTERNAL REFERENCES                                              *
;******************************************************************************
        .global $handle_stkovf
        .global $exit
        .global __stack
	.global _stkchk_called


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?