Formato de instrucciones MASM
Sintaxis
Las instrucciones se escriben en el código fuente según esta sintaxis:
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