0
点赞
收藏
分享

微信扫一扫

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

捌柒陆壹 2天前 阅读 1

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至最低位
举报

相关推荐

0 条评论