Pregunte por el conjunto de instrucciones de montaje
1. Instrucciones de transferencia de datos
1. Instrucciones generales de transferencia de datos.
MOV transfiere palabras o bytes.
Signo MOVSX primero Expandir y luego transmite.
MOVZX se extiende cero primero y luego transmite.
PUSH empuja la palabra a la pila.
POP saca la palabra de la pila.
PUSHA empuja AX, CX, DX, BX, SP, BP, SI, DI en la pila en secuencia.
POPA empuja DI, SI, BP, SP, BX, DX , CX, AX Pop la pila en secuencia.
PUSHAD Empuje EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI en la pila en secuencia.
POPAD Push EDI , ESI, EBP, ESP, EBX, EDX, ECX, EAX abren la pila en secuencia.
BSWAP intercambia el orden de los bytes en el registro de 32 bits
XCHG intercambia palabras o bytes. (Al menos un operando es un registro, los registros de segmento no se pueden usar como operandos)
CMPXCHG compara e intercambia operandos (el segundo operando debe ser el acumulador AL/AX/EAX)
XADD se intercambia primero y luego se acumula. (El resultado está en el primer operando)
Conversión de tabla de búsqueda de bytes XLAT.── BX apunta al punto inicial de una tabla de 256 bytes, AL es el valor de índice de la tabla (0-255, es decir, 0-FFH); devuelve AL como resultado de la búsqueda en la tabla ([BX AL]-gt; AL)
2. .
Entrada del puerto de E/S (Sintaxis: IN acumulador, {número de puerto│DX})
Salida del puerto de E/S (Sintaxis: OUT {número de puerto│). DX}, acumulador) Los puertos de entrada y salida están en modo inmediato. Cuando se especifica, su rango es 0-255; cuando se especifica mediante el registro DX, su rango es 0-65535.
3. .
LEA carga la dirección efectiva. Ejemplo: LEA DX, cadena; almacena la dirección de desplazamiento en DX.
LDS transfiere el puntero de destino y carga el contenido del puntero en DS. LDS SI, cadena; almacena la dirección del segmento: dirección de desplazamiento en DS: SI.
LES transfiere el puntero de destino y carga el contenido del puntero en ES Ejemplo: LES DI, cadena. dirección a ES: DI.
LFS transfiere el puntero de destino y carga el contenido del puntero en FS. Ejemplo: LFS DI, cadena guarda la dirección del segmento y la dirección de desplazamiento en FS: DI.
LGS transfiere el puntero de destino y carga el contenido del puntero en GS. Ejemplo: LGS DI, cadena; almacena la dirección del segmento: dirección de desplazamiento en GS: DI.
LSS transfiere el puntero de destino y carga el puntero contenido en SS Ejemplo: LSS DI, cadena; guarde la dirección del segmento: la dirección de desplazamiento se almacena en SS: DI.
4. , carga la bandera en AH.
SAHF
Transferencia del registro de bandera, cargue el contenido AH en el registro de bandera.
La bandera PUSHF se inserta en la pila.
La bandera POPF se saca de la pila.
La bandera PUSHD de 32 bits se coloca en la pila.
La bandera POPD de 32 bits sale de la pila.
Instrucciones de operación aritmética
───. ─────────────── ──────────────────────
AÑADIR adición.
pag >Adición de ADC con acarreo.
INC suma 1.
Ajuste del código AAA ASCII para la suma.
Ajuste decimal DAA para la suma.
Resta SUB.
Resta SBB con préstamo.
DEC menos 1.
Negación NEG (resta 0).
Comparación CMP (resta de dos operandos), solo modifica el bit de bandera, no devuelve el resultado).
Ajuste de código ASCII para resta.
Ajuste decimal DAS para. resta.
Multiplicación sin signo MUL.
Multiplicación de enteros IMUL Para los dos anteriores, los resultados se devuelven a AH y AL (operaciones de bytes), o DX y AX (operaciones de palabras). ,
Ajuste del código ASCII de multiplicación AAM.
División DIV sin signo.
División entera IDIV Para los dos anteriores, el resultado se devuelve: el cociente devuelve. AL, el resto devuelve AH, (operación de bytes); o el cociente devuelve AX, el resto devuelve DX, (operación de palabras).
Ajuste de código ASCII para división AAD.
CBW conversión de bytes a palabras (Extiende el signo del byte en AL a AH)
Convierte palabras CWD a palabras dobles (Extiende los símbolos de los caracteres en AX a DX)
Convierte. Palabras CWDE a palabras dobles (Extiende los símbolos de las palabras en AX a DX) a EAX)
Extensión de palabra doble CDQ (Extiende los símbolos de las palabras en EAX a EDX)
3. Instrucciones de operación lógica
Operación Y AND.
Operación O.
Operación O exclusiva XOR.
NO negación.
Prueba de PRUEBA (dos operaciones a los números se les aplica AND, solo se modifican los bits de bandera y no se devuelve el resultado).
Desplazamiento lógico a la izquierda de SHL.
SAL desplazamiento aritmético a la izquierda (=SHL)
SHR desplazamiento lógico a la derecha.
SAR desplazamiento aritmético a la derecha (=SHR)
ROL desplazamiento circular a la izquierda.
Desplazamiento circular a la derecha ROR.
RCL gira hacia la izquierda mediante transporte.
RCR gira hacia la derecha mediante transporte.
Las ocho instrucciones de cambio anteriores pueden cambie hasta 255 veces.
p>Al cambiar una vez, puede usar directamente la operación
código Por ejemplo, SHL AX, 1.
Shift gt; 1 vez, el número de turnos viene dado por el registro CL.
Por ejemplo, MOV CL, 04
SHL AX, CL
4. Instrucciones de cadena
DS: Registro de segmento de cadena de origen SI: índice de cadena de origen.
ES: Cadena de destino DI Registro de segmento: índice de cadena de destino.
Contador de repeticiones CX.
Valor de escaneo AL/AX.
El indicador D 0 indica que SI y DI deben usarse en operaciones repetidas. Incremento automático; 1 significa disminución automática.
El indicador Z se utiliza para controlar el final de la operación de escaneo o comparación.
Transmisión de cadena MOVS (transmisión MOVSB). caracteres. MOVSW transmite palabras. MOVSD transmite palabras dobles)
Comparación de cadenas CMPS (CMPSB compara caracteres. CMPSW compara palabras).
Escaneo de cadenas SCAS. AX con la cadena de destino El resultado de la comparación se refleja en el bit de bandera.
LODS carga la cadena los elementos (palabras o bytes) en la cadena de origen en AL o AX uno por uno (LODSB. transfiere caracteres. LODSW transfiere palabras. LODSD transfiere palabra doble)
STOS guarda la cadena. Es el proceso inverso de LODS.
REP Se repite cuando CX/ECXlt;gt;0. .
REPE/REPZ Repetir cuando ZF=1 o el resultado de la comparación sea igual a CX/ECXlt;gt;0.
REPNE/REPNZ Repetir cuando ZF=0 o el resultado de la comparación no es igual y CX/ECXlt;gt;0 .
REPC Repetir cuando CF=1 y CX/ECXlt;gt;0.
REPNC Repetir cuando CF=0 y CX/ ECXlt;gt;0.
5. Instrucciones de transferencia del programa
1. Instrucción de transferencia incondicional (transferencia larga)
Instrucción de transferencia incondicional JMP
Llamada al procedimiento CALL
Devolución del procedimiento RET/RETF.
2.
Instrucción de transferencia condicional (transferencia corta, dentro de la distancia de -128 a 127)
(si y sólo si (SF XOR OF)=1, OP1lt; OP2)
JA/JNBE Transferir cuando no sea menor o diferente.
JAE/JNB Transferir cuando sea mayor o igual.
JB/JNAE Transferir cuando sea menor.
JBE /JNA Transferir cuando sea menor o igual a .
Los cuatro elementos anteriores prueban los resultados de operaciones con enteros sin signo (indicadores C y Z).
JG/JNLE es mayor que la transferencia.
JGE/JNL es mayor o igual a la transferencia.
JL/JNGE Menor que la transferencia.
JLE/JNG Menor o igual a la transferencia.
Los cuatro elementos anteriores prueban el resultado de la operación de entero con signo (indicadores S, O y Z).
JE/JZ Rama cuando es igual.
JNE/JNZ Rama cuando no es igual.
Rama JC cuando hay un acarreo.
Rama JNE/JNZ cuando no es igual.
Rama JC cuando hay un acarreo.
p>Sucursal JNC cuando no hay acarreo.
Sucursal JNO cuando no hay desbordamiento.
Sucursal JNP/JPO cuando la paridad es impar.
Símbolo JNS Bifurcación cuando el bit es "0".
Desbordamiento de bifurcación JO.
Bifurcación JP/JPE cuando la paridad es par.
El bit de signo JS es "1" Transferencia de tiempo.
3. Instrucciones de control de bucle (transferencia corta)
Bucle cuando LOOP CX no es cero.
Bucle cuando LOOPE/LOOPZ CX no es cero y el indicador Z=1.
LOOPNE/LOOPNZ Bucle cuando CX no es cero y marca Z=0.
JCXZ bifurca cuando CX es cero.
JECXZ bifurca cuando ECX es cero.
4. Instrucción de interrupción
Instrucción de interrupción INT
INTO interrupción de desbordamiento
Retorno de interrupción IRET
5.
Instrucciones de control del procesador
HLT El procesador se detiene y no continúa hasta que se produce una señal de interrupción o reinicio.
WAIT pone la CPU en estado de espera cuando la PRUEBA del cable del chip es alta.
ESC transfiere al procesador externo.
LOCK bloquea el bus.
NOP no funciona.
STC establece el indicador de acarreo.
CLC borra el indicador de acarreo.
CMC invierte el indicador de acarreo.
STD establece el indicador de dirección.
CLD borra el indicador de dirección .
p>
STI establece el bit de habilitación de interrupción.
CLI borra el bit de habilitación de interrupción.
6.
Palabra de definición DW (2 bytes).
PROC define el proceso Ejemplo: nombre proc var1, var2, var3
ENDP El proceso finaliza. p>
SEGMENTO define el segmento. Ejemplo de nombre de segmento
ASSUME establece el direccionamiento del registro del segmento. Ejemplo: asume cs: códigos, ds: datos, ss: pilas
ENDS final del segmento. .nombre termina
END fin del programa (señale también la entrada de la instrucción, es decir, la primera instrucción ejecutada por el programa).end inicio
7. p>
Instrucción de procesamiento de bandera CLC (instrucción de posición de transporte 0)
CMC (instrucción de transporte inverso)
STC (instrucción de posición de transporte 0)
CLD (Instrucción de indicador de dirección establecida en 1)
STD (Instrucción de posición 1 del indicador de dirección)
CLI (Instrucción de establecimiento de indicador de interrupción 0)
STI (Instrucción de indicador de interrupción Establecer 1 instrucción)
NOP (ninguna operación)
HLT (detener)
WAIT (esperar)
ESC (escape)
LOCK (bloqueo) Asociación de punto flotante Instrucciones de punto flotante del procesador
Primero expliquemos las siguientes instrucciones:
st(i): representa el registro de punto flotante Las operaciones de hacer estallar y empujar son para El impacto de st(i)
src, dst, dest, op, etc. todas se refieren a los operandos de las instrucciones, src representa el operando fuente y dst/dest. representa el operando de destino
mem8, mem16, mem32, mem64, mem80, etc. representan operandos de memoria y el siguiente valor representa el número de dígitos de memoria del operando (8 bits es un byte)
x lt; - y representa el número de y Ponga el valor en x, por ejemplo, st(0) lt - st(0) - st(1) significa poner el valor de st(0)-st; (1) en el registro de coma flotante st(0)
1. Instrucciones de transferencia de datos y operación constante
Formato de la instrucción
Significado de la instrucción
Operación realizada
FLD src
Cargar números reales en st(0)
st(0) lt; - src (mem32/mem64/mem80)
FILD src
Cargar entero en st( 0)
st(0) lt; - src (mem16/m)
em32/mem64)
FBLD src
Cargar número BCD en st(0)
st(0) lt; - src (mem80)
FLDZ
Cargar 0.0 en st(0)
st(0) lt; - 0.0
FLD1
Cargar 1.0 en st(0)
st(0) lt - 1.0
FLDPI
Cargar pi en st(0)
st; (0) lt; - ?(es decir, pi)
FLDL2T
Cargar log2(10) en st(0)
st (0) lt; - log2(10)
FLDL2E
Cargar log2(e) en st(0)
st(0) lt;- log2(e) p>
FLDLG2
Cargar log10(2) en st(0)
st(0) lt; - log10(2) p>
FLDLN2
Cargar loge(2) en st(0)
st(0) lt; - loge(2)
FST dest
Guarde el número real st(0) en destino
dest lt; - st(0) (mem32/mem64)
Destino FSTP
dest lt; st(0) (mem32/mem64/mem80); y luego realizar una operación emergente
FIST dest
Guardar st(0) como un entero en el destino
dest lt;- st(0) (mem32/mem64)
FISTP dest
dest lt;- st(0) (mem16/mem32/ mem64); operación pop
Destino FBST
Guardar st(0) en destino en BCD
dest lt; - st(0 ) (mem80)
FBSTP dest
destlt; - st(0) (mem80); y luego realice la operación pop nuevamente
2. Instrucción de comparación
Formato de la instrucción
Significado de la instrucción
Operación realizada
FCOM
Comparación de números reales
Establezca el bit de bandera en el bit de bandera de resultado de st(0) - st(1)
FCOM op
Comparación de números reales
Establecer el bit de bandera establecido en st(0) - el bit de bandera de resultado de op (mem32/mem64)
FICOM op
Comparar con un número entero
Establecer las banderas valor a st( 0)-op resultado op (mem16/mem32)
FICOMP op
Comparar con un número entero
Comparar st(0) con op op( mem16/ mem32); realizar otra operación pop
FTST
Detección de cero
Comparar st(0) con 0.0
FUCOM st( i)
Comparar st(0) y st(i) [486]
FUCOMP st(i)
Comparar st(0) y st (i ), y realizar una operación pop
FUCOMPP st(i)
Comparar st(0) y st(i), y
Y realice dos operaciones pop
FXAM
Examinar: Eyeball st(0) (establecer códigos de condición)
3. Instrucciones de operación
Formato de la instrucción
Significado de la instrucción
Operación realizada
Adición
FADD
Sumar números reales
st(0) lt;-st(0) st(1)
FADD src
st(0) lt;- st(0) src (mem32/mem64)
FADD st(i), st
st(i) lt; - st(i) st(0)
FADDP st(i), st
st(i) lt; - st(i) st(0) y luego realizar una operación pop
FIADD src
p> p>Sumar un número entero
st(0) lt;-st(0) src (mem16/mem32)
Restar
FSUB
Restar un número real
st(0) lt; - st(0) - st(1)
FSUB src
st (0) lt; -st(0) - src (reg/mem)
FSUB st(i), st
st(i) lt; - st(0)
FSUBP st(i), st
st(i) lt; -st(i) - st(0), luego realiza una operación pop p> p>
FSUBR st(i), st
Usa un número real para restar
st(0) lt;
FSUBRP st(i), st
st(0) lt; - st(i) - st(0), luego realiza una operación pop
FISUB src
Restar un número entero
st(0) lt; - st(0) - src (mem16/mem32)
FISUBR src
Restar un número entero
st(0) lt; - src - st(0) (mem16/mem32)
Multiplicación
FMUL
p>Multiplicar un número real
st(0) lt; - st(0) * st(1)
FMUL st(i)
st(0) lt;- st(0) * st(i)
FMUL st(i), st
st(i) lt;- st(0) * st(i)
FMULP st(i), st
st(i) lt; - st(0) * st(i), luego realiza una operación pop p> p>
FIMUL src
Multiplicar un número entero
st(0) lt; - st(0) * src (mem16/mem32)
División
FDIV
Dividir por un número real
st(0) lt -st(0) /st(1)
FDIV st(i)
st(0) lt; - st(0) /t(i)
FDIV st(i), st
st (i) lt; -st(0) /st(i)
FDIVP
st(i), st
st(i) lt; -st(0) /st(i), luego realice una operación pop
FIDIV src
Dividir por un número entero
st(0) lt; - st(0) /src (mem16/mem32)
FDIVR st(i), st
Dividir por números reales
st(0) lt; - st(i) /st(0)
FDIVRP st(i), st
FDIVRP st(i), st
FIDIVR src
División por entero
st(0) lt; - src /st(0) (mem16/mem32)
FSQRT
raíz cuadrada
st(0) lt; - sqrt st(0)
FSCALE
2 elevado a st(0)
st(0) lt; - 2 ^ st(0)
FXTRACT
Extraer exponente: p>
st(0) lt;-exponente de st(0); y es empujado
st(0) lt;-significado de st(0)
FPREM
st(0) lt; p>
Obtener el resto
st(0) lt;-st(0) MOD st(1)
FPREM1
Obtener el resto (IEEE), igual que FPREM, pero usando el estándar IEEE [486]
FRNDINT
Redondeo (redondeo)
st(0) lt; - INT( st(0 )); depende del indicador RC
FABS
Encuentra el valor absoluto
st( 0) lt; - ABS( st(0) ); elimina el signo
FCHS
Cambiar el bit de signo (buscar un número negativo)
st(0) ) lt;-st(0)
F2XM1
Calcular (2^x)-1
st(0) lt;- (2^st( 0))-1
FYL2X
Calcular Y * log2(X)
st(0) es Y; st(1) es X; (0) y st(1) en st(0) * log2( st( 1) El valor de )
FCOS
Función coseno Cos
st (0) lt; - COS( st(0) )
FPTAN
función tangente tan
st(0) lt - TAN( st(0) ) )
FPATAN
Función arcangente arctan
st(0) lt; - ATAN( st(0) )
FSIN
Función seno sin
st( 0) lt;-SIN( st(0) )
FSINCOS
Función sincos
st(0) lt;-SIN( st(0) ) y presione st(1)
st(0) lt - COS( st(0) )
FYL2XP1
Calcular Y * log2(X 1)
st(0) es Y; st(1) es X; cambiar st(0) y st(1) en st(0)
* El valor de log2( st(1) 1)
Instrucción de control del procesador
FINIT
Inicializar FPU
FSTSW AX p> p>
Guardar el valor de la palabra de estado en AX
AXlt; - MSW
FSTSW dest
Guardar el valor de la palabra de estado to dest
destlt;-MSW (mem16)
FLDCW src
Cargar la palabra de control FPU desde src
FPU CW lt; -src (mem16
Destino FSTCW
Guardar la palabra de control de FPU en destino
destlt; - FPU CW
FCLEX
Borrar la excepción
Destino FSTENV
Guarde el entorno en la dirección de memoria destino para guardar los valores de la palabra de estado, la palabra de control, la palabra de bandera y el puntero de excepción.
FLDENV src p>
Carga el entorno guardado desde la dirección de memoria src
FSAVE dest
Guarda el estado de la FPU en 94 bytes en el destino
FRSTOR src
Cargar el estado de FPU guardado por FSAVE desde src
FINCSTP
Aumentar el valor del puntero de pila de FPU
st(6) lt; -st(5); st(5) lt; -st(4),..., st(0) lt;
FDECSTP
Reducir el valor del puntero de la pila FPU
st(0) lt; -st(1) lt;
FFREE st(i)
El registro de bandera st(i) no se utiliza
FNOP
Sin operación, equivalente a CPU nop
st(0) lt;-st(0)
WAIT/FWAIT
Sincronizar FPU y CPU: detiene la ejecución de la CPU hasta que FPU complete el código de operación actual
FXCH
Intercambiar instrucciones, intercambiar los valores de st(0) y st(1)
st(0) lt;-st (1)
st(1) lt;- st(0) ¡Me duele la mano!