Formato da instrução do MASM
Sintaxe
As instruções são escritas no código-fonte de acordo com esta sintaxe:
Para obter informações sobre opções, codificação e definições de instrução, consulte os Manuais de Programação do Fabricante do Processador. Algumas instruções e opções de instrução podem não ter suporte do Microsoft Macro Assembler.
Prefix
Você pode prefixar algumas instruções com palavras-chave que definem opções de como a instrução é codificada. As palavras-chave REP
, REPE
, REPZ
, REPNE
e REPNZ
as palavras-chave são usadas com instruções de cadeia de caracteres para realizar operações do tipo memcpy
ou strlen
em uma única instrução. A palavra-chave LOCK
torna determinadas operações em operandos de memória atômicas. Você pode combiná-la com as palavras-chave XACQUIRE
e XRELEASE
para executar omissão do bloqueio de hardware o (HLE) em processadores com suporte, o que permite maior paralelismo transacional em determinados casos.
Os prefixos restantes controlam como as instruções AVX são codificadas. As instruções AVX são codificadas usando um prefixo VEX
, que aparece antes do opcode. Ele assume o lugar de determinados prefixos de instrução de bytes e bytes de entrada opcode. Muitas instruções AVX também são instruções AVX-512, que são codificadas usando um prefixo EVEX
que dá suporte a mais opções. O MASM tenta codificar instruções da forma mais compacta possível, mas essas palavras-chave permitem mais controle sobre qual codificação usar com uma instrução específica. Eles também são usados para forçar a geração de formulários de instrução AVX que foram introduzidos após a instrução AVX-512 correspondente. Por exemplo, vex vpdpbusd
especifica o formulário AVX-VNNI das instruções VPDPBUSD
em vez do formulário AVX512-VNNI. Quando uma instrução AVX aparece sem uma palavra-chave de prefixo explícito, a codificação escolhida depende da configuração de codificação AVX atual. A diretiva OPTION AVXENCODING
permite alterar essa configuração.
As opções VEX2
, VEX3
, VEX
e EVEX
estão disponíveis no Visual Studio 2019 versão 16.7 e posteriores.
Palavra-chave | Uso |
---|---|
REP |
Repita a operação com cadeia de caracteres pela contagem em (E)CX. |
REPE REPZ |
Repita a operação com cadeia de caracteres enquanto a comparação for igual, limitada pela contagem em (E)CX. |
REPNE REPNZ |
Repita a operação de cadeia de caracteres enquanto a comparação não for igual, limitada pela contagem em (E)CX. |
LOCK |
Execute a operação atomicamente em um operando de memória. |
XACQUIRE |
Inicie uma transação HLE, mais frequentemente usada com o prefixo LOCK . |
XRELEASE |
Conclua uma transação HLE, mais frequentemente usada com o prefixo LOCK . |
VEX |
Codifique uma instrução AVX usando um prefixo VEX . |
VEX2 |
Codifique uma instrução AVX usando um prefixo VEX de 2 bytes. |
VEX3 |
Codifique uma instrução AVX usando um prefixo VEX de 3 bytes. |
EVEX |
Codifique uma instrução AVX usando um prefixo EVEX . |
Mnemônico
O mnemônico identifica uma instrução específica, que determina os prefixos e padrões de operando permitidos.
Lista de operandos
A maioria das instruções usa uma lista de operandos para especificar os operandos de origem e de destino explícitos para a instrução. A lista de operandos pode conter referências de memória, registros e valores constantes. Cada instrução permite que apenas determinados tipos de operandos apareçam em cada posição na lista de operandos. Exceto pelas instruções MOVS
e CMPS
, apenas um dos operandos pode ser uma referência de memória; todos os outros operandos devem ser referências de registro ou constantes.
Opções do AVX-512
Algumas instruções AVX-512 permitem que mais opções sejam especificadas. Essas opções são: mascaramento, mascaramento zero, transmissão inserida, arredondamento inserido e supressão de exceção.
O mascaramento permite que uma operação seja aplicada somente a elementos selecionados de um vetor. Essa opção é controlada colocando um registro de máscara de {k1}
a {k7}
depois do operando de destino. Se o registro de máscara for seguido por {z}
, todos os elementos não selecionados do destino serão definidos como zero. Essa alternativa é conhecida como mascaramento zero.
ATransmissão Inserida permite que um valor escalar na memória seja aplicado a todos os elementos de um vetor. Essa opção é habilitada adicionando o tamanho do elemento e a palavra-chave BCST
ao operando de memória, que é semelhante ao uso de PTR
para referências de memória normais.
O Arredondamento Inserido controla o modo de arredondamento para uma instrução de ponto flutuante individual, sem precisar definir e redefinir o modo de arredondamento global. Ele é habilitado seguindo a instrução com o modo de arredondamento entre chaves. Quando habilitado, ele também suprime todas as exceções somente para essa instrução. Instruções de ponto flutuante que não arredondam também podem suprimir todas as exceções usando uma opção semelhante.
; Examples of AVX-512 options
vaddps xmm1 {k1}, xmm2, xmm3 ; merge-masking
vsubps ymm0 {k4}{z}, ymm1, ymm2 ; zero-masking
vmulps zmm0, zmm1, dword bcst scalar ; embedded broadcast
vdivps zmm0, zmm1, zmm2 {rz-sae} ; embedded rounding
vmaxss xmm1, xmm2, xmm3 {sae} ; suppress all exceptions
Modos de arredondamento
Mode | Efeito |
---|---|
rn-sae |
Arredondar para o mais próximo, arredondar para o par, suprimir todas as exceções. |
rz-sae |
Arredondar para zero, suprimir todas as exceções. |
rd-sae |
Arredondar para menos (para o infinito negativo), suprimir todas as exceções. |
ru-sae |
Arredondar para mais (para o infinito positivo), suprimir todas as exceções. |
sae |
Suprimir todas as exceções (sem necessidade de arredondamento). |
Confira também
Referência do Microsoft Macro Assembler
Manuais de programação do fabricante do processador