5.arm和x86的常用指令用法

合集下载

ARM汇编语言指令总结

ARM汇编语言指令总结

ARM汇编语⾔指令总结ARM处理器有9种寻址⽅式:1、寄存器寻址,2、⽴即寻址,3、寄存器器移位寻址,4、寄存器间接寻址,5、基址寻址,6、多寄存器寻址,7、堆栈寻址,8、块拷贝寻址,9、相对寻址。

ARM指令集:ARM指令基本格式如下:{}{S} ,{,}其中<>的内容是必须的,{}的内容是可选的。

OPCODE指令助记符,COND执⾏条件,S是否影响CPSR中的值,Rd⽬标寄存器,Rn 第⼀个操作数的寄存器,OPERAND2第⼆个操作数。

灵活的使⽤第2个操作数“operand2”能够提⾼代码效率。

它有如下的形式:1)#immed_8r ——常数表达式;2)Rm——寄存器⽅式;3)Rm,shift——寄存器移位⽅式(ASR算术右移,LSL逻辑左移,LSR 逻辑右移,ROR循环右移,RRX带扩展的右移1位)。

COND执⾏条件:下⾯介绍ARM指令:1、存储器访问指令。

存储器访问指令分为单寄存器操作指令和多寄存器操作指令。

单寄存器操作指令LDR/STR指令⽤于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。

LDR:从内存到寄存器,加载数据。

STR:将寄存器的数据存储到内存。

LDRB操作字节,LDRH操作半字,LDRSH操作有符号半字。

多寄存器操作指令LDM为加载多个寄存器;STM为存储多个寄存器。

允许⼀条指令传送16个寄存器的任何⼦集或所有寄存器。

它们主要⽤于现场保护、数据复制、常数传递等。

进⾏数据复制时,先设置好源数据指针和⽬标指针,然后使⽤块拷贝寻址指令LDMIA/STMIA(传送后地址加4)、LDMIB/STMIB(传送前地址加4)、LDMDA/STMDA(传送后地址减4)、LDMDB/STMDB(传送前地址减4)进⾏读取和存储。

进⾏堆栈操作操作时,要先设置堆栈指针(SP),然后使⽤堆栈寻址指令STMFD/LDMFD(满递减堆栈)、STMED/LDMED(空递减堆栈)、STMFA/LDMFA(满递增堆栈)和STMEA/LDMEA(空递增堆栈)实现堆栈操作。

ARM指令的分类和主要指令

ARM指令的分类和主要指令

ARM指令的分类和主要指令。

分支指令、Load/Store指令、数据处理指令、程序状态寄存器指令、异常中断指令、协处理器
ARM有两种方法可以实现程序分支转移。

跳转指令:ARM跳转指令有以下4种:① B 分支指令②BL 带链接分支指令③BX 分支并可选地交换指令集④BLX 带链接分支并可选择地交换指令集。

长跳转指令:直接向PC寄存器(R15)中写入目标地址。

可以实现4GB地址空间中的任意跳转
Load/Store指令:单寄存器传输指令,多寄存器传输指令,交换指令
ARM数据处理指令大致分为以下6种类型:数据传送指令,算术运算指令,逻辑运算指令,比较指令,测试指令,乘法指令.
程序状态寄存器指令:读状态寄存器指令MRS,写状态寄存器指令MSR,指令举例,开中断与关中断
异常中断指令:复位(Reset),软件中断(software interrupt SWI),指令预取中止(Prefech Abort),数据访问中止(Data Abort),外部中断请求(IRQ),快速中断请求(FIQ)
ARM协处理器指令: ARM支持协处理器操作。

协处理器控制通过协处理器命令实现。

另外:
ARM伪指令: ARM伪指令不是ARM指令集中的指令,只是为了编程方便编译器定义了伪指令。

可以像其它ARM指令一样使用伪指令,但在编译时这些指令将被等效的ARM指令代替。

ARM伪指令有4条,分别为ADR伪指令、ADRL伪指令、LDR伪指令和NOP伪指令。

x86和arm程序编码方式

x86和arm程序编码方式

x86和arm程序编码方式计算机程序是一系列机器代码的指令集合。

程序编码方式是指将程序转化为机器代码的过程。

x86和ARM都是常见的CPU架构,它们的程序编码方式不同。

以下是它们的编码方式的详细解释。

x86是一种通用的CPU架构,常用于桌面电脑和服务器。

它的指令集是复杂的,具有大量的寄存器和多种数据传输方式。

