MUL
Multiplique no firmado
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F6 /4 | MUL r/m8 | M | Valido | Valido | Multiplicación no firmada (AX := AL r/m8). |
F7 /4 | MUL r/m16 | M | Valido | Valido | Multiplicación no firmada (DX:AX := AX r/m16). |
F7 /4 | MUL r/m32 | M | Valido | Valido | Multiplicación no firmada (EDX:EAX := EAX r/m32). |
REX.W + F7 /4 | MUL r/m64 | M | Valido | No codificable | Multiplicación no firmada (RDX:RAX := RAX r/m64). |
Codificacion de operandos
Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.
M
modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Realiza una multiplicación sin firmar de la primera operando (operando de destino) y la segunda operando (operando de origen) y almacena el resultado en el operando de destino. El operando de destino es un operando implícito ubicado en el registro AL, AX o EAX (dependiendo del tamaño del operando); el operando de origen se encuentra en un registro general o una ubicación de memoria. La acción de esta instrucción y la ubicación del resultado depende del código de operación y el tamaño de operando como se muestra en el cuadro 4-9.
El resultado se almacena en el registro AX, par de registro DX:AX, o par de registro EDX:EAX (dependiendo del tamaño de operando), con los bits de alto orden del producto contenidos en el registro AH, DX, o EDX, respectivamente. Si los bits de alto orden del producto son 0, las banderas CF y OF se limpian; de lo contrario, las banderas están establecidas.
En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 32 bits. El uso del prefijo REX.R permite el acceso a registros adicionales (R8-R15). El uso del prefijo REX.W promueve la operación a 64 bits.
Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
MUL Results
| Tamaño de operando | Fuente 1 | Fuente 2 | Destino |
|---|---|---|---|
| Byte | AL | r/m8 | AX |
| Palabra | AX | r/m16 | DX:AX |
| Doble palabra | EAX | r/m32 | EDX:EAX |
| Quadword | RAX | r/m64 | RDX:RAX |
Operación
IF (Byte operation)
THEN
AX := AL SRC;
ELSE (* Word or doubleword operation *)
IF OperandSize = 16
THEN
DX:AX := AX SRC;
ELSE IF OperandSize = 32
THEN EDX:EAX := EAX SRC; FI;
ELSE (* OperandSize = 64 *)
RDX:RAX := RAX SRC;
FI;
FI;Banderas afectadas
Las banderas OF y CF se establecen a 0 si la mitad superior del resultado es 0; de lo contrario, se establecen a 1. Las banderas SF, ZF, AF y PF quedan indefinidas.
Excepciones
Modo protegido
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS contiene un NULL selector de segmento. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |
#UD | Si se utiliza el prefijo LOCK. |
Modo real
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#UD | Si se utiliza el prefijo LOCK. |
Modo virtual-8086
#GP(0) | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada. |
#UD | Si se utiliza el prefijo LOCK. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#SS(0) | Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica. |
#GP(0) | Si la dirección de memoria está en forma no canónica. #PF(fault-code) Si un fallo de pagina ocurre. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3. |