ARM学习笔记--day02

SPSR与CPSR是一样的只不过是特殊模式下独自的"CPSR",与通用寄存器一样
ARMv4架构的CPSR寄存器
前4位(高4位):是运算产生的状态,N(负或小于状态),Z(0状态),C(进位或借位拓展),V(溢出标志)
后8位(低8位):
    后5位是模式位,32中情况,可以区分32种模式,而ARM中只有7种模式,为了以后拓展用的,根据这几位来确定此时处于什么模式下
    后5位模式对应表:10000 用户模式,10001快速中断模式,等等
    模式位不能主动去修改,如果写后5位,就会实现模式切换,开机时是管理模式,要切换到系统模式,然后再切换到用户模式
    其余3位,是8位是中断禁止位(开机时禁止的,1是禁止位),7位快速中断禁止位(开机时禁止的,1是禁止位),6位指令集状态位(Thumb(1)/ARM(0),默认是32位的)
其余是保留位
汇编指令:
一条完整汇编包含4方面内容:
    1.指令:mov(赋值),add(加),b(跳转)
    2.操作对象
    3.伪指令:.text;.globel start;.code 32
    4.label(符号),标记当前位置的地址,例如start:
指令格式:
    mov{cond}{S} <Rd>,<shifter_operand>
    cond:允许添加的条件,条件一定要紧接着mov这个助记符,条件指的是只有条件满足的情况下才会运行这条指令,否则不运行这条指令
    S:该标志是更新CPSR寄存器;例如:sub r0,r1,r2如果r0位运算后为负数,此时如果是subs的话,就会把CPSR寄存器的第31位置成1
    Rd:指的就是寄存器
    shifter_operand:①#立即数;②寄存器;③寄存器移位形式:<Rm>,LSL #<shift_num>:例如ADD R1,R2,R3, LSL #3 //R3逻辑左移3位得到的新的值与R2相加保存到R1里
    例如:
    c语言,if(r0=0){r1++;}等价的汇编如下:
    cmp r0,#0
    addeq r1,r1,#1    //这里表eq就是相等的条件,这条指令的意思就是如果r0等于0,就执行r1=r1+1
补充:  
    1.ne是不等的条件
    2.cond没有的情况下是always,是隐藏的,就是永远满足的条件,永远可以执行
其余还有12种,可以百度一下
ARM支持5种移位:LSL(logical shift left),LSR(logical shift right),ASR(算数右移,arithmetical shift right,右移补位用符号位补位,所以右移之前是负数,移完之后还是负数),ROR(ROtate Right循环右移,从低位移出,再从高位移入),RRX(扩展循环右移)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值