前面的系列文章在讲解ARM汇编语言的时候,穿插了一些对ARMv8相较于前代处理器变化的描述,但还有一些改动和演进未曾提及,本文将继续展现这部分内容。

【任我行的PC

在x86架构中,直接修改IP(Instruction Pointer, 对应ARM里的PC)是不被允许的,只能通过间接的方式来实现地址的跳转。但在ARM的世界中,很长一段时间里,汇编代码是可以直接更改PC(R15)寄存器的值的,这确实给了程序设计者更大的自由,对于艺高胆大的,还可以由此玩出好多花样来。

然而,这种自由所付出的代价是增加了编译器的复杂度,也阻碍了更深的指令流水线的设计,最终在ARMv8中,直接访问PC的方式也同x86一样,被禁止了。

【零的妙用

在Linux的根文件系统中,dev目录下有个特殊的设备文件"zero"。作为source,读取"/dev/zero"可以产生众多的null字符(0x00);作为sink,任何写入"/dev/zero"的字符都将被吞没。

事实上,这两种应用的需求都是广泛存在的,所以ARMv8也在硬件层面引入了一个新的zero register(XZR/WZR),效果和软件层面的"/dev/zero"类似,作为源寄存器产生0,作为目标寄存器丢弃传入的数据。

比如我们要将一些变量赋值为0,因为ARM不允许直接操作内存单元上的数据,所以需要先将一个寄存器置为0,然后再讲这个寄存器的内容store到变量所在的内存单元上,像这样:

mov  r0, #0
str  r0, [...]

有了zero register,一条指令就可以解决问题:

str  wzr, [...]

ARMv8的通用寄存器编号是X0到X29,共30个,在指令编码中,这需要5个bits,而5个bits最多可以表示

个寄存器,

从编码的角度,这剩下的X30和X31不用真是浪费。链接寄存器LR先下手为强,把X30占了,还剩下一个X31,然后XZR/WZR和栈指针寄存器SP都想要,谈判的结果就是双方共用:

带来的影响就是两者不能共存,如果某条指令(比如ADD)使用了SP,就不能再同时使用XZR/WZR了。

ADD SP, SP, #0x10      // Adjust SP to be 0x10 bytes before its current valu

不过,像ADD这种可以直接使用SP的指令很少,因而其他的大多数指令都是可以使用XZR/WZR的。需要注意的是,XZR/WZR和SP都只是借用了X31的编码位置,而"X31"这个概念本身在ARMv8里是不存在的。

【32位向64位的代码移植

前文提到,ARMv8有AArch64和AArch32两种执行状态,一个运行在AArch32状态的操作系统只支持AArch32的应用程序,而运行在AArch64状态的操作系统同时支持AArch32和AArch64的应用程序(参考这篇文章)。

这就涉及到32位的代码向64位移植的问题。ARM中64位的数据模型(data model)不只一种,而是分为LP64和LLP64,其主要区别体现在对数据类型"long"占几个字节的定义。

在下图所示的这三种数据模型中,"I", "L"和"P"分别代表int, long和pointer,所以ILP32就表示int, long和pointer都是占32个bits,LP表示long和pointer都是占64个bits,LLP表示long long和pointer都是占64个bits。

可见,32位的ILP32和64位的LLP64的差异仅仅体现在pointer上,所以如果你原来的32位代码没有使用pointer,并且在64位代码中使用LLP64模型,那么移植就会比较简单。但现实中完全不使用pointer的情况并不多见,这个时候我们可能就需要对32位下的代码做出一些改动。

来看下面这个例子,"struct foo"在32位下的对齐是没有问题的,但是放在64位环境下,为了保持结构体的8字节自然对齐(natural alignment),中间就会空出一块,浪费存储空间。如果稍加调整,把指针"p"的位置挪动一下,就又形成了不留空隙的自然对齐。

原创文章,转载请注明出处。

