ARM汇编指令、指令中s后缀的作用、N、Z、C、V位有什么作用、ARM汇编启动代码

ARM汇编指令

学习arm汇编的主要目的是为了编写arm启动代码,启动代码启动以后,引导程序到c语言环境下允许。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有:

初始化异常向量表;
初始化各工作模式的栈指针寄存器;
开启arm内核中断允许;
将工作模式设置为user模式;
完成上述工作后,引导程序进入c语言主函数执行;

首先我们先学一些指令

mov指令

mov指令:加载12位立即数到寄存器或转移一个寄存器的值到另外一个寄存器

mov r0, #2 ;加载立即数2到寄存器r0,MOV{
   S}<c> <Rd>, #<const>
mov r1, r0 ;将r0寄存器的值加载到r1,MOV{
   S}<c> <Rd>, <Rm>

在这里插入图片描述
可以看到,寄存器R0=0x00000002,R1=0x00000002
Rd是目标寄存器,Rm是第一操作数寄存器。

add指令

ADD{
   S}<c> <Rd>, <Rn>, #<const>
ADD{
   S}<c> <Rd>, <Rn>, <Rm>{
   , <shift>}

在这里插入图片描述
我们将5与R1相加,赋值给了R2
将R0与R1相加,赋值给了R3

sub指令

SUB{
   S}<c> <Rd>, <Rn>, #<const>
SUB{
   S}<c> <Rd>, <Rn>, <Rm>{
   , <shift>}

在这里插入图片描述
我们将R1与5相减,赋值给了R2
将R0与R1相减,赋值给了R3
以上三条指令都有立即数作为第二操作数的情况,那么是什么立即数呢?
准确的说这里所指的是12位立即数imm12
先说怎么判断某数是不是12位立即数,12位立即数的条件是:

如果某个数的数值范围是0~255之间,那么这个数一定是立即数;
把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;
这个数的二进制序列的右边必须为偶数个连续的0
eg:
0x132 = 0000 0000 0000 0000 0000 0001 0011 0010
最高位1至最低位
  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值