x86指令集采用变长指令,指令长度可以是1个到15个字节不等。

x86的指令集结构分为四种:1. 数据存储指令数据存储指令用于操作数据寄存器和内存。

x86使用的是8、16、32或64位的数据寄存器。

数据存储指令有mov、push和pop等。

2. 运算指令运算指令用于执行算术和逻辑操作。

x86支持的运算指令有加、减、乘、除、与、或、非、异或等。

运算指令有add、sub、mul、div、and等。

3. 控制指令控制指令用于控制程序的执行流程。

x86支持的控制指令有跳转、调用和返回等。

控制指令有jmp、call和ret等。

4. x87指令集x87是x86的浮点运算指令集。

它可以支持浮点数的加、减、乘、除和其他复杂的数学运算。

x87指令集具有自己的寄存器和指令,类似于x86的通用寄存器。

ARM编码方式ARM是一种精简指令集(RISC)CPU架构,广泛用于移动设备和嵌入式系统中。

ARM的指令集结构非常简单,总共只有三种指令:加载/存储指令用于操作内存。

ARM使用的是32位寄存器和内存地址。

加载/存储指令有ldr、str等。

x86和ARM的编码方式之间的主要区别是指令集的结构和指令长度。

x86的指令集更为复杂,指令长度可以是1到15个字节不等。

ARM的指令集简单,指令长度固定为32位。

因此,ARM的程序比x86更加紧凑,具有更好的效率和性能。

同时,ARM的编码方式还支持多种优化技术,例如缩短指令长度、提高内存访问速度和增加并行处理能力等。

[Linux]CPU架构指令集:RISCCISCarmamdX86i386aarch64

[Linux]CPU架构指令集:RISCCISCarmamdX86i386aarch64

[Linux]CPU架构指令集:RISCCISCarmamdX86i386aarch641 前⾔本⽂是解决在软件开发、软件交付过程中,常常需要找寻与服务器硬件的CPU架构适配的软件包时,开发者和交付者⼜时常摸不着头脑、【迷迷糊糊】地就下载了某个所谓“适配”、“兼容”的各种软件包。

那么,我们真的get到了背后的关系(CPU指令集、CPU架构、CPU处理器/芯⽚、Soc(芯⽚上的系统)、x86_64架构、arm架构等等),这⼀层⾯了吗?正本清源,⽅能以更⾼de效率去理解、学习基于此的上层知识模块,降低开发风险、提⾼⼯作效率。

扯远啦~ 赶紧⼀把回来!那么,先从CPU架构所涉及的相关概念说起~2 基本概念2.0 CPU := 中央处理器Central Processing Unit,中央处理器。

CPU是计算机系统的核⼼和⼤脑,主要由控制器、运算器、存储器和连接总线构成。

其中,控制器和运算器组成CPU的内核,【内核】从存储器中提取数据,根据控制器中的指令集将数据解码,通过运算器中的微架构(电路)进⾏运算得到结果,以某种格式将执⾏结果写⼊存储器。

因此,内核的基础就是【指令集(指令集架构)】和【微架构】。

延申1:指令集(架构)指令集是所有指令的集合,它规定了CPU可执⾏的所有操作微架构是完成这些指令操作的电路设计。

相同的指令集可以有不同的微架构,如Intel 和AMD都是基于X86指令集但微架构不同。

指令集架构( Instruction Set Architecture ),⼜称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部 I/O 。

指令集架构包含⼀系列的 opcode 即操作码(机器语⾔),以及由特定处理器执⾏的基本命令。

简单地来说,指令集⼀般被整合在操作系统内核最底层的硬件抽象层中,属于计算机中硬件与软件的接⼝,它向操作系统定义了CPU的基本功能。

ARM中常用的汇编指令

ARM中常用的汇编指令

ARM 中常⽤的汇编指令1 处理器内部数据传输指令MSR & MRS⽤于在状态寄存器和通⽤寄存器之间传送数据MRS: 状态寄存器到通⽤寄存器的传送指令。

({R0-R12} <== CPSR,SPSR)MSR: 通⽤寄存器到状态寄存器的传送指令。

MRS:(CPSR,SPSR==>{R0-R12})MOVMOV 指令⽤于将数据从⼀个寄存器拷贝到另外⼀个寄存器,或者将⼀个⽴即数传递到寄存器⾥⾯,使⽤⽰例如下:2 存储器访问指令ARM 不能直接访问存储器,⽐如 RAM 中的数据,⼀般先将要配置的值写⼊到 Rx(x=0~12)寄存器中,然后借助存储器访问指令将 Rx 中的数据写⼊到寄存器中。

