Constantes aritméticas
A linguagem assembler fornece constantes aritméticas dependentes do modo de montagem.
A linguagem assembler fornece quatro tipos de constantes aritméticas:
- Decimal
- octal
- Hexadecimal
- ponto flutuante
Em modo de 32-bit bits, o maior número inteiro positivo assinado que pode ser representado é o valor decimal (2 * *31)-1. O maior valor negativo é-(2 * *31). Em modo de 64-bit bits, o maior número inteiro positivo assinado que pode ser representado é (2 * *63) -1. O maior valor negativo é-(2 * *63). Independentemente da base (por exemplo, decimal, hexadecimal ou octal), o montador considera números inteiros como 32-bit constantes.
A interpretação de uma constante é dependente do modo de montagem. Em modo de 32-bit bits, o montador AIX® se comporta da mesma maneira que as versões anteriores do AIX® : o montador considera inteiros como 32-bit constantes. Em modo de 64-bit bits, todas as constantes são interpretadas como valores de 64-bit. Isso pode levar a resultados que diferem das expectativas. Por exemplo, no modo de 32 bits, o valor hexadecimal 0xFFFFFFFF é equivalente ao valor decimal "-1". No modo 64-bit, no entanto, o equivalente decimal é 4294967295. Para obter o valor "-1", deve ser usada a constante hexadecimal 0xFFFF_FFFF_FFFF_FFFF (ou o equivalente em octal) ou o valor decimal -1.
No modo 32-bit e 64-bit, o resultado de expressões inteiros pode ser truncado se o tamanho da área de armazenamento de destino for muito pequeno para conter um resultado de expressão. (Neste contexto, o truncamento refere-se à remoção do excesso de bits mais significativos.)
Para melhorar a legibilidade de constantes grandes, especialmente 64-bit valores, o montador aceitará constantes contendo o sublinhado ("_") caráter. O sublinhado pode aparecer em qualquer lugar dentro do número, exceto a primeira posição numérica. Por exemplo, considere a tabela a seguir:
| Valor Constante | Válido / Inválido? |
|---|---|
| 1_800_500 | Válidos |
| 0xFFFFFFFF_00000000 | Válidos |
| 0b111010_00100_00101_00000000001000_00 | Válido (esta é a instrução "ld 4,8 (5)") |
| 0x_FFFF | Inválido |
O terceiro exemplo mostra uma representação binária de uma instrução onde os caracteres sublinais são usados para delinear os vários campos dentro da instrução. O último exemplo contém um prefixo hexadecimal, mas o caractere imediatamente a seguir não é um dígito válido; a constante é, portanto, inválida.