i基准指令集 mips_ARM/MIPS/PowerPC/RISC-V 指令集快速入门

这里所介绍的指令集架构均属于 RISC,相比 CISC 更简单。但是 ARM 比较特殊,因为它作为一个 RISC 架构竟然有 push/pop 指令……

ARMv7

ARM 指令集从旧到新有 ARMv6、ARMv7、ARMv7s、ARMv8,使用新指令集的芯片也能支持旧的指令集,但是无法发挥出较好的性能。同时要注意,指令集版本不同的静态库是不能一起使用的。

ARM 有两种工作状态,ARM 状态的指令长度是 32 位的,Thumb 状态的指令长度是 16 位的(从 ARMv6-T2 开始引入的 Thumb-2 指令集也支持 32 位的指令,具有 .w 后缀)

使用 Thumb 指令集可以得到较小的二进制文件,但是可以访问的寄存器更少,产生的指令数量更多,性能会有损失。

寄存器

Register...

r0函数返回值或函数参数

r1~r3函数参数,更多参数使用栈传递

r4~r10临时变量

r11函数栈帧 FP(类似于 EBP 寄存器)

r12内部过程调用寄存器 IP

r13栈指针 SP

r14链接寄存器 LR,用于存储将要跳转到的地址

r15程序计数器 PC

Cortex-M 含有两个栈指针寄存器(SP),分别为 PSP(Process SP)和 MSP(Main SP)。

ARM 指令

指令结构为 MNEMONIC{S}{cond} {Rd}, Operand1, Operand2

如果指令后加了 S,将依据计算结果更新当前程序状态寄存器 CPSR 中相应的标志。

cond 表示执行条件,见下表。

扩展助记符意义(整形)意义(浮点)条件

EQ相等相等Z==1

NE不相等不相等或无序(即至少有一个 NaN)Z==0

CS/HS进位置位/无符号高于等于大于等于或无序C==1

CC/LO进位复位/无符号低于小于C==0

MI减法、负数小于N==1

PL加法、非负数大于等于,或无序N==0

VS溢出置位无序V==1

VC溢出复位不无序V==0

HI无符号高于大于或无序C==1 且 Z==0

LS无符号不高于小于或相等C==0 或 Z==1

GE有符号大于等于大于等于N==V

LT有符号小于小于或无序N!=V

GT有符号大于大于Z==0 且 N==V

LE有符号小于等于小于等于或无序Z==1 或 N!=V

AL(default)无条件无条件

第三个操作数可以是寄存器,也可以是要进行的移位操作。可能的操作有 LSL/LSR/ASR/ROR/RRX,其中 RRX 表示右移一位,最高位由 APSR 寄存器的状态位 C 填充,移出的位给状态位 C。

Mnemonic...

mov复制寄存器。例如 MOV R0,R2,LSL #3 表示把 R2 左移 3 位后传给 R0。

lsl/lsr/asr/ror逻辑左移,逻辑右移,算数右移,循环右移

push把立即数、单个寄存器,多个寄存器压栈。多个寄存器按从右到左压栈

pop出栈到单个寄存器或多个寄存器(从左到右的顺序)