指令描述LDR Rd, [Rn , #offset]从存储器 Rn+offset 的位置读取数据存放到 Rd 中STR Rd, [Rn, #offset]将 Rd 中的数据写⼊到存储器中的 Rn+offset 位置LDR 指令LDR 主要⽤于从存储加载数据到寄存器 Rx 中, LDR 也可以将⼀个⽴即数加载到寄存器 Rx中, LDR 加载⽴即数的时候要使⽤“=”,⽽不是“#”。

在嵌⼊式开发中, LDR 最常⽤的就是读取 CPU 的寄存器值。

上述代码就是读取寄存器中的值,读取到的寄存器值保存在 R1 寄存器中,上⾯代码中 offset 是 0,也就是没有⽤到 offset。

STR 指令LDR 是从存储器读取数据, STR 就是将数据写⼊到存储器中LDR 和 STR 都是按照字进⾏读取和写⼊的,也就是操作的 32 位数据,如果要按照字节、半字进⾏操作的话可以在指令“LDR”后⾯加上B 或 H,⽐如按字节操作的指令就是 LDRB 和STRB,按半字操作的指令就是 LDRH 和 STRH。

MRS R0, CPSR @ 将特殊寄存器 CPSR ⾥⾯的数据传递给 R0,即R0=CPSR1MSR CPSR , R0 @ 将 R0 中的数据复制到 CPSR 中,即 CPSR =R01MOV R0, R1 @ 将寄存器 R1 中的数据传递给 R0,即 R0=R1MOV R0, #0X12 @ 将⽴即数 0X12 传递给 R0 寄存器,即 R0=0X1212LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, [R0] @ 读取地址 0X0209C004 中的数据到 R1 寄存器中12LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, =0X20000002 @ R1 保存要写⼊到寄存器的值,即R1=0X20000002STR R1, [R0] @ 将 R1 中的值写⼊到 R0 中所保存的地址中1233 压栈和出栈指令我们通常会在 A 函数中调⽤ B 函数,当 B 函数执⾏完以后再回到 A 函数继续执⾏。

ARM指令大全

ARM指令大全

目录一、跳转指令 (4)1、B指令 (4)2、BL指令 (4)3、BLX指令 (4)4、BX指令 (5)二、数据处理指令 (5)1、MOV指令 (5)2、MVN指令 (5)3、CMP指令 (6)4、CMN指令 (6)5、TST指令 (6)6、TEQ指令 (7)7、ADD指令 (7)8、ADC指令 (7)9、SUB指令 (7)10、~~~~C指令 (8)11、R~~~~指令 (8)12、RSC指令 (8)13、AND指令 (9)14、ORR指令 (9)15、EOR指令 (9)16、BIC指令 (9)三、法指令与乘加指令 (10)1、MUL指令 (10)2、MLA指令 (10)3、SMULL指令 (10)4、SMLAL指令 (11)5、UMULL指令 (11)6、UMLAL指令 (11)四、程序状态寄存器访问指令 (12)1、MRS指令 (12)2、MSR指令 (12)五、加载/存储指令 (12)1、LDR指令 (12)2、LDRB指令 (13)3、LDRH指令 (14)4、STR指令 (14)5、STRB指令 (14)6、STRH指令 (15)六、批量数据加载/存储指令 (15)LDM(或STM)指令 (15)IA (15)IB (15)DA (15)DB (15)FD (15)ED (15)FA (15)EA (15)七、数据交换指令 (16)1、SWP指令 (16)2、SWPB指令 (16)八、移位指令(操作) (16)1、LSL(或ASL) (17)2、LSR (17)3、ASR (17)4、ROR (17)5、RRX (17)九、协处理器指令 (18)1、CDP指令 (18)2、LDC指令 (18)3、STC指令 (18)4、MCR指令 (19)5、MRC指令 (19)十、异常产生指令 (19)1、SWI指令 (19)2、BKPT指令 (20)一、符号定义(Symbol Definition)伪指令 (20)1、GBLA、GBLL和GBLS (20)2、LCLA、LCLL和LCLS (21)3、SETA、SETL和SETS (22)4、RLIST (22)二、数据定义(Data Definition)伪指令 (23)1、DCB (23)2、DCW(或DCWU) (23)3、DCD(或DCDU) (24)4、DCFD(或DCFDU) (24)5、DCFS(或DCFSU) (25)6、DCQ(或DCQU) (25)7、SPACE (25)8、MAP (26)9、FILED (26)三、汇编控制(Assembly Control)伪指令 (27)1、IF、ELSE、ENDIF (27)2、WHILE、WEND (28)3、MACRO、MEND (29)4、MEXIT (29)四、其他常用的伪指令 (30)1、AREA (30)2、ALIGN (31)3、CODE16、CODE32 (31)4、ENTRY (32)5、END (32)6、EQU (33)7、EXPORT(或GLOBAL) (33)8、IMPORT (34)9、EXTERN (35)10、GET(或INCLUDE) (35)11、INCBIN (36)12、RN (36)13、ROUT (37)一、跳转指令跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:Ⅰ.使用专门的跳转指令。

CPU常用操作指令

CPU常用操作指令

CPU常用操作指令汇编语言是一种低级别的计算机程序语言,用于直接控制和操作计算机的中央处理器(CPU)。

在编写汇编语言程序时,需要使用一系列的操作指令来完成各种任务。

下面是一些常用的CPU操作指令及其功能的汇编语言示例。

1.MOV:将数据从一个位置传输到另一个位置。

示例:MOVAX,BX;将BX寄存器的内容传送到AX寄存器2.ADD/SUB:进行加法或减法操作。

示例:ADDAX,BX;将BX寄存器的内容加到AX寄存器SUBAX,BX;从AX寄存器中减去BX寄存器的内容3.INC/DEC:将操作数的值增加或减少1示例:INCAX;将AX寄存器的值增加1DECBX;将BX寄存器的值减少14.CMP:比较两个操作数的值,设置标志寄存器的状态以供条件跳转指令使用。

示例:CMPAX,BX;比较AX和BX寄存器的值5.JMP:无条件跳转到指定地址。

6.JE/JNE:根据标志寄存器的状态,执行条件跳转。

7.AND/OR/XOR:进行逻辑与、逻辑或或逻辑异或操作。

示例:ANDAX,BX;将AX和BX寄存器的值进行逻辑与操作ORAX,BX;将AX和BX寄存器的值进行逻辑或操作XORAX,BX;将AX和BX寄存器的值进行逻辑异或操作8.PUSH/POP:将数据压入栈或从栈中弹出数据。

示例:PUSHAX;将AX寄存器的值压入栈中POPBX;从栈中弹出数据,并将其存入BX寄存器9.CALL/RET:调用子程序或从子程序返回。

示例:CALL subroutine ; 调用名为"subroutine"的子程序RET;从子程序返回到调用位置10.INT:触发中断。

示例:INTn;触发编号为n的中断这些是一些常用的CPU操作指令的示例,每个指令都有具体的功能和用法。

在汇编语言编程中,根据具体的需求选择合适的指令来完成要求的任务。

因为汇编语言直接与硬件进行交互,所以熟悉这些操作指令对于理解和优化程序性能非常重要。

CPU常用操作指令

CPU常用操作指令

CPU常用操作指令CPU常用操作指令是指在汇编语言中使用的一些常见的指令,用于完成各种任务和操作。

这些指令可以用于数据传输、算术运算、逻辑运算、条件分支等各种操作。

下面我将列举一些常见的CPU操作指令,并介绍它们的用途和示例。

1.MOV指令:用于将数据从一个地方移动到另一个地方。

例如,将一个寄存器中的值移动到另一个寄存器中,或将一个内存单元中的值移动到一个寄存器中。

示例:MOVAX,BX;将BX中的值移动到AX中MOV[BX],10;将值10存储到BX所指向的内存单元中2.ADD指令:用于执行整数的加法操作。

可以将两个寄存器中的值相加,或将一个寄存器中的值与一个立即数相加。

示例:ADDAX,BX;将AX和BX中的值相加,并将结果存储到AX中ADDAX,10;将AX中的值与10相加,并将结果存储到AX中3.SUB指令:用于执行整数的减法操作。

可以将两个寄存器中的值相减,或将一个寄存器中的值与一个立即数相减。

示例:SUBAX,BX;将AX和BX中的值相减,并将结果存储到AX中SUBAX,10;将AX中的值减去10,并将结果存储到AX中4.MUL指令:用于执行无符号整数的乘法操作。

可以将一个寄存器中的值与另一个寄存器中的值相乘,并将结果存储到两个乘积寄存器中。

示例:MOVAX,10;将值10存储到AX中MOVBX,5;将值5存储到BX中MULBX;将AX中的值与BX中的值相乘,并将结果存储到AX和DX中5.DIV指令:用于执行无符号整数的除法操作。

可以将一个寄存器中的值与另一个寄存器中的值相除,并将商存储到一个寄存器中,余数存储到另一个寄存器中。

示例:MOVAX,20;将值20存储到AX中MOVBX,5;将值5存储到BX中DIVBX;将AX中的值除以BX中的值,并将商存储到AX中,余数存储到DX中6.AND指令:用于执行逻辑与操作。

可以将一个寄存器中的值与另一个寄存器中的值进行逻辑与运算,并将结果存储到一个寄存器中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Arm和x86是两种常见的指令集架构,分别用于移动设备和个人电脑。

它们的指令集有很多共同之处,但也有一些差异。

本文将介绍Arm和
x86的常用指令用法,以帮助读者更好地理解这两种架构的特点和优
劣势。

一、Arm指令集架构(Arm ISA)
Arm是一种RISC(Reduced Instruction Set Computer)架构,其
指令集相对较小,执行效率较高。

Arm指令集包括以下几类指令:
1. 数据传送指令:包括MOV(数据传送)、LDR(加载)、STR(存储)等指令,用于在寄存器和内存之间传递数据。

2. 算术运算指令:包括ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等指令,用于进行各种算术运算。

3. 逻辑运算指令:包括AND(与)、ORR(或)、EOR(异或)、NOT(取反)等指令,用于执行逻辑运算。

4. 分支跳转指令:包括B(无条件跳转)、BEQ(等于时跳转)、BNE(不等于时跳转)等指令,用于在程序中实现跳转功能。

5. 特权指令:包括MRS(读特权寄存器)、MSR(写特权寄存器)、
SVC(软中断)等指令,用于管理处理器的特权模式和中断处理。

以上是Arm指令集中的一些常用指令,通过它们可以实现各种功能和操作。

二、x86指令集架构(x86 ISA)
x86是一种CISC(Complex Instruction Set Computer)架构,其
指令集较大且复杂,包括以下几类指令:
1. 数据传送指令:包括MOV(数据传送)、LEA(加载有效位置区域)、XCHG(交换数据)等指令,用于在寄存器和内存之间传递数据。

2. 算术运算指令:包括ADD(加法)、SUB(减法)、IMUL(整数
乘法)、IDIV(整数除法)等指令,用于进行各种算术运算。

3. 逻辑运算指令:包括AND(与)、OR(或)、XOR(异或)、NOT(取反)等指令,用于执行逻辑运算。

4. 分支跳转指令:包括JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)等指令,用于在程序中实现跳转功能。

