ARM指令集
- 格式:ppt
- 大小:9.25 MB
- 文档页数:87
ARM指令集问题:满递减与空递减ARM指令的多数据传输(STM、LDM)中,提到:多寄存器的Load和Store 指令分为2组:一组用于数据的存储与读取,对应于IA、IB、DA、DB,一组用于堆栈操作,对应于FD、ED、FA、EA,两组中对应的指令含义相同。
即:STMIB(地址先增而后完成操作)、STMFA(满递增堆栈);STMIA(完成操作而后地址递增)、STMEA(空递增堆栈);STMDB(地址先减而后完成操作)、STMFD(满递减堆栈);STMDA(完成操作而后地址递减)、STMED(空递减堆栈)。
上述各组2个指令含义相同只是适用场合不同,同理有:LDMIB、LDMED;LDMIA、LDMFD;LDMDB、LDMEA;LDMDA、LDMFA。
我的问题是:对于STM指令很好理解,但是对于LDM指令,举例说:LDMIA(完成操作而后地址递增)、LDMFD(满递减堆栈):若有这样的指令:LDMIA R0!,{R2-R9}先将基址寄存器R0所指数据存入R2,RO递增,再将基址寄存器R0所指数据存入R3,RO递增,……最后将基址寄存器R0所指数据存入R9,RO递增至后一位置。
而满递减堆栈的定义是:堆栈随着存储器地址的减小而向下增长,基址寄存器指向存储有效数据的最低地址或者指向第一个要读出的数据位置。
其中“基址寄存器指向存储有效数据的最低地址或者指向第一个要读出的数据位置”与先前LDMIA指令完成的结果矛盾,因为此指令完成后基址寄存器指向的并不是与R9对应的数据的位置,请问如何解释?问题解答:不错,其实你自己已经解释清楚了,呵呵为什么呢?首先你要理解“基址寄存器指向存储有效数据的最低地址或者指向第一个要读出的数据位置”的概念比如我的FD堆栈里面有如下数据地址数据0x100 90xfc 80xf8 70xf4 60xf0 50xec 40xe8 30xe4 20xe0 1这时候R13,即栈的指针应该是0xe0比如你运行了LDMIA R13!,{R2-R9}取出了8个数字分别是1-8,这时候R13指向的是哪里?当然是0x100,因为最后读出来的是8,在读出来以后,R13增加4(32bit数据是+4地址的偏移量),这时候R13就是0x1000x100这个地址对吗?当然是对的,因为这时候9就是栈的底部了,R13指向9的地址0x100不对吗?所以你要理解这个最低有效数据的概念,1-8都出栈了,9就是第一个有效数据你下一次出栈就是从9开始所以是没有错的,而且你自己已经诠释了。
arm常用的名词解释ARM(Advanced RISC Machine)是一种常用的计算机架构,被广泛应用于移动设备、嵌入式系统和单片机等领域。
本文将对ARM常用的一些名词进行解释,以帮助读者更好地了解ARM架构。
1. RISC(Reduced Instruction Set Computer):精简指令集计算机。
相对于复杂指令集计算机(CISC),RISC采用简化指令集,每条指令都非常简单,执行速度快,并且易于设计和优化硬件。
2. 架构:计算机系统的基本设计和组织原则。
ARM架构设计了一套标准的指令集和寄存器组织,以及与之兼容的处理器核心,为ARM生态系统提供了一致的编程接口。
3. 处理器核心(Processor Core):ARM的核心部分,负责执行指令和进行算术逻辑运算。
常见的ARM处理器核心包括Cortex-A系列(用于应用处理器)、Cortex-M系列(用于嵌入式系统和微控制器)和Cortex-R系列(用于实时应用和嵌入式处理器)。
4. 指令集架构(Instruction Set Architecture):定义了一套计算机指令的规范和编码方式。
ARM指令集架构包括ARMv8-A、ARMv7-A、ARMv6-M等不同的版本,不同版本支持不同的指令集和功能。
5. 寄存器:位于处理器核心内部的高速存储器,用于存储指令执行过程中需要操作的数据。
ARM体系结构中,常见的寄存器包括通用寄存器、程序计数器、状态寄存器等。
6. 多核处理器(Multi-core Processor):使用多个处理器核心的处理器。
ARM 架构支持多核处理器的设计,使得多个核心可以同时进行计算任务,提高处理能力和并行性能。
7. SoC(System on a Chip):一种集成了多个功能组件的芯片,包括处理器核心、内存控制器、I/O接口等。
ARM架构广泛应用于SoC的设计,提供了高度集成的解决方案,节省了系统板块的空间和功耗。
ARM9寻址方式及指令集介绍ARM9是一种32位精简指令集计算机(RISC)架构的微处理器。
在本文中,我们将介绍ARM9寻址方式和指令集的基本特点。
直接寻址是最简单的寻址方式,寻址单元根据操作码中给出的直接地址来访问内存。
例如,LDR指令将数据从内存中的特定地址加载到寄存器中。
直接寻址在寻址范围上有限制,因为地址是直接编码在指令中的。
间接寻址是通过一个保存数据的寄存器的地址来访问内存。
寄存器中的地址表示需要访问数据的内存地址。
例如,LDR指令可以使用R0寄存器中的地址来获取数据。
间接寻址使得程序可以动态地计算内存地址,提高了灵活性。
相对寻址是通过相对于当前指令地址的偏移量来访问内存。
偏移量在指令的操作码中给出,并且通常是一个8位或12位的整数。
相对寻址使得程序可以方便地访问位于当前指令之前或之后的内存位置。
基址寻址是通过一个基址寄存器和一个偏移量来访问内存,其中基址寄存器存储了起始地址,偏移量存储了与起始地址的相对位置。
例如,LDR指令可以使用R0寄存器作为基址寄存器,并使用R1作为偏移量。
基址寻址适用于访问数组或数据结构等连续的内存块。
核心寄存器寻址是指通过核心寄存器的内容来访问内存。
在ARM9架构中,核心寄存器包括程序计数器、堆栈指针和链接寄存器等。
这些寄存器具有特殊的寻址方式,允许对于特定的功能进行优化。
ARM9的指令集包括数据处理指令、分支和跳转指令、访存指令和特权指令等。
数据处理指令是最常用的指令类型,用于完成算术和逻辑操作。
例如,ADD指令将两个操作数相加,并将结果存储在目的寄存器中。
分支和跳转指令用于控制程序的流程。
例如,B指令可以根据条件跳转到指定的地址上。
访存指令用于读写内存和I/O端口。
例如,LDR指令可以将数据从内存加载到寄存器中,STR指令可以将寄存器中的数据存储到内存地址中。
特权指令用于进行特权级别的操作,例如,访问系统寄存器或控制外设。
这些指令一般只能由操作系统或系统软件使用。
ARMCORTEX-M3指令集名字功能ADC带进位加法ADD加法AND 按位与(原文为逻辑与,有误——译注)。
这里的按位与和C 的”&” 功能相同ASR算术右移BIC 按位清0(把一个数跟另一个无符号数的反码按位与)CMN 负向比较(把一个数跟另一个数据的二进制补码相比较)CMP比较(比较两个数并且更新标志)CPY把一个寄存器的值拷贝到另一个寄存器中EOR近位异或LSL 逻辑左移(如无其它说明,所有移位操作都可以一次移动最多 31格——译注)LSR逻辑右移MOV 寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数MUL乘法MVN加载一个数的 NOT 值(取到逻辑反的值)NEG取二进制补码ORR按位或(原文为逻辑或,有误——译注)ROR圆圈右移SBC带借位的减法SUB减法TST 测试(执行按位与操作,并且根据结果更新 Z )REV在一个32位寄存器中反转字节序REVH 把一个32位寄存器分成两个16位数,在每个16位数中反转字节序REVSH 把一个32位寄存器的低 16位半字进行字节反转,然后带符号扩展到 32位SXTB带符号扩展一个字节到 32位SXTH带符号扩展一个半字到 32位UXTB无符号扩展一个字节到 32位UXTH无符号扩展一个半字到 32位16位转移指令B无条件转移B条件转移BL 转移并连接。
用于呼叫一个子程序,返回地址被存储在 LR 中BLX #im使用立即数的BLX不要在CM3 中使用CBZ 比较,如果结果为 0 就转移(只能跳到后面的指令——译注)CBNZ 比较,如果结果非0 就转移(只能跳到后面的指令——译注)ARM CORTEX M3指令集16位数据操作指令IT If - Then16位存储器数据传送指令LDR从存储器中加载字到一个寄存器中LDRH从存储器中加载半字到一个寄存器中LDRB从存储器中加载字节到一个寄存器中LDRSH 从存储器中加载半字,再经过带符号扩展后存储一个寄存器中LDRSB 从存储器中加载字节,再经过带符号扩展后存储一个寄存器中STR把一个寄存器按字存储到存储器中STRH 把一个寄存器存器的低半字存储到存储器中STRB把一个寄存器的低字节存储到存储器中LDMIA 加载多个字,并且在加载后自增基址寄存器STMIA 存储多个字,并且在存储后自增基址寄存器PUSH压入多个寄存器到栈中POP从栈中弹出多个值到寄存器中其它16位指令名字功能SVC系统服务调用BKPT 断点指令。
ARM指令集详解ARM可以用两套指令集:ARM指令集和Thumb指令集。
本文介绍ARM指令集。
在介绍ARM指令集之前,先介绍指令的格式。
1 指令格式(1)基本格式<opcode>{<cond>}{S} <Rd>,<Rn>{,<opcode2>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。
opcode 指令助记符,如LDR,STR 等cond 执行条件,如EQ,NE 等S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器operand2 第二个操作数指令格式举例如下:LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件ALBEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVENADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有SSUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S(2)第2个操作数在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下:#immed_8r常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。
合法常量0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。
非法常量0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。
常数表达式应用举例如下:MOV R0,#1 ;R0=1AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,在寄存器方式下操作数即为寄存器的数值。
名字功能ADC带进位加法ADD加法AND 按位与(原文为逻辑与,有误——译注)。
这里的按位与和C 的”&” 功能相同ASR算术右移BIC 按位清0(把一个数跟另一个无符号数的反码按位与)CMN 负向比较(把一个数跟另一个数据的二进制补码相比较)CMP比较(比较两个数并且更新标志)CPY把一个寄存器的值拷贝到另一个寄存器中EOR近位异或LSL 逻辑左移(如无其它说明,所有移位操作都可以一次移动最多 31格——译注)LSR逻辑右移MOV 寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数MUL乘法MVN加载一个数的 NOT 值(取到逻辑反的值)NEG取二进制补码ORR按位或(原文为逻辑或,有误——译注)ROR圆圈右移SBC带借位的减法SUB减法TST 测试(执行按位与操作,并且根据结果更新 Z )REV在一个32位寄存器中反转字节序REVH 把一个32位寄存器分成两个 16位数,在每个 16位数中反转字节序REVSH 把一个32位寄存器的低 16位半字进行字节反转,然后带符号扩展到 32位SXTB带符号扩展一个字节到 32位SXTH带符号扩展一个半字到 32位UXTB无符号扩展一个字节到 32位UXTH无符号扩展一个半字到 32位16位转移指令B无条件转移B<cond>条件转移BL 转移并连接。
用于呼叫一个子程序,返回地址被存储在 LR 中BLX #im使用立即数的BLX不要在CM3 中使用CBZ 比较,如果结果为 0 就转移(只能跳到后面的指令——译注)CBNZ 比较,如果结果非 0 就转移(只能跳到后面的指令——译注)ARM CORTEX M3指令集16位数据操作指令IT If - Then16位存储器数据传送指令LDR从存储器中加载字到一个寄存器中LDRH从存储器中加载半字到一个寄存器中LDRB从存储器中加载字节到一个寄存器中LDRSH 从存储器中加载半字,再经过带符号扩展后存储一个寄存器中LDRSB 从存储器中加载字节,再经过带符号扩展后存储一个寄存器中STR把一个寄存器按字存储到存储器中STRH 把一个寄存器存器的低半字存储到存储器中STRB把一个寄存器的低字节存储到存储器中LDMIA 加载多个字,并且在加载后自增基址寄存器STMIA 存储多个字,并且在存储 后自增基址寄存器PUSH压入多个寄存器到栈中POP从栈中弹出多个值到寄存器中其它16位指令名字功能SVC系统服务调用BKPT 断点指令。
到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?⼀⽂帮你梳理基础概念【科普】前⾔有粉丝问我到底什么是ARM,搞不清楚Cortex、arm内核、arm架构、ARM指令集、soc这些概念都是什么关系,下⾯⼀⼝君给⼤家整理⼀下关于ARM相关的⼀些概念。
1、ARM既可以认为是⼀个公司的名字,也可以认为是对⼀类微处理器的通称,还可以认为是⼀种技术的名字。
2、ARM公司是专门从事基于RISC技术芯⽚设计开发的公司,作为知识产权供应商,本⾝不直接从事芯⽚⽣产,⽽是转让设计许可,由合作公司⽣产各具特⾊的芯⽚。
3、ARM处理器的内核是统⼀的,由ARM公司提供,⽽⽚内部件则是多样的,由各⼤半导体公司设计,这使得ARM设计嵌⼊式系统的时候,可以基于同样的核⼼,使⽤不同的⽚内外设,从⽽具有很⼤的优势。
下⾯我们针对这些概念,给⼤家逐⼀介绍。
ARM公司ARM⾸先是⼀个公司,即Advanced RISC Machines的缩写。
但是他本来并不叫这个名字,来看看ARM公司的成长历史。
1978年,⼀个名叫Hermann Hauser的奥地利籍物理学博⼠,还有他的朋友,⼀个名叫Chris Curry的英国⼯程师成⽴了⼀家名字叫“CPU”的公司。
这家CPU公司的全称,是Cambridge Processor Unit,字⾯意思是“剑桥处理器单元”。
CPU公司成⽴之后,主要从事电⼦设备设计和制造的业务。
他们接到的第⼀份订单,是制造赌博机的微控制器系统。
这个微控制器系统被开发出来后,称之为Acorn System 1。
之所以叫Acorn,就是因为他们想在电话黄页⾥排在Apple(苹果)公司的前⾯。
在Acorn System 1之后,他们⼜陆续开发了System 2、3、4,还有⾯向消费者的盒式计算机——Acorn Atom。
到了1981年,公司迎来了⼀个难得的机遇——英国⼴播公司BBC打算在整个英国播放⼀套提⾼电脑普及⽔平的节⽬,他们希望Acorn能⽣产⼀款与之配套的电脑。
ARM指令集、Thumb指令集、Thumb-2指令集
MCU使⽤什么指令集主要由内核决定的,⽐如Cortex-M3使⽤的是Thumb-2指令集
ARM指令集:
编代码全部是 32bits 的,每条指令能承载更多的信息,因此使⽤最少的指令完成功能,所以在相同频率下运⾏速度也是最快的,但也因为每条指令是32bits 的⽽占⽤了最多的程序空间。
Thumb指令集:
编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使⽤更多的指令才能完成功能,因此运⾏速度慢,但它也占⽤了最少的程序空间
Thumb-2指令集:
在前⾯两者之间取了⼀个平衡,兼有⼆者的优势,当⼀个操作可以使⽤⼀条 32bits指令完成时就使⽤ 32bits 的指令,加快运⾏速度,⽽当⼀次操作只需要⼀条16bits 指令完成时就使⽤16bits 的指令,节约存储空间。
Arm和mips:
1.向后兼容:MIPS基本上是完全向后兼容的,也就是MIPS32可以在MIPS64上跑,MIPS I
可以在MIPS II上跑。
而ARM指令集事实上不是完全向后兼容的,每隔一两代就要有一些变化
2.目标: MIPS最初是面向高性能科学计算的,所以在指令集设计的时候更注重速度和性能,
而非功耗和面积。
而ARM,低功耗是主旋律。
为了降低功耗、面积以及目标程序的
footprint(RISC的缺点之一就是编译出来的程序比CISC大不少)。
ARM要做很多自己的选择。
MIPS的非常简单,只有三种指令类型,加减乘除逻辑运算逻辑跳转等等都可以框进去。
ARM就非常复杂
MIPS指令很简单,格式很规整,就可以做很快(频率很高)。
这符合RISC的初衷,但是功耗可能会比较大些(和频率有关);ARM指令巨复杂,电路实现起来会比精简的指令相对复杂,当面积和功耗优先级高时,最高运行频率可能不会太高。
arm汇编mla指令ARM汇编语言是一种用于编写ARM处理器程序的低级编程语言。
它允许程序员直接操作硬件,实现对处理器的控制。
在ARM汇编语言中,MLA (Memory Load and Assign)指令是一种重要的加载和分配内存的操作指令。
1.ARM汇编简介ARM汇编语言具有高度可移植性,其指令集分为三种类型:ARM状态、Thumb状态和调试状态。
在ARM状态下,指令集主要包括数据处理、地址计算、内存访问等功能。
Thumb状态是一种16位指令集,用于执行小型的程序或作为ARM状态的补充。
调试状态用于进行程序的调试。
2.MLA指令的作用和用途MLA指令在ARM汇编语言中主要用于加载数据到寄存器并分配内存。
它可以实现将数据从内存中读取到寄存器,或者将数据从寄存器写入内存。
MLA指令在执行过程中,会根据操作数的数量和类型,完成相应的数据传输。
3.MLA指令的基本语法MLA指令的基本语法如下:```MLA <destination>, <source1>, <source2>```其中,<destination>表示目标寄存器,<source1>和<source2>表示源寄存器或内存地址。
在执行MLA指令时,会根据<source1>和<source2>的值,将数据从内存加载到目标寄存器。
4.MLA指令的实际应用示例以下是一个使用MLA指令的实际应用示例:```assemblyMLA R0, [R1], [R2]```这个指令将内存地址R1和R2中的数据加载到寄存器R0中。
5.MLA指令的注意事项在使用MLA指令时,需要注意以下几点:- 确保源寄存器或内存地址中的数据类型与目标寄存器中的数据类型一致。
- 当源寄存器或内存地址中的数据类型为复杂类型时,如结构体、联合体等,需要按照相应的内存对齐规则进行数据传输。
标题:深度探讨arm汇编指令转换成二进制指令规则在计算机科学领域中,汇编语言是一种底层的语言,可以直接操作计算机硬件的指令集架构。
ARM架构是一种流行的指令集架构,广泛应用于移动设备、嵌入式系统和物联网设备中。
在使用ARM汇编语言时,了解指令如何转换成二进制代码是非常重要的。
本文将深入探讨ARM 汇编指令转换成二进制指令的规则和原理。
一、ARM汇编指令简介ARM汇编指令是基于ARM指令集架构的汇编语言,用于编写底层程序,直接操作处理器的指令。
ARM指令集是一种精简指令集(Reduced Instruction Set Computing,RISC)架构,具有较高的性能和能耗效率。
ARM汇编指令通常包括数据处理、分支、存储和加载等类型的指令。
二、ARM汇编指令转换成二进制指令规则1. 指令格式ARM汇编指令的格式通常包括操作码(Opcode)、操作数(Operands)、寻址方式(Addressing Mode)等部分。
操作码表示具体的操作,操作数表示操作的对象,寻址方式表示操作数的寻址方式。
在转换成二进制指令时,不同的指令格式会对应不同的二进制编码。
2. 指令转换规则在ARM汇编指令转换成二进制指令时,需要根据指令的操作码、操作数和寻址方式来确定具体的二进制编码。
不同类型的指令有不同的转换规则,例如数据处理指令有特定的操作码格式,分支指令有特定的偏移位置区域编码格式等。
了解这些转换规则对于理解ARM汇编指令至关重要。
3. 举例分析举例来说,对于一个典型的ARM汇编指令“ADD R1, R2, #3”,其中ADD是操作码,R1和R2是操作数,#3是立即数。
根据ADD指令的转换规则,可以将该指令转换成对应的二进制指令,包括操作码字段、寄存器编码字段和立即数字段等部分。
三、个人观点和理解在深入研究ARM汇编指令转换成二进制指令规则的过程中,我对底层计算机运行原理有了更深入的理解。
了解指令的转换规则有助于理解计算机是如何运行程序的,对于系统编程和性能优化也非常有帮助。
ARM的32位指令格式及各部分功能一、ARM的32位指令格式ARM的32位指令格式分为四部分,包括指令操作码、条件码、寄存器和操作数。
1. 指令操作码指令操作码是指令的基本操作类型,为了方便指令的译码和执行,ARM指令集将指令操作码分为几类,包括数据处理指令、分支指令、访存指令等。
不同的指令操作码代表了不同的操作类型,如加法、乘法、移位、与操作等。
2. 条件码条件码用于指定指令在何种条件下执行,如等于零、不等于零、大于、小于等。
通过条件码的设置,可以实现根据不同条件来执行不同的指令,这样可以提高指令的灵活性和效率。
3. 寄存器ARM的32位指令格式中包括多个寄存器字段,用于指定指令的操作对象和操作结果的存放位置。
ARM架构中一般有16个通用寄存器和几个特殊用途的寄存器,不同的寄存器字段代表了不同的寄存器编号。
4. 操作数操作数是指令的操作对象,ARM的32位指令中包括多个操作数字段,用于指定指令的源操作数和目的操作数。
操作数可以是寄存器、立即数或内存位置区域等。
二、各部分功能1. 指令操作码的功能指令操作码代表了指令的操作类型,不同的指令操作码对应了不同的操作,比如数据处理指令可以进行加法、减法、逻辑运算等操作,分支指令可以实现程序的跳转,访存指令可以进行内存的读写操作。
2. 条件码的功能条件码用于指定指令的执行条件,通过设置条件码可以实现根据不同条件来执行不同的指令,这样可以提高程序的执行效率和灵活性。
3. 寄存器的功能寄存器用于存放指令的操作对象和操作结果,ARM的32位指令中包括多个寄存器字段,用于指定指令的源操作数和目的操作数。
寄存器的功能包括存储数据、临时存储和传递参数等。
4. 操作数的功能操作数是指令的操作对象,ARM的32位指令中包括多个操作数字段,用于指定指令的源操作数和目的操作数。
操作数的功能包括指定操作对象、传递参数和存储数据等。
结论ARM的32位指令格式包括指令操作码、条件码、寄存器和操作数四部分,各部分都有特定的功能,通过它们的组合可以实现丰富多样的指令操作和灵活的程序控制。
ARM指令集和X86指令集的⽐较⼀、背景知识:指令的强弱是CPU的重要指标,指令集是提⾼微处理器效率的最有效⼯具之⼀。
从现阶段的主流体系结构讲,指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分。
相应的,微处理随着微指令的复杂度也可分为CISC及RISC这两类。
CISC是⼀种为了便于编程和提⾼记忆体访问效率的晶⽚设计体系。
在20世纪90年代中期之前,⼤多数的微处理器都采⽤CISC体系──包括Intel的80x86和Motorola的68K系列等。
即通常所说的X86架构就是属于CISC体系的。
RISC是为了提⾼处理器运⾏的速度⽽设计的晶⽚体系。
它的关键技术在于流⽔线操作(Pipelining):在⼀个时钟周期⾥完成多条指令。
⽽超流⽔线以及超标量技术已普遍在晶⽚设计中使⽤。
RISC体系多⽤于⾮x86阵营⾼性能微处理器CPU。
像HOLTEK MCU系列等。
ARM ( Advanced RISC Machines ),既可以认为是⼀个公司的名字,也可以认为是对⼀类微处理器的通称,还可以认为是⼀种技术的名字。
⽽ARM体系结构⽬前被公认为是业界领先的32 位嵌⼊式RISC 微处理器结构。
所有ARM处理器共享这⼀体系结构。
因此我们可以从其所属体系⽐较⼊⼿,来进⾏X86指令集与ARM指令集的⽐较。
⼆、CISC和RISC的⽐较(⼀)CISC1.CISC体系的指令特征使⽤微代码。
指令集可以直接在微代码记忆体(⽐主记忆体的速度快很多)⾥执⾏,新设计的处理器,只需增加较少的电晶体就可以执⾏同样的指令集,也可以很快地编写新的指令集程式。
庞⼤的指令集。
可以减少编程所需要的代码⾏数,减轻程式师的负担。
⾼阶语⾔对应的指令集:包括双运算元格式、寄存器到寄存器、寄存器到记忆体以及记忆体到寄存器的指令。
2.CISC体系的优缺点优点:能够有效缩短新指令的微代码设计时间,允许设计师实现CISC体系机器的向上相容。
新的系统可以使⽤⼀个包含早期系统的指令超集合,也就可以使⽤较早电脑上使⽤的相同软体。
13ARM指令集与Thumb指令集指令格式ARM基本格式<opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn>{,<operand2>}opecode:指令助记符cond:执⾏条件助记符标志含义EQ Z=1相等NE Z=0不相等CS/HS C=1⽆符号数⼤于或等于CC/LO C=0⽆符号数⼩于MI N=1负数PL N=0正数或0VS 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任何⽆条件执⾏(指令默认条件)S:指令是否影响CPSR寄存器.W和.N:宽度说明符,默认16位,32位使⽤ .W说明符。
ARM和Thumb都可以使⽤1。
跳转指令,4条1。
B跳转:B{cond} label2。
BL带链接跳转(类似单步步⼊)将当前指令下⼀条指令地址存⼊R14寄存器,常⽤来调⽤⼦程序:BL{cond} label3。
BX带状态切换跳转(在ARM与Thumb之间切换)处理器判断Rm的位[0]为1,是则将CPSR寄存器标志T置位,切换⾄Thumb,反之切换为ARM:RX{cond} Rm4。
BLX带链接和状态切换的跳转:BLX{cond} Rm2。
存储器访问指令:LDR:寄存器←存储器格式:LDR{type}{cond} Rd,label LDRD{cond} Rd,Rd2,labelType取值:B:⽆符号字节(加载时0扩展为32位)SB:有符号字节(加载时符号扩展为32位)H:⽆符号半字节(加载时0扩展为32位)SH:有符号半字节(加载时符号扩展为32位)Rd:加载寄存器Label:读取的内存地址LDRD:⼀次加载双字的数据STR:寄存器→内存STR{type}{cond} Rd,labelSTRD{cond} Rd,Rd2,labelType中的SB和HS对STR⽆效LDM可以指定多个存储单元:寄存器←内存LDM{addr_mode}{cond} Rn{!} reglistaddr_mode:IA:Increase After,基址寄存器在执⾏指令后增加,默认IB:Increase Before,基址寄存器在执⾏指令前增加(仅ARM)DA:Decrease After,基址寄存器在执⾏指令后减少(仅ARM)DB:Decrease Before,基址寄存器在执⾏指令之前减少FD:满递减堆栈,堆栈向低地址⽣长,堆栈指针指向最后⼀个⼊栈的有效数据项 FA:满递增堆栈,堆栈向⾼地址⽣长,堆栈指针指向下⼀个要放⼊的空地址ED:空递减堆栈,堆栈向低地址⽣长EA:孔递增堆栈,堆栈向⾼地址⽣长Rn:基地址寄存器,存储初始地址!:可选后缀,有则最终地址将写回到Rn寄存器reglist:存储数据的寄存器列表,多个连续寄存器可⽤“-”链接,不连续⽤“,”分隔 STM:寄存器列表数据→内存 STM{addr_mode}{cond} Rn{!} reglistPUSH:将寄存器推⼊满递减堆栈PUSH{cond} reglistPOP:从满递减堆栈弹出寄存器信息POP{cond} reglistSWP:寄存器←→内存SWP{B}{cond} Rd,Rm,[Rn]B:可选字节,有B则交换字节否则交换32位的字cond:执⾏条件Rd:从内存中加载数据的寄存器Rm:写⼊数据的到内存的寄存器Rn:需要交换数据的存储器地址。