ldr/strldr 从内存中读 32 位数据,str 写 32 位数据到内存。如 ldr r1, [r2, #0x10] 即 r1 = *(r2+0x10);str r1, [r2, #0x01] 即 *(r2+1)=r1。相应地,读写 16 位时 ldrh/strh;8 位时 ldrb/strb。例如 ldrneh 即不相等时读半字。

swp交换值,可用于实现信号量

b/blb 跳转,bl 跳转并把下一条指令地址存储到 lr

bx/blx Rm跳转并切换状态。由于指令是 2 或 4 字节对齐的,地址的最低位一定是 0,故若 Rm & 0x01==1 则令 CPSR.T=1,把目标地址解释为 Thumb 代码;否则令 CPSR.T=0,目标地址解释为 ARM 代码

add/sub加减法,更新标志位

sbc带借位减法,Rd = ~Ra + Rb + CPSR.C

cmp比较两个寄存器或一个立即数(使用减法)并更新标志位

tst/teq测试相等

mul/mla/umullmul 乘法,mla 乘加,即 Ra*Rb+Rc,umull 64 位乘法

svc/swi系统调用

and/orr/eor按位与,按位或,按位异或

几个 SIMD 指令:

Mnemonic...

ldmib/stmib/ldmdb/stmdbb 表示存储器指针在保存/读取第一个值之前更新;i 表示更新方式为增加,d 表示更新方式为减少

ldmfa/stmfa/ldmfd/stmfd存储器指针为 SP 时,就等价于该指令。f 表示堆栈指针指向内含有效数据项的最高地址;a 表示堆栈往高地址增长,d 表示堆栈往低地址增长

ldmea/stmea/ldmed/stmede 表示堆栈指针指向堆栈的第一个空位置 ;a 表示堆栈往高地址增长,d 表示堆栈往低地址增长。

协处理器指令格式:

MRC/MCR {cond} coproc,opcode1,Rd,CRn,CRm{,opcode2}

MCR:从寄存器到协处理器

MRC:从协处理器到寄存器

coproc:协处理器名称,p0~p15

MSR:从寄存器到状态寄存器,如 MSR CPSR,R0

MRS:从状态寄存器到寄存器,如 MRS R2,SPSR

中断

Cortex-A 处理器发生中断时,先跳转进 IRQ 入口,再通过软件判断是由哪个中断源触发,获得相对应的中断服务程序(ISR)的地址。而 Cortex-M 处理器发生中断时,CPU 自动从中断向量表中寻找相应的中断服务程序并跳转。

链接寄存器(LR)的数值会被更新为 EXC_RETURN 值(详细含义可自行搜索)。然后硬件自动将 r0, r1, r2, r3, r12, lr, pc, psr 寄存器依次入栈,同时更新 psp 寄存器。中断处理函数结束时,通过 bx lr 指令触发中断返回,处理器将自动保存的寄存器值从栈上弹出并恢复给相应的寄存器。

svc 指令用于系统调用,如 svc #0x900004 调用 sys_write

另一种方法是把编号传给 r7(如 4 为 sys_write),再使用 swi 0 进行调用。

MIPS32

寄存器

Register NumberName...

0zero它总是返回零,对其写入也没有效果

1at汇编器临时寄存器,用于加载 16 位以上的大常数使用

2-3v0,v1函数返回值,对于 64 位的返回值,两个寄存器都要用到

4-7a0-a3函数调用参数,更多参数使用栈传递

8-15t0-t7无需保存的临时变量

16-23s0-s7需要在当前函数返回之前,恢复其本来值的临时变量

24,25t8-t9无需保存的临时变量

26k0发生中断时,在中断处理过程中用作临时变量

27k1用于中断嵌套的深度计数器。也可作为临时变量

28gp一个全局指针,可以用于访问一些全局变量。没有特

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: arm、x86、mipspowerpc都是不同的处理器架构。这些处理器架构用于设计和制造各种计算设备,如手机、电脑、路由器和服务器等。这些架构之间存在一些差异和特点。 ARM是一种较低功耗的处理器架构,广泛应用于移动设备和嵌入式系统,如智能手机、平板电脑和物联网设备等。它具有节能高效的特点,适用于需要长时间待机和较长电池寿命的设备。 x86是一种主流的处理器架构,常用于个人电脑和服务器。它的性能较高,适用于运行大型应用程序和进行复杂计算的场景。x86处理器还具有广泛的软件支持和生态系统。 MIPS是一种早期的处理器架构,主要应用于路由器和嵌入式系统等领域。MIPS处理器具有强大的浮点计算能力和低功耗特性,适合于需要高性能和稳定运行的系统。 PowerPC是由IBM、苹果和摩托罗拉合作开发的处理器架构,曾经在苹果电脑上广泛使用。PowerPC处理器具有高性能和良好的功耗管理,适用于高性能计算、嵌入式系统和游戏控制台等领域。 总之,不同的处理器架构在处理能力、功耗、软件支持等方面有不同特点,适用于不同的应用场景。选择适合的处理器架构可以提高计算设备的性能和功耗效率。 ### 回答2: arm,x86,mipspowerpc都是不同类型的计算机指令集架构(ISA,Instruction Set Architecture)。它们定义了计算机处理器的指令集和操作方式。 ARM是一种精简指令集计算机(RISC,Reduced Instruction Set Computer)架构,广泛应用于移动设备、嵌入式系统和个人电脑中。ARM处理器的特点是低功耗、高性能、较小的面积和较低的成本。它在智能手机、平板电脑等移动设备上具有深远的影响。 x86是一种复杂指令集计算机(CISC,Complex Instruction Set Computer)架构,最早由Intel开发。x86架构的处理器广泛应用于个人电脑和服务器领域。它的特点是高性能和较大的指令集,但相对来说功耗较高。 MIPS是一种RISC架构,其它用途相对较少。MIPS架构的处理器在嵌入式领域一度非常流行,尤其是在路由器、数字信号处理器和嵌入式系统上。 PowerPC是由IBM、Apple和摩托罗拉共同开发的一种RISC架构。PowerPC架构的处理器曾经广泛用于苹果电脑(Macintosh)和游戏主机(如Xbox 360和PlayStation 3),但如今市场份额已经较小。 总的来说,ARM在移动设备领域表现出色,x86用于个人电脑和服务器,MIPS主要应用于嵌入式领域,而PowerPC市场份额相对较小且用途特定。这四种指令集架构都因其独特的特点在不同的领域发挥着重要的作用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值