armv8 汇编 绝对地址赋值_ARMv8带来的变化相关推荐

  1. armv8 汇编 绝对地址赋值_详解汇编语言B和LDR指令与相对跳转和绝对跳转的关系...

    @[TOC] 为什么要有相对跳转和绝对跳转? 顺序执行:指令一条一条按照顺序往下执行,比如变量的定义和赋值都是按照顺序执行的.跳转执行:当指令执行到当前位置后跳转到其他位置执行.比如,在主函数中调用其 ...

  2. armv8 汇编 绝对地址赋值_GNU风格 ARM汇编语法指南(非常详细)

    GNU风格 ARM汇编语法指南(非常详细) 汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1.GN ...

  3. php7 ast,PHP7新特性之抽象语法树(AST)带来的变化详解

    本文分析了PHP7新特性之抽象语法树(AST)带来的变化.分享给大家供大家参考,具体如下: 这里大部分内容参照 AST 的 RFC 文档而成:https://wiki.php.net/rfc/abst ...

  4. 可折叠Web可能会给我们带来的变化

    简介:可折叠Web即将到来,我们应该去思考可折叠Web可能会给我们带来什么变化,如果这一天真的到来,我们的技术能否支持该设备? 作者 | 大漠 可折叠Web的说法是可折叠设备带来的.可折叠设备形式多样 ...

  5. 计算机对农业领域带来的变革,智慧农业将给农业带来哪些变化?

    原标题:智慧农业将给农业带来哪些变化? 一.什么是智慧农业? 智慧农业是指充分应用信息技术成果,集成应用计算机与网络技术.物联网技术.音视频技术.3S技术.无线通信技术及专家智慧与知识实现农业可视化远 ...

  6. 计算机信息技术为教育带来的变化,信息技术对课堂教学带来的变化

    信息技术对课堂教学带来的变化 谈一谈信息技术对教育教学的影响以及给课堂教学带来的变化 龙川县培英学校 骆俊武 在信息技术迅速发展的今天,计算机的应用.网络技术应用,直接影响着学校的的教育教学系统.学校 ...

  7. 聊聊安卓折叠屏给交互设计和开发带来的变化

    很多年前,前端同学都觉得PC端的适配(兼容处理)难,都认为移动端的时代适配会容易得多,也无需考虑那么多的事情.事实并非如此,移动端的时代同样面临着各种适配的处理.特别是刘海机的出现,前端需要考虑刘海机 ...

  8. 体验QQ2011Beta3带来的变化和惊喜

    体验QQ2011Beta3带来的变化和惊喜<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offic ...

  9. 聚焦惠普质量问题是否带来行业变化?

    聚焦惠普质量问题是否带来行业变化? 文  小刀马  在3·15晚会后,笔者写了一篇关于惠普质量门的稿子.业界也有大量的文章连篇累牍地述说着这个事件.经过几天的喧闹之后,我们再回过头来看这个事件引起的反 ...

最新文章

  1. 【FFmpeg】FFmpeg编解码H264产生马赛克、伪影的解决方法
  2. 数组-sort,reverse
  3. 微软Exchange Server 2013 CU11更新已发布
  4. 市面上热门的咖啡网站管理系统 v3.0
  5. JSP自定义标签入门实例
  6. python缓存memoryerror_Python安装会抛出大量MemoryError()的
  7. Python 100 例
  8. JPDA 架构研究4 - JDWP的传输器
  9. c语言投票程序设计报告书,C语言程序设计报告书
  10. Centos 8 安装和配置 VNC 服务,让 MAC 可以远程桌面管理Centos(linux)
  11. python列表后面两个括号_python列表[]中括号
  12. LLVM CLANG 3.1 GCC 4.7 INTEL CORE I7 BENCHMARKS
  13. 《高质量程序设计指南——C++/C》重印啦!
  14. 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
  15. 单元化架构之流量调度篇
  16. 4.16 期货每日早盘操作建议
  17. clion_gcc报错
  18. Google Chrome 更新失败(错误:3)检查更新时出错
  19. @18. 自幂数、水仙花数、四叶玫瑰数等等是什么?
  20. 【报告分享】衣物护理生活小电器—消毒、干衣需求创新报告-TMIC消费者洞察(附下载)

热门文章

  1. 小程序-云开发部署流程(步骤二)
  2. Scrum 冲刺博客第二篇
  3. 零基础学python-3.2 变量赋值
  4. linux expr命令
  5. .net 中 GridViewRow使用字段名来访问数据,而不是使用索引
  6. 白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
  7. 申请MVP成功,发贴祝贺!
  8. wifi动不动就断开_手机信号满格,但是WIFI经常掉线!我来教你怎么办
  9. application配置token_Kerrigan:配置中心管理UI的实现思路和技术细节
  10. 2020公文格式模板及范文_四六级考试答题顺序推荐 2020四级作文预测 四级作文范文模板...