detail2012 发表于 2012-10-11 11:10:59

ucos 汇编部分的中断关闭函数搞迷糊了...

OS_CPU_SR_Save
    MRS   R0, PRIMASK                                       ; Set prio int mask to mask all (except faults)
    CPSID   I
    BX      LR
这部分函数原型是OS_CPU_SROS_CPU_SR_Save(void);
MRS 是读取PRIMASK寄存器到R0,CPSDI I,是关闭所有中断, BX LR是跳转到LR(PC)的值并且更新CPSR寄存器;没有看出哪里是返回部分...虽然按照目前看来返回值就是存在R0寄存器里,但是我没有发现返回R0的指令,除非(小弟刚学ARM的汇编,不是很懂)R0就是ARM上函数返回值存储的地方...只要声明的时候表明有返回值,编译器在调用函数后添加几句出栈指令返回R0.。。只有这样才可以解释...不知道我说的对不对..{:lol:}

armstrong 发表于 2012-10-11 19:02:04

ARM编译器都遵守ARM调用规范,规范的内容包括函数的参数传递规则和返回值传递规则等诸多内容,这些规范应用于C和汇编联合的项目,以及不同编译器生成的函数库项目。
规范里都有详细规则,建议你找关键字“APCS”文档来学习,对于学习ARM是非常必要的知识!
针对你的疑问,其实是这样的,R0用于返回32位值;R0,R1联合起来用于返回64位值;所以。。。
页: [1]
查看完整版本: ucos 汇编部分的中断关闭函数搞迷糊了...