Red de conocimiento informático - Conocimiento sistemático - Lenguaje ensamblador e instrucciones

Lenguaje ensamblador e instrucciones

Manual de Instrucciones de Montaje 8086

1. Instrucciones de transmisión de datos

Transfieren datos entre memoria y registros, registros y puertos de entrada y salida.

1. Instrucciones generales de transferencia de datos.

MOV transfiere palabras o bytes.

MOVSX realiza la extensión de señal antes de la transmisión.

MOVZX primero se expande a cero y luego transmite.

PUSH empuja palabras a la pila.

Saca la palabra de la pila.

Pusa empuja AX, CX, DX, BX, SP, BP, Si y DI a la pila en secuencia.

POPA activa Di, Si, BP, SP, BX, DX, CX y AX en secuencia.

PUSHAD empuja EAX, ECX, EDX, EBX, ESP, EBP, ESI y EDI a la pila en secuencia.

POPAD extrae EDI, ESI, EBP, ESP, EBX, EDX, ECX y EAX de la pila en secuencia.

BSWAP intercambia el orden de los bytes en un registro de 32 bits.

XCHG intercambia palabras o bytes. (Al menos un operando es un registro; los registros de segmento no se pueden utilizar como operandos).

CMPXCHG compara e intercambia operandos. (El segundo operando debe ser el acumulador AL/AX/EAX)

Primero intercambie XADD y luego acumule. (El resultado está en el primer operando)

Conversión de tabla de búsqueda de bytes.

-bx apunta al punto inicial de la tabla de 256 bytes, AL es el valor del índice de la tabla (0-255, es decir,

0-FFH); es el resultado de la tabla de búsqueda. ([BX+AL]->Al)

2. El puerto de entrada/salida transmite instrucciones.

Puerto de entrada/salida de entrada. (Sintaxis: en acumulador, {número de puerto│DX})

Salida del puerto de E/S OUT. (Sintaxis: OUT {número de puerto│DX}, acumulador)

Cuando el puerto de E/S se especifica mediante el modo inmediato, su rango es 0-255 cuando se especifica el registro DX,< El rango de p> es 0-65535.

3. Comando de transferencia de dirección de destino.

LEA carga una dirección válida.

Ejemplo: LEA DX, la cadena guarda la dirección de desplazamiento en DX.

LDS transfiere el puntero de destino y carga el contenido del puntero en DS.

Ejemplo: LDS SI, la cadena guarda la dirección del segmento: dirección de desplazamiento en DS:SI.

LES envía el puntero de destino y carga el contenido del puntero en ES.

Ejemplo: LES DI, la cadena guarda la dirección del segmento: dirección de desplazamiento en ES:DI.

LFS envía el puntero de destino y carga el contenido del puntero en FS.

Ejemplo: LFS Di, cadena; guardar dirección de segmento: dirección de desplazamiento en FS:DI.

LGS envía el puntero de destino y carga el contenido del puntero en GS.

Ejemplo: LGS Di, cadena; guardar dirección de segmento: dirección de desplazamiento en GS:DI.

LSS envía el puntero de destino y carga el contenido del puntero en SS.

Ejemplo: LSS Di, cadena; guardar dirección de segmento: dirección de desplazamiento en SS:DI.

4. Firmar la instrucción de transferencia.

Se ha transferido el registro de bandera LAHF y se ha cargado la bandera nacional.

Transferencia del registro de banderas SAHF, cargando contenido AH en el registro de banderas.

Pila de etiquetas PUSHF.

Pila de marcas POPF.

La bandera PUSHD de 32 bits se coloca en la pila.

El indicador POPD de 32 bits no está en la pila.

2. Instrucciones de operación aritmética

——————————————————————————————— — ————————

Agregar extras

ADC con adición de transporte.

ANC más 1.

Ajuste de código ASCII para adición de AAA.

Ajuste decimal para suma de DAA.

Resta.

SBB utiliza la resta de préstamos.

Diciembre menos 1.

Negación NEC (0 negativo)

Comparación CMP. (Reste los dos operandos, solo modifique el bit de bandera y no envíe el resultado).

Ajuste de código ASCII para resta de AAS.

Ajuste decimal para resta DAS

Multiplicación sin signo MUL.

Multiplicación de enteros IMUL.

Los resultados de los dos elementos anteriores se envían de vuelta a AH y AL (operaciones de bytes) o DX y AX (operaciones de palabras).

Ajuste de código ASCII para multiplicación AAM

División sin signo.

División de números enteros IDIV.

Para los dos elementos anteriores, los resultados se devuelven:

El cociente devuelve AL, el resto devuelve AH, (operación de bytes);

El Or el cociente devuelve AX, el resto se devuelve a DX, (aritmética de palabras).

Ajuste de código ASCII mediante AAD.

Convierte bytes CBW en palabras. (Extienda los símbolos de bytes de AL a AH)

Convierta palabras CWD en palabras dobles. (Extiende los símbolos de las palabras en AX a DX)

Convierte palabras CWDE en palabras dobles. (Extender símbolos de palabras en AX a EAX)

Expansión de palabra doble CDQ. (El símbolo de esta palabra en EAX se extiende a EDX)

3. Instrucciones de operación lógica

——————————————————— — ————————————————————

Operaciones AND y suma.

