UCOSII中OS_CPU_A.asm任务切换汇编代码 SUBS R0, R0, #0x20 为啥R0减去0x20

2019-07-20 07:33发布

本帖最后由 坏男孩 于 2018-6-26 08:11 编辑

[mw_shl_code=asm,true]PendSV_Handler
    CPSID   I                                                
    MRS     R0, PSP                                            
    CBZ     R0, PendSV_Handler_Nosave                                 
        
      
        TST         R14, #0x10
        IT                 EQ
        VSTMDBEQ R0!, {S16-S31}
        
    SUBS    R0, R0, #0x20         
    STM     R0, {R4-R11}

    LDR     R1, =OSTCBCur                              
    LDR     R1, [R1]
    STR     R0, [R1]                                       

                                                         
PendSV_Handler_Nosave
    PUSH    {R14}                                          
    LDR     R0, =OSTaskSwHook                        
    BLX     R0
    POP     {R14}

    LDR     R0, =OSPrioCur                                   
    LDR     R1, =OSPrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, =OSTCBCur                                    
    LDR     R1, =OSTCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]

    LDR     R0, [R2]                                          
    LDM     R0, {R4-R11}                                   
    ADDS    R0, R0, #0x20


        TST         R14, #0x10
        IT                 EQ
        VLDMIAEQ R0!, {S16-S31}
               
        MSR     PSP, R0                                          
    ORR     LR, LR, #0x04                                    
    CPSIE   I
    BX      LR                                            
        NOP
    end  [/mw_shl_code]
其中第11 12行部分
SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack
STM R0, {R4-R11}
这两行百思不得其解,大神给指点下
R0此时指向SP,R0自减0x20,就是SP自减0x20,为啥是这个数值,可否解释一下,还有就是STM指令解释下用法,手册中的都是STMIA,STMDM,啥的,没有纯粹的STM的用法
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。