linux net 伪指令码,1.2.2. ldr pWTCON

伪指令,就是“伪”的指令,是针对“真”的指令而言的。

真的指令就是那些常见的指令,比如上面说的arm的ldr,bic,msr等等指令,是arm体系架构中真正存在的指令,你在arm汇编指令集中找得到对应的含义。

而伪指令是写出来给汇编程序看的,汇编程序能看的伪指令具体表示的是啥意思,然后将其翻译成真正的指令或者进行相应的处理。

伪指令ldr语法和含义:

另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:

ldr r0, =0x12345678

这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。

只不过mov指令后面的立即数是有限制的,这个立即数,能够必须由一个8位的二进制数,即属于0x00-0xFF内的某个值,经过偶数次右移后得到,这样才是合法数据,而ldr伪指令没有这个限制。

那为何ldr伪指令的操作数没有限制呢,那是因为其是伪指令,写出来的伪指令,最终会被编译器解释成为真正的,合法的指令的,一般都是对应的mov指令。

这样的话,写汇编程序的时候,使用MOV指令是比较麻烦的,因为有些简单的数据比较容易看出来,有些数据即不容易看出来是否是合法数据。所以,对此,ldr伪指令的出现,就是为了解决这个问题的,你只管放心用ldr伪指令,不用关心操作数,而写出的ldr伪指令,编译器会帮你翻译成对应的真正的汇编指令的。

而关于编译器是如何将这些ldr伪指令翻译成为真正的汇编指令的,我的理解是,其自动会去算出来对应的操作数,是否是合法的mov 的操作数,如果是,就将该ldr伪指令翻译成mov指令,否则就用别的方式处理,我所观察到的,其中一种方式就是,单独申请一个4字节的空间用于存放操作数,然后用ldr指令实现。

在uboot中,最后make完毕之后,会生产u-boot,

通过:arm-linux-objdump –d u-boot > dump_u-boot.txt

就可以把对应的汇编代码输出到该txt文件了,其中就能找到伪指令:ldr r0, =0x53000000

所对应的,真正的汇编代码:33d00068:e3a00453 movr0, #1392508928; 0x53000000

所以被翻译成了mov指令。

而经过我的尝试,故意将0x53000000改为0x53000010,对应的生产的汇编代码为:33d00068:e59f0408 ldrr0, [pc, #1032]; 33d00478

......

33d00478:53000010 .word0x53000010

其中可以看到,由于0x53000010不是有效的mov的操作数,没法找到合适的0x00-0Xff去通过偶数次循环右移而得到,所以只能换成此处这种方式,即在另外申请一个word的空间用于存放这个值:33d00478:53000010 .word0x53000010

然后通过计算出相对当前PC的偏移,得到的地址,用ldr指令去除该地址中的值,即0x53000010,送给r0,比起mov指令,要复杂的多,也多消耗了一个word的空间。

对应地,其他的方式,个人理解,好像也可以通过MVN指令来实现,具体细节,有待进一步探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源中配备了详细的注释和文档,帮助用户快速理解代结构和实现逻辑。 适用人群: 这些源资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源资源进行课程实践、课外项目或毕业设计。通过分析和运行源,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源资源的可运行性和易用性,特别注意了以下几点:首先,每份源都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源中的注释和文档都非常完善,方便用户快速上手和理解代;最后,我会定期更新这些源资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值