5. 特权指令:包括IN(从I/O端口读数据)、OUT(向I/O端口写数
据)、HLT(暂停处理器)等指令,用于管理处理器的特权模式和I/O 操作。

以上是x86指令集中的一些常用指令,通过它们可以实现各种功能和操作。

三、Arm和x86指令集的比较
1. 复杂度:Arm指令集相对简单,执行效率高,适用于嵌入式系统和移动设备;x86指令集较为复杂,包含更多的指令和功能,适用于个人电脑和服务器系统。

2. 兼容性:Arm架构在移动设备领域具有广泛的应用,如手机、平板电脑和智能手表;x86架构主要用于个人电脑和服务器,具有更好的兼容性和扩展性。

3. 性能:Arm架构在功耗控制和节能方面优势明显,适合于移动设备和嵌入式系统;x86架构在性能和计算能力方面具有优势,适用于高性能计算和大型服务器系统。

四、Arm和x86指令集的应用场景
1. 移动设备领域:Arm架构被广泛应用于移动设备,如智能手机、平
板电脑和可穿戴设备,因其低功耗和高性能而备受青睐。

2. 个人电脑领域:x86架构是个人电脑的主流架构,如Intel和AMD 的处理器均采用x86指令集,具有较高的计算能力和兼容性。

3. 服务器与工作站领域:x86架构在企业级服务器和高性能工作站上具有较大市场份额,主要用于大规模计算和数据处理。

Arm和x86是两种主流的指令集架构,各自具有不同的特点和优势,在各自的应用领域发挥着重要作用。

随着移动计算和物联网技术的发展,Arm架构在移动设备和嵌入式系统中的应用将会进一步扩大;而x86架构在高性能计算和服务器领域仍将占据重要地位。

未来,随着人工智能和物联网等新兴技术的发展,Arm和x86架构都会面临新的挑战和机遇,需要不断优化和创新,以满足不断变化的市场需求。

相关文档
最新文档