朝阳市做网站,网站开发从入门到精通,ui设计师导航网,制作网站需要什么技术ARM汇编指令
学习arm汇编的主要目的是为了编写arm启动代码,启动代码启动以后,引导程序到c语言环境下允许。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有:
初始化异常向量表;
初始化各工作模式的栈指针寄存器;
开启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位;
这个数的二进制序列的右边必须为偶数个连续的0eg:
0x132 = 0000 0000 0000 0000 0000 0001 0011 0010
最高位1至最低位