XOS 源码详解3: os_s_xxxx.s 汇编代码的 LDR指令

本文详细解析了XOS源码中PendSV_Handler函数的LDR指令,讲解了LDR指令的作用、格式和不同寻址方式,并通过实例展示了如何在汇编代码中使用LDR指令。同时,文章探讨了LDR伪指令与ARM指令的区别,强调了LDR伪指令在处理大地址或不方便的立即数时的便利性。
摘要由CSDN通过智能技术生成

; PendSV_Handler
PendSV_Handler
        LDR        R2,    =OSTcbCurr                    ; 不必关中断。嵌套中断发生时会自动保存 R0~R3 到 MSP 并恢复
        LDR        R0, [R2]


PendSV_Handler_1
;        ORR        LR, LR, #4                        ; 要求从 PSP 出栈, 返回后使用 PSP
        MOVS    R0, #4
        MOV        R1, LR
        ORRS    R0, R1, R0
        MOV        LR, R0

        LDR        R0,    =OSTcbHigh                    ; OSTcbCurr = OSTcbHigh ;dw LDR RO,=立即数
        LDR        R0,    [R0]
        STR        R0,    [R2]
        LDR        R3,    [R0]                        ; PSP = OSTcbHigh->StkPtr


LDR指令的格式: 
LDR{条件}   目的寄存器     <存储器地址>
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。
LDR指令的寻址方式比较灵活,实例如下:

LDR R0,[R1]                                                      ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2]                                             ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8]                                             ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1],R2                                               ;将存储器地址为R1的字数据读入寄存器R0,并将

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值