quicklock.s

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· S 代码 · 共 65 行

S
65
字号
; -*-Text-*-
;
;      TITLE("Simple locking mechanism for ARM")
;
; $Revision: 1.2 $
;   $Author: kwelton $
;     $Date: 2000/06/14 03:38:22 $
;
; Copyright (c) 2000 ARM Limited
; All Rights Reserved
;
; Module Name:
;
;    quicklock.s
;
; Abstract:
;
;    This module uses the swap instruction to implement a simple locking
;    scheme

        IMPORT  Sleep

        EXPORT  SetLock
        EXPORT  ClearLock

        AREA    |As$Code|, CODE, READONLY

SetLock         ROUT

;
; first try doesn't bother saving registers for speed
;
        mov     r1, #1
        swpb    r1, r1, [r0]
        cmp     r1, #0
        moveq   pc, lr

;
; someone has the lock - sleep() to force a context switch then try again
;
        stmfd   sp!, {r4, lr}
        mov     r4, r0
dosleep
        mov     r0, #1
        bl      Sleep

        mov     r0, #1
        swpb    r0, r0, [r4]
        cmp     r0, #0
        bne     dosleep

        ldmfd   sp!, {r4, pc}

;
; remove the lock - returns FALSE if no lock held
;
ClearLock       ROUT
        mov     r1, #0
        swpb    r0, r1, [r0]
        mov     pc, lr

        END

; EOF quicklock.s

⌨️ 快捷键说明

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