Compartilhar via


Formato da instrução do MASM

Sintaxe

As instruções são escritas no código-fonte de acordo com esta sintaxe:

lista de operandos mnemônicos de prefixo

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