UAL is the assembler syntax used by the A32 and T32 instruction sets. A64 assembly language is the assembler syntax used by the A64 instruction set.
UAL in ARMv8 is unchanged from ARMv7.
The general statement format and operand order of A64 assembly language is the same as that of UAL, but there are some differences between them. Table 8 describes the main differences:
You make an instruction conditional by appending a condition code suffix directly to the mnemonic, with no delimiter. For example:
For conditionally executed instructions,
you separate the condition code suffix from the mnemonic using a
Apart from the
A64 provides several unconditionally executed instructions that use a condition code as an operand. For these instructions, you specify the condition code to test for in the final operand position. For example:
A64 is a fixed width 32-bit instruction
set so does not support
The core register names are R0-R15.
You must qualify register names to indicate the operand's data size, either 32-bit (W0-W31) or 64-bit (X0-X31).
You can refer to registers R13, R14 and R15 as synonyms for SP, LR, and PC respectively.
In AArch64, there is no register named W31 or X31. Instead, you can refer to register 31 as SP, WZR or XZR, depending on the context. You cannot refer to PC either by name or number. LR is an alias for register 30.
A32 has no equivalent of the extend operators.
You can specify an extend operator in
several instructions to control how a portion of the second source
register value is sign or zero extended. For example, in the following
ADD X1, X2, W3, UXTB #2