ARM指令集

格式:opcode{cond}{s} Rd, Rn, shifter_operand

opcode : 指令码

cond : 条件码 默认汇编指令是无条件执行的,使用条件码之后可以让汇编有条件的执行

s: 状态位 指令的执行结果会影响cpsr的NZCV位

Rd : 目标寄存器 运行的结果放到目标寄存器

Rn : 第一个操作寄存器,只能是一个寄存器

shifter_operand : 第二个操作数 1> 可以是一个普通的寄存器 2> 可以是一个立即数 3> 可以是经过移位操作的寄存器

1.基本的数据处理指令

数据搬移指令

opcode{cond}{s} Rd, shifter_operand
1. mov:将操作数搬移到寄存器中
2. mvn:将操作数按位取反后搬移到目标寄存器中

    mov r0,#0XFF  @将0XFF搬移到r0寄存器中
    mvn r1,#0XFF  @将0XFF按位取反结果存放到R1寄存器中

数据移位指令

格式:opcode{cond}{s} Rd, Rn, shifter_operand
lsl:左移运算 低位补0
lsr:右移运算  高位补0
ror:循环右移  低位移出的数据补到最高位

    mov r0,#0XFF
    lsl r1,r0,#4  @ 将r0的值左移4位结果放到r1中 R1==0XFF0
    lsr r2,r0,#4  @将r0的值右移4位结果放到r2中 R2==0XF
    ror r3,r0,#4   @ 将r0的值循环右移4位结果放到r3中 R3==0XF000000F

算数运算指令

格式:opcode{cond}{s} Rd, Rn, shifter_operand
1.add :进行加法运算
2.adc:进行加法运算的时候考虑到CPSR的c位    
3.sub:进行减法运算
4.sbc:进行减法运算时考虑到CPSR的C位
5.mul:乘法运算

位运算指令

格式:opcode{cond}{s}  Rd, Rn, shifter_operand

1. and:按位与  与0清0,与1不变
2. orr:按位或  或1置1 或0不变
3. eor:按位异或  相同为0 不同为1
4. bic:按位清0  想要哪一位设置为0,只需要将这一位用bic指令和相同位为1的数进行运算

比较指令

格式: opcode Rn, shifter_operand
opcode:比较指令的指令码是cmp
功能:将第一操作寄存器和第二操作数的值进行比较
本质:比较指令的本质就是拿进行比较的两个数值进行减法运算,并且减法运算的结果会影响到CPSR的条件位
我们可以根据条件位的数值进行两个数值的判断,再根据判断的结果做不同的操作
一般比较指令和条件码都是一起使用的

2.跳转指令

格式:opcode{cond} label
功能:跳转到指定的标签下

功能码:
1. b :跳转到指定的标签下,返回地址不保存
2. bl:跳转到指定的标签下,返回地址保存至 LR寄存器中

3.内存读写指令

指令码{条件码} 目标寄存器 [目标地址]
str r1,[r0]:将目标寄存器的数值写入到目标地址对应的内存中
ldr r1,[r0]:从目标地址中读取一个字的数据到目标寄存器中

写:
str:向指定的内存中写入一个字的数据
strh:向内存中写入半个字的数据
strb:向内存中写入一个字节的数据
读:
ldr:从内存中读取一个字的数据
ldrh:从内存中读取半个字的数据
ldrb:从内存中读取一个字节的数据

1.前索引
        mov r0,#0X40000000   
    mov r1,#0XFFFFFFFF
    STR R1,[R0,#8] @将r1的数值写入到0X40000000+8内存位置
    LDR R2,[R0,#8]@读取R0+8对应的地址内存中一个字的数据到R2中
2.后索引
        mov r0,#0X40000000   
    mov r1,#0XFFFFFFFF
    STR R1,[R0],#8 @将r1的数值写入到R0数值为首地址的内存位置
    @R0的数值+8
3.自动索引
        mov r0,#0X40000000   
    mov r1,#0XFFFFFFFF
    STR R1,[R0,#8]! @将r1的数值写入到R0+8数值为首地址的内存位置
    @R0d的数值+8

4.程序状态寄存器读写指令

读:
MRS Rd,CPSR:将CPSR寄存器的数值读取到目标寄存器中
写:
MSR cpsr,操作数:将操作数写道CPSR寄存器中

1.USER模式作为唯一的非特权模式,我们不可以直接修改CPSR的数值将模式切换为其他特权模式,为了保护系统
2.想要从USER模式切换到其他模式,需要特定的异常出现,才可以切换到对应的模式

5.软中断指令

swi 中断号
注意:
1.swi是软中断的指令码
2.中断号是系统中中断的标识,这里的中断号是一个由24位数据组成的一个立即数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x86和ARM指令集是两种常见的计算机体系结构的指令集架构。它们都用于指导计算机硬件执行特定的任务和操作。以下是关于x86和ARM指令集的一些简要信息: x86指令集:x86是一种基于CISC(复杂指令集计算)体系结构的指令集。该指令集最初由英特尔开发,并成为主要的个人计算机和服务器体系结构。x86指令集包含丰富的指令,可执行多种操作,包括算术运算、逻辑运算、数据传输和控制流等。它是一种复杂的指令集,并且具有较高的执行能力和灵活性。凭借广泛的软件支持和计算能力,x86成为桌面和服务器领域最流行的体系结构之一。 ARM指令集ARM是一种基于RISC(精简指令集计算)体系结构的指令集。它最初由英国公司ARM Holdings开发,并成为移动设备(如智能手机和平板电脑)和嵌入式系统的主要体系结构。ARM指令集设计简洁,指令数量较少,每条指令一般只执行一个简单的操作。与x86相比,ARM指令集执行效率更高,并具有更低的功耗和较小的芯片面积。因此,它成为便携式设备和嵌入式系统中的首选体系结构。 x86和ARM的比较:x86指令集适用于大型多任务处理、复杂的图形操作和计算密集型任务。它具有广泛的软件生态系统和令人称赞的性能。然而,由于复杂指令集的特性,x86架构的芯片更复杂、功耗较高,并且相对较贵。 相比之下,ARM指令集在低功耗设备方面表现出色。ARM芯片的功耗较低,性能较高,并且在移动设备和嵌入式系统中能够提供高度集成的解决方案。此外,由于ARM芯片广泛采用,其生态系统和软件支持也非常庞大。 总结而言,x86和ARM指令集都有各自的优势和适用场景。x86适用于高性能和复杂任务的计算机系统,而ARM则适用于低功耗和便携设备的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值