嵌入式硬件第五弹——ARM(2)
续接上篇1.7 立即数立即数直接写在指令里的数值不需要从寄存器、内存里读取。判断规则数值范围0~0xFF一定是二进制最高位1与最低位1之间位数不超过8位二进制序列凑够8位后右边偶数个0。2. 汇编指令2.1 指令2.1.1 ldr strldr功能1向寄存器中加载非立即数功能2将RAM中的数据加载到寄存器str功能将寄存器中的数据写入RAM指定空间中2.1.2 bic orrbic: 将寄存器中的值某几位清零取决于立即数哪几位为1orr将寄存器中的值某几位值1取决于立即数哪几位为12.1.3 b指令无条件跳转bl函数调用时会将返回地址保存到lr寄存器b函数调用时无法将返回地址保存到lr寄存器bx跳转到lr寄存器对应返回地址汇编调用C语言传参时如果参数少于或等于4个时可以通过通用寄存器R0 - R3进行传参当参数超过4个时必须通过栈进行传参入栈保护 出栈恢复C语言函数返回的结果保存到R0寄存器2.1.4 cpsr寄存器操作1. 将cpsr寄存器中的值读到通用寄存器中R02. 将R0寄存器中低5位的值先清0 bic3. 将R0寄存器中的低5位置设置为10000 orr4. 将R0寄存器中的值回写到CPSR寄存器2.1.5 mrs msrmrs指令读取某个特殊寄存器的值到通用寄存器msr指令将某个通用寄存器的值写入到特殊寄存器2.2 栈的分类满减栈ARM默认使用、空减栈、满增栈、空增栈减栈入栈时sp向下移动地址变小增栈入栈时sp向上移动地址变大满栈sp指向栈顶有效数据空栈sp指向栈顶下一个空位置。