Red de conocimiento informático - Conocimiento de la instalación - Pregunte por el conjunto de instrucciones de montaje

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)

FLDLG2

Cargar log10(2) en st(0)

st(0) lt; - log10(2)

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>

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>

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:

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>

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

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!