ARM指令重难点小记

ARM指令重难点小记

 

 

一、LDR伪指令与ADR伪指令详解

a)  ADR的定义为:小范围的地址读取伪指令(地址无关代码)ADR指令将基于PC相对偏移的地址值读取到寄存器中,在编译源程序时ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现(当偏移量不能满足立即数规则时),则产生错误

b) LDR的定义为:大范围的地址读取伪指令(地址相关代码)LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或者MVN的范围,则使用MOVMVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。(优先使用MOVMVN指令代替该指令。)

c) 与加载指令LDR相比,伪指令LDR的参数有”=”

COUNT    EQU          0x30008000

LDR       R1, =COUNT               ;伪指令,将COUNT(0x30008000)作为地址赋给R1

LDR       R2, =0x30000000         ;伪指令,将立即数(0x30000000)作为地址赋给R2

LDR       R0, [R1]                        ;加载指令,将[R1]加载到R0

LDR       R0COUNT               ;加载指令,将COUNT中的值(0x30008000单元中的值)加载到R0

d) 当不能用MOV指令传送立即数时(不满足立即数规则),这个时候LDR伪指令就派上用场了,它可以处理任何32位的常量。

 

二、关于包含于ARM指令中的立即数规则

a) 对ARM指令中的立即数有这样的规定:“该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的”。

b) 32位指令中用了其中的12bit0-11位)来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2)8bit用来表示要移位的一个基数。

c) 立即数满足的条件:首先基数必须少于等于8位,然后是循环位移数必须是偶数。

d) 为什么这么做:一方面是无奈之举(只有12位);另一方面是可以表示的数更广泛,实际可用性比直接用12位好。

 

三、C与汇编的混合编程:

a) C程序中嵌入汇编指令(使用关键字__asm来标识一段汇编指令程序)

__asm

{

       ……汇编语言程序……

}

注意事项:(内嵌汇编一般是为了提高程序执行效率)

1)内嵌汇编中不能直接向PC寄存器赋值

2)通常,内嵌汇编中不要指定物理寄存器

3)内嵌汇编中,常量前面的”#”可以省略

4C程序中的标号可以被内嵌汇编指令使用,但是BL不能使用C的标号

(指令B则可以)

 

b) 在C程序中调用汇编函数

      i.首先在汇编中用EXPORT导出函数名(Lable),在末尾用mov pc, lr返回;

      ii.然后在C中声明函数原型,并加extern关键字;

      参数传递应该注意3点:

    (1)小于4个参数,用R0~R3

    (2)大于4个参数,用压栈的方式传递

    (3)函数的返回值用R0寄存器

 

c) 在汇编程序中访问C定义的全局变量

IMPORT        global

ldr          r0, =global

ldr         r1, [r0]

 

d) 在汇编程序中调用C函数

导入:IMPORT            cFun

传参:给R0~R3赋值

调用:bl        cFun

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值