Aún es una operación.

Operación XOR.

Nada se invierte.

Prueba de prueba. (Los dos operandos son y, respectivamente, solo se modifica el bit de bandera y el resultado no se devuelve).

La lógica SHL se mueve hacia la izquierda.

La aritmética de Saar se mueve hacia la izquierda. (=SHL)

SHR lógicamente se mueve hacia la derecha.

El algoritmo SAR se mueve hacia la derecha. (=SHR)

El bucle ROL se mueve hacia la izquierda.

El ciclo ROR se mueve hacia la derecha.

En un ciclo de acarreo, RCL se mueve hacia la izquierda.

RCR se mueve hacia la derecha en un ciclo de acarreo.

El número de turnos de las ocho instrucciones de turno anteriores puede llegar a 255 veces.

Para cambiar una vez, puedes usar directamente el código de operación, como SHL AX, 1.

Turno >Cuando es 1 vez, el número de turnos lo da el registro CL.

Por ejemplo, MOV CL, 04

Diodo quimioluminiscente

Cuarto, comando de cadena

———————— — ———————————————————————————————

Registro de segmento de cadena de origen: índice de cadena de origen.

ES:DI registro de segmento de cadena de destino: índice de cadena de destino.

Contador de repeticiones CX.

Valor de escaneo AL/AX.

El indicador d 0 indica que SI y DI deben incrementarse automáticamente durante operaciones repetidas; 1 indica que deben disminuirse automáticamente.

La bandera z se utiliza para controlar el final de una operación de escaneo o comparación.

Transmisión de cadenas MOVS.

(MOVSB ​​transmite caracteres. MOVSW transmite texto. MOVSD transmite palabras dobles.)

Comparación de cadenas CMPS.

(CMPSB compara caracteres. CMPSW compara caracteres).

Escaneo continuo SCAS

Compara el contenido de AL o AX con la cadena de destino y el resultado de la comparación. se refleja en el logo.

Cadena de carga útil LODS.

Cargue los elementos (palabras o bytes) de la cadena de origen en AL o AX uno por uno.

(LODSB transmite caracteres. LODSW transmite texto. LODSD transmite palabras dobles.)

STOS viene al rescate.

Este es el proceso inverso al LODS.

Cuando CX/ECX > se repite en 0.

REPE/REPZ cuando ZF=1 o el resultado de la comparación es igual, y CX/ecx > se repite en 0.

Cuando ZF=0 o los resultados de la comparación no son iguales, y CX/ecx >, utilice REPNE/REPNZ;

REPC cuando CF=1 y CX/ecx >;

El REPNC cuando CF=0 y CX/ecx > se repite en 0.

Instrucción de transferencia de programa de verbo (abreviatura de verbo)

———————————————————————— ——— —————————

1>Instrucción de rama incondicional (rama larga)

Instrucción de rama incondicional JMP

Proceso de llamada Llamada

El programa RET/RETF regresa.

2>Instrucción de bifurcación condicional (bifurcación corta, dentro de la distancia de -128 a +127)

(Si y solo si (SF XOR OF)=1, op1

Transferir cuando JA/JNBE no sea menor o igual a

Transferir cuando JAE/JNB sea mayor o igual a

JBE/JNA sea menor o igual a. transferir

Los resultados de las cuatro pruebas anteriores (símbolos C y Z) son mayores que JG/JNLE

p>

JGE/JNL es mayor o igual que transferir <. /p>

JL/JNGE es menor o igual que transferir

Las cuatro pruebas anteriores son los resultados de operaciones enteras con signo (símbolos S, O, Z

JE/JZ no es igual a un salto de tiempo

JC transfiere cuando hay un acarreo

JNC transfiere cuando no hay tiempo de acarreo

La paridad JNP/JPO es impar. Transición cuando el bit de signo JNS es "0"

Desbordamiento y transferencia de JO

Transferencia cuando la paridad yen/JPE es par.

Transmitido cuando el bit de signo JS es "1"

Instrucción de control de bucle 3 & gt (transmisión corta)

Cuando no es cero, CX Loop

.

LOOPE/LOOPZ CX no es cero, marca Z=1 ciclo

Bucle cuando LOOPNE/LOOPNZ CX no es cero y marca Z=0. Salta cuando JCXZ·CX es cero.

Saltar cuando JECXZ·ECX es cero

4>Interrumpir programa

Instrucción de interrupción INT

Ingresar interrupción de desbordamiento

<. p>Retorno de interrupción IRET

5 & gt instrucciones de control del procesador

El procesador HLT se detiene hasta que se produce una interrupción o la señal de reinicio

WAIT hace que la CPU entre en espera. estado cuando la prueba del cable del chip es alta.

ESC cambia al procesador externo

Sin operación

Los conjuntos STC llevan la bandera. p>CMC lleva el indicador invertido. p>

STD establece el indicador de dirección

CLD borra el indicador de dirección

STI borra el bit de habilitación de interrupción.

6. Explicación falsa

———————————————————————————— ————————

Palabra de definición DW (2 bytes).

PROC define el proceso.

Finaliza el proceso ENDP.

Un segmento define un segmento.

Supongamos que se ha establecido el direccionamiento del registro de segmento.

Punto final es el punto final del segmento de línea.

Finalizar el programa.