Compartir a través de


Formato de instrucciones MASM

Sintaxis

Las instrucciones se escriben en el código fuente según esta sintaxis:

prefix mnemonic operando-list

Para obtener información sobre las definiciones de instrucciones, las opciones y la codificación, vea los Manuales de programación de los fabricantes de procesadores. Es posible que Macro Assembler de Microsoft no admita algunas instrucciones y opciones de instrucciones.

Prefijo

Puede prefijar algunas instrucciones con palabras clave que establezcan opciones para cómo se codifica la instrucción. Las palabras clave REP, REPE, REPZ, REPNE y REPNZ se usan con instrucciones de cadena para realizar tipos de operaciones memcpy o strlen en una sola instrucción. La palabra clave LOCK hace que ciertas operaciones en operandos de memoria sean atómicas. Puede combinarlo con las palabras clave XACQUIRE y XRELEASE para realizar la Elisión de bloqueo de hardware (HLE) en procesadores compatibles, lo que permite un mayor paralelismo transaccional en determinados casos.

Los prefijos restantes controlan cómo se codifican las instrucciones AVX. Las instrucciones AVX se codifican mediante un prefijo VEX, que aparece antes del código de operación. Sustituye a determinados prefijos de instrucción de bytes y bytes de código de operación. Muchas instrucciones AVX también son instrucciones de AVX-512, que se codifican mediante un prefijo EVEX que admite más opciones. MASM intenta codificar las instrucciones lo más compacto posible, pero estas palabras clave permiten un mayor control sobre qué codificación usar con una instrucción determinada. También se usan para forzar la generación de formularios de instrucciones AVX que se introdujeron después de la instrucción AVX-512 correspondiente. Por ejemplo, vex vpdpbusd especifica el formulario AVX-VNNI de las instrucciones VPDPBUSD en lugar del formulario AVX512-VNNI. Cuando aparece una instrucción AVX sin una palabra clave de prefijo explícita, la codificación elegida depende de la configuración de codificación AVX actual. La directiva OPTION AVXENCODING le permite cambiar esta configuración.

Las opciones VEX2, VEX3, VEX y EVEX están disponibles en Visual Studio 2019 versión 16.7 y posteriores.

Palabra clave Uso
REP Repetición de la operación de cadena por el recuento en (E)CX.
REPE
REPZ
Repetición de la operación de cadena mientras la comparación es igual, limitada por el recuento en (E)CX.
REPNE
REPNZ
Repetición de la operación de cadena mientras la comparación no es igual, limitada por el recuento en (E)CX.
LOCK Ejecución de la operación de forma atómica en un operando de memoria.
XACQUIRE Comienzo de una transacción HLE, que se usa con más frecuencia con el prefijo LOCK.
XRELEASE Cumplimiento de una transacción HLE, que se usa con más frecuencia con el prefijo LOCK.
VEX Codificación de una instrucción AVX mediante un prefijo VEX.
VEX2 Codificación de una instrucción AVX mediante un prefijo VEX de 2 bytes.
VEX3 Codificación de una instrucción AVX mediante un prefijo VEX de 3 bytes.
EVEX Codificación de una instrucción AVX mediante un prefijo EVEX.

Mnemotécnico

El mnemotécnico identifica una instrucción en concreto, que determina los prefijos y los patrones de operando permitidos.

Lista de operandos

La mayoría de las instrucciones usan una lista de operandos para especificar los operandos de origen y destino explícitos en la instrucción. La lista de operandos puede contener referencias de memoria, registros y valores constantes. Cada instrucción solo permite que determinados tipos de operandos aparezcan en cada posición de la lista de operandos. Excepto para las instrucciones MOVS y CMPS, solo uno de los operandos puede ser una referencia de memoria; todos los demás operandos deben ser referencias o constantes de registro.

Opciones de AVX-512

Algunas instrucciones AVX-512 permiten especificar más opciones. Estas opciones son: enmascaramiento, enmascaramiento cero, difusión insertada, redondeo insertado y eliminación de excepciones.

El enmascaramiento permite aplicar una operación solo a los elementos seleccionados de un vector. Esta opción se controla colocando un registro de máscara de {k1} a {k7} después del operando de destino. Si el registro de máscara va seguido de {z}, todos los elementos no seleccionados del destino se establecen en cero. Esta alternativa se conoce como enmascaramiento cero.

La difusión insertada permite aplicar un valor escalar en la memoria a todos los elementos de un vector. Esta opción se habilita agregando el tamaño del elemento y la palabra clave BCST al operando de memoria, que es similar al uso de PTR para las referencias de memoria normales.

El redondeo insertado controla el modo de redondeo para una instrucción de punto flotante individual, sin tener que establecer y restablecer el modo de redondeo global. Se habilita siguiendo la instrucción con el modo de redondeo entre llaves. Cuando está habilitada, también suprime todas las excepciones solo para esa instrucción. Las instrucciones de punto flotante que no redondean también pueden suprimir todas las excepciones mediante una opción similar.

  ; 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 redondeo

Mode Efecto
rn-sae Redondea a la más cercana, se vincula a par, suprime todas las excepciones.
rz-sae Redondeo hacia cero, suprime todas las excepciones.
rd-sae Redondeo hacia abajo (hacia el infinito negativo), suprime todas las excepciones.
ru-sae Redondeo hacia arriba (hacia el infinito positivo), suprime todas las excepciones.
sae Suprime todas las excepciones (no hace falta redondeo).

Consulte también

Referencia de Microsoft Macro Assembler
Manuales de programación de los fabricantes de procesadores