美文网首页ARM硬件架构 程序员
A64汇编 VS UAL汇编的差异

A64汇编 VS UAL汇编的差异

作者: 赵国开 | 来源:发表于2018-09-08 15:32 被阅读4次

    现在的ARMv8中存在两种形式的汇编指令集,一种为兼容32系统架构的UAL汇编(UAL是对之前A32及T32汇编指令集的一种归一化),另外一种是在64位系统架构中使用的A64汇编。

    备注:在ARMv8中使用的UAL与ARMv7相比并没有变化。

    A64汇编的一般的句法格式和操作数顺序和UAL汇编相比并没有什么变化,但是还是存在一些不同,下面对主要的一些不同进行说明:

    • 指令长度
      A64的指令长度是固定的32位的,而UAL支持16位和32位的,并支持通过.W和 .N 的宽度说明符来指示汇编器去生成编码长度是16位/32位的T32指令(比如:B.W label)。
    • 通用寄存器长度选择
      A64可以通过别名把64位的通用寄存器当32位的来用,只用到32位长度用W0-W30,用到64位的长度用X0-X30,而UAL只有32位的 R0-R15
    • SP, LR, PC的差异
      在A64是不能通过寄存器名字/编号来访问PC的,可以访问LR(与X30同义),而SP只在某些上下文中有意义(SP依赖以编号31的寄存器,但寄存器编号为31的寄存器在不同的上下文中可表示为SP,WZR/XZR,需要注意的是A64中是不存在 W31/X31这个命名的),但UAL中你即可以访问R13,R14,R15 也可以用SP,LR,PC来代替。
    • 条件执行的表示方式
      A64中要进行条件执行,指令助记符和条件码之间要有分隔符(用点"."表示),比如B.EQ label,而UAL是没有分隔符的BEQ label
    • 无条件执行中条件码作为操作数
      A64提供了几种把条件码当作操作数的无条件执行指令(比如:CSEL w1,w2,w3,EQ,这边的最后一个位置是条件码),而UAL中只有IT支持把条件码当做操作数。
    • 扩展运算符
      A64在多个指令中可支持控制第二个源寄存器的值进行部分符号/零扩展(比如:ADD X1, X2, W3, UXTB #2,其中UXTB是扩展类型表示零扩展),UAL中没有类似的扩展运算符。

    参考资料

    【1】DUI0801I_armasm_user_guide

    相关文章

      网友评论

        本文标题:A64汇编 VS UAL汇编的差异

        本文链接:https://www.haomeiwen.com/subject/kvzkgftx.html