Instrucciones del 8086

Arquitectura del Sistema. Flags. Instrucciones. Interrupciones. Modos de Direccionamiento. Assembler. Ensamblador

  • Enviado por: Pedro
  • Idioma: castellano
  • País: España España
  • 207 páginas
publicidad

INSTRUCCIONES DEL 8086

(T-2)

INSTRUCCIONES, TRANSFERENCIA DE DATOS.-

· Mov.

Transferencia de datos (1 BYTE O 1 PALABRA) entre fuente y destino. Donde destino es el lugar a donde se moverán los datos y fuente es el lugar donde se encuentran dichos datos.

MOV Destino, fuente

- Destino puede ser un registro, elemento de memoria (1 byte o palabra).

- Fuente: 1 registro, un elemento de memoria o un valor inmediato.

El contenido de fuente después del movimiento queda inalterado. No afecta a las banderas.

Importante:

  • No se pueden mover datos entre dos elementos de memoria, hay que utilizar un registro intermedio.

Ej:

MOV AX, Pepe

MOV Pepe,AX

  • No se puede mover un valor inmediato a u registro de segmento, pero si utilizando un registro intermedio.

Ej:

MOV AX,112

MOV ES,AX

  • No se puede utilizar el registro CS como destino.

Tipos permitidos para esta instrucción son:

DESTINO

FUENTE

EJEMPLO

Memoria

Acumulador

MOV mem_byte,AL

Acumulador

Memoria

MOV AL,mem_byte

Segmento

Memoria

MOV DE,mem_byte

Segmento

Registro

Memoria

Segmento

Registro

Registro

Registro

Memoria

Memoria

Registro

Registro

Valor inmediato

MOV AX,2B35h

Memoria

Valor inmediato

· LEA.

Transfiere el desplazamiento del operando fuente al operando destino. El operando fuente debe ser un operando de memoria (byte o palabra). El operando destino es un registro de 16 bits, pero no un registro de segmento.

LEA destino,fuente

Ej:

MOV SI,OFFSET VAR1 Equivale a LEA SI,VAR1

DESTINO

FUENTE

EJEMPLO

Registro 16 Bits

Memoria

LEA AX,VAR2

· PUSH.

Apila el operando siempre a nivel de palabra.

Carga el operando en la dirección apuntada por SS:SP, que es la cima de la pila y decrementa en 2 unidades a SP. No afecta a los flags y no se puede especificar como operando al registro CS.

PUSH fuente

Tipos permitidos para esta instrucción son:

FUENTE

EJEMPLO

Memoria

PUSH [BX+DI+1000h]

Registro 16 bits

PUSH BX

·POP.

Instrucción complementaria a PUSH, realiza el trabajo inverso, es decir, transfiere la palabra situada en la cima de la pila, apuntada por SS:SP, al operando (de 2 bytes).

No se puede especificar como operando al registro CS.

POP destino

Tipos permitidos para esta instrucción son:

DESTINO

EJEMPLO

Memoria

POP [BX+DI+1000h]

Registro 16 bits

POP BX

INSTRUCCIONES ARITMETICAS.-

· ADC.

Adición con acarreo. Suma los operandos más 1 si está activada la bandera de acarreo (CF), El resultado lo guarda en el operando destino. Los operandos deben ser del mismo tipo (byte o palabra).

Afeccta a los flags: OF, SF,ZF,AF,PF,CF

ADC destino,fuente

Lleva a cabo la suma de dos operandos y suma una al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.

El resultado se guarda en el operando destino.

DESTINO

FUENTE

EJEMPLO

Registro

Registro

ADC BL,CL

Registro

Memoira

ADC BL,mem_byte

Memoria

Registro

Acumulador

Valor

ADC AL,12h

Registro

Valor

ADC BX,1234h

Memoria

Valor

·ADD.

Adición de los operandos. El resultado lo guarda en el operando destino. Los operandos deben ser del mismo tipo (byte, palabra).

Afecta alos flags: OF, SF, ZF, AF, PF, CF

ADD destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

ADD BX,CX

Registro

Memoria

ADD BL,mem_byte

Memoria

Registro

ADD mem_byte,BL

Acumulador

Valor

ADD AL,12H

ADD AX,1234H

Registro

Valor

ADD BX 11H

Memoria

Valor

ADC mem_byte,60h

·SUB.

Resta el operando fuente del operando destino y el resultado lo guarda en el operando destino. Los operandos deben ser del mismo tipo (byte, palabra).

Afecta a los flags: OF, SF, ZF, AF, PF, CF

SUB destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

ADD BX,CX

Registro

Memoria

ADD BL,mem_byte

Memoria

Registro

ADD mem_byte,BL

Acumulador

Valor

ADD AL,12H

ADD AX,1234H

Registro

Valor

ADD BX,1234

Memoria

Valor

ADD mem_byte,1234h

·SUB.

Resta el operando fuente del operando destino y el resultado lo guarda en el operando destino. Los operandos deben ser del mismo tipo (byte, palabra).

Afecta a los flags: OF,SF, ZF, AF, PF, CF

SUB destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

SUB BX,CX

Registro

Memoria

SUB BL,mem_byte

Memoria

Registro

SUB mem_byte,BL

Acumulador

Valor

SUB AL,12H

SUB AX,1234H

Registro

Valor

SUB BX,1234H

Memoria

Valor

SUB mem_byte,1234H

· SBB.

Resta el operando fuente del operando destino teniendo en cuenta el acarreo, y el resultado lo guarda en el operando destino. Destino=destino-(fuente+CF).

Los operandos deben ser del mismo tipo (byte, palabra).

Afecta a los flags: OF, SF, ZF, AF, PF, CF

SBB destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

SBB BX,CX

Registro

Memoria

SBB BL,mem_byte

Memoria

Registro

SBB mem_byte,BL

Acumulador

Valor

SBB AL,12H

SBB AX,1234H

Registro

Valor

SBB BX,1234H

Memoria

Valor

ABB mem_byte,1234H

· INC.

Incrementa el operando. La instrucción suma uno al operando destino y guarda el resultado en el mismo operando destino.

Afecta a los flags: OF, SF, ZF, AF, PF

INC destino

DESTINO

EJEMPLO

Registro 8 Bits

INC AL

Registro 16 bits

INC AX

Memoria

INC mem_byte

· DEC.

Decrementa el operando. La instrucción resta uno al operando destino y guarda el resultado en el mismo operando destino.

Afecta a los flags: OF, SF, ZF, AF, PF

DEC destino

DESTINO

EJEMPLO

Registro 8 bits

DEC AL

Registro 16 bits

DEC AX

Memoria

DEC mem_byte

· NEG.

Genera el complemento a 2. Calcula el valor negativo del operando. Resta el operando de 0 y devuelve el resultado en el mismo operando. Para hacer esto el operando ser resta del numero compuesto por todo 1 y se le añade 1

NEG destino=NOT destino

INC destino

DESTINO

EJEMPLO

Registro 8 bits

NEG AL

Registro 16 bits

NEG AX

Memoria

NEG mem_byte

· CMP.

Compara dos operandos. Resta fuente de destino, pero no almacena el resultado. Los operandos quedan intactos pero las banderas se actualizan pudiéndose consultar a continuación mediante una instrucción de bifurcación condicional.

Los operandos pueden ser del tipo byte o palabra pero siempre del mismo tipo los dos.

Afecta a los flags: OF, SF, ZF, AF, AF, PF, CF

CMP destino, fuente

DESTINO

FUENTE

Registro

Registro

Registro

Memoria

Memoria

Registro

Acumulador

Valor

Registro

Valor

Memoria

Valor

Si ZF=1 los operandos son iguales.

Si CF=0 con operandos sin signo opernado1>=operando 2, no ha habido acarreo.

Si CF=1 con operandos sin signo operando 1< operando 2, ha habido acarreo.

Si OF=SF con operandos con signo operando 1 >= operando 2, desbordamiento del bit de signo.

Si OF<>SF con operandos con signo operando 1< operando 2.

INSTRUCCIONES LÓGICAS.-

· AND.

Operación lógica “and” a nivel de bit entre los dos operandos. El resultado se almacena en el destino.

Afecta a los flags: CF y OF se ponen siempre a “0”.

SF, ZF, AF, PF según la operación toman un valor u otro.

AND destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

CMP BX,CX

CMP BL,CL

Registro

Memoria

CMP BL,mem_byte

Memoria

Registro

CMP mem_byte,CL

Acumulador

Valor

CMP AL,01H

Registro

Valor

CMP BH,1BH

CMP BX,1234H

Memoria

Valor

CMP mem_byte,123BH

· NOT.

Lleva a cabo la negación bit por bit del operando destino. El resultado se guarda en el mismo operando destino. Cambia los bits del operando por su complementario. No afecta a los flags.

NOT destino

DESTINO

EJEMPLO

Registro 8 bits

NOT AL

Registro 16 bits

NOT AL

Memoria

NOT mem_byte

· OR.

OR inclusivo lógico, la instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos. El resultado lo almacena en el destino.

Afecta a los flags CF y OF que se ponen a 0.

SF, ZF, AF, PF.

OR destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

OR AX,CX

Registro

Memoria

OR BL,mem_byte

Memoria

Registro

OR mem_byte,BL

Acumulador

Valor

OR AX,0120H

Registro

Valor

OR BL,30H

Memoria

Valor

OR mem_byte,12H

· XOR.

OR exclusivo lógico. La instrucción OR lleva a cabo, bit por bit, la disyunción exclusiva lógica de los operandos. El resultado lo almacena en el destino.

Afecta a los flags CF y OF, que se ponen siempre a 0.

SF, ZF, AF, PF

XOR destino,fuente

DESTINO

FUENTE

EJEMPLO

Registro

Registro

XOR AX,CX

Registro

Memoria

XOR BL,mem_byte

Memoria

Registro

XOR mem_byte,BL

Acumulador

Valor

XOR AX,0120H

Registro

Valor

XOR BL,30H

Memoria

Valor

XOR mem_byte,12H

INSTRUCCIONES DESPLAZAMIENTO Y ROTACION.-

· SAR.

Desplazamiento aritmético a la derecha. Desplaza a la derecha los bits del operando destino, el nº de bits especificado en el segundo operando o contador. Los bits de la izquierda se rellenan directamente. Si es mayor que 1 su valor debargarse en CL y especificar Cl como 2º operando.

Afecta a los flags: OF, SF, ZF, PF, CF

SAR destino, contador

DESTINO

FUENTE

EJEMPLO

Registro

Registro

SAR BL,CL

SAR BX,CX

Registro

Valor

SAR BL,1

Memoria

Registro

SAR VAR1,CL

Memoria

Valor

SAR VAR2,1

· SHR.

Desplazamiento aritmético a la derecha. Desplaza a la derecha los bits del operando destino, el nº de bits especificado en el segundo operando o contador. Los bits de la izquierda se rellenan con 1. Si el nº de bits a desplazar es 1 se puede especificar directamente. Si es mayor que 1 su valor debe cargarse en CL y especificar CL como 2º operando.

Afecta a los flags OF, SF, ZF, PF, CF

SHR destino,contador

DESTINO

FUENTE

EJEMPLO

Registro

Registro

SHR BL,CL

SHR BX,CX

Registro

Valor

SHR BL,1

Memoria

Registro

SHR VAR1,CL

Memoria

Valor

SHR VAR2,1

· SAL-SHL.

Realizan la misma instrucción y son la misma operación. Desplazamiento aritmético a la izquierda. Desplaza a la izquierda los bits del operando destino, el nº de bits especificado en el segundo operando o contador. Los bits de la derecha se rellenan con 0. Si el nº de bits a desplazar es 1 se puede especificar directamente. Si es mayor que 1 su valor debe cargarse en CL y especificar CL como 2º operado.

SAL destino,contador

SHL destino,contador

DESTINO

FUENTE

EJEMPLO

Registro

Registro

SAL-SHL BL,CL

SAL-SHL BX,CX

Registro

Valor

SAL-SHL BL,1

Memoria

Registro

SAL-SHL VAR1,CL

Memoria

Valor

SAL-SHL VAR2,1

CONTROL DEL PROCESADOR.-

· NOP.

No hace nada.

· CLC.

Pone a 0 el bit de acarreo (CF=0).

· STC.

Pone a 1 el bit de acarreo (CF=1).

INSTRUCCIONES DE CONTROL DE FLUJO.-

·Salto incondicional.

JMP. Salto incondicional. Transfiere el cotrol del programa a la dirección del operando.

JMP etiqueta

· Llamada subrutina.

Transfiere el control a la subrutina especificada en operando. La rutina invocada con CALL debe terminar con una sentencia RET.

CALL subrutina

Fases que efectúa:

  • Apila la dirección de retorno.

  • Ejecuta la rutina.

  • Desapila la dirección de retorno.

  • Devuelve al control de programa.

  • · Llamada a una interrupción.

    Se genera una interrupción por software. Esto nos permitirá usar unas determinadas funciónes o rutinas del BIOS y del DOS.

    Su forma de trabajar es muy semejante a la llamada a una subrutina.

    INT tipo_int

    Fases que efectúa:

  • Apila los flags.

  • IF=0 y TF=0, inhibe las interrupciones.

  • Apila la dirección de retorno.

  • Accede a la tabla de interrupciones según el tipo de interrupción

  • Desapila la dirección de retorno.

  • Devuelve al control al programa.

  • Veremos 4 servicios de la interrupcion 21h.

    Servicio 01. Lee un carácter introducido por teclado introduciendo su código ASCII en el registro AL.

    MOV AH,01

    INT 21H

    Servicio 07. Hace lo mismo que el servicio 01 pero este carácter no aparece por pantalla.

    MOV AH,07

    INT 21H

    Servicio 02. Muestra un carácter por pantalla. Para ello debemos introducir en un registro de datos como puede ser DL, el código ASCII de dicho carácter.

    MOV AH,02

    MOV DL,41H

    INT 21H

    Servicio 09. Escribe una cadena de caracteres por pantalla. Esta cadena de caracteres ha de definirse en el segmento de datos en una variable.

    MOV AH,09

    MOV DX,OFFSET VAR1

    INT 21H

    INSTRUCCIÓNES CONDICIONALES.-

    · Jxx.

    Salta si se cumple la condición. La distancia de la etiqueta está limitada por -128 y 127 bytes.

    Jxx desplazamiento

    El desplazamiento (valor con signo de 8 bits) debe estar comprendido entre -128 y 127 bytes desde la instrucción, que es el valor de desplazamiento máximo con signo que se puede representar con 8 bits.

    Transfiere el control a la instrucción “IP+Desplazamiento” si se cumple la condición especificada por la instrucción.

    No afecta a las banderas.

    · Tratamiento de datos sin signo.

    En esas instrucciones no se considera el signo, por lo que coge el menor independientemente del signo que tenga. No afecta a las banderas.

    INSTRUCCION

    DESCRIPCION

    CONDICION

    JB

    Salta si inferior

    CF=1

    JNAE

    Salta si no superior o igual

    CF=1

    JC

    Salta si hay carry

    CF=1

    JBE

    Salta si inferior o igual

    CF=1 ó ZF=1

    JNA

    Saltar si no superior

    CF=1 ó ZF=1

    JE

    Salta si es igual

    ZF=1

    JZ

    Salta si es 0

    ZF=1

    JNC

    Salta si no hay carry

    CF=0

    JAE

    Salta si superior o igual

    CF=0

    JNB

    Salta si no inferior

    CF=0

    JA

    Salta si superior

    CF=0 y ZF=0

    JNE

    Salta si no igual

    ZF=0

    JNZ

    Salta si no cero

    ZF=0

    JCXZ

    Salta si CX es 0

    CX=0

    · Tratamiento de datos con signo.

    INSTRUCCION

    DESCRIPCION

    CONDICION

    JL

    Salta si es menor

    SF<>OF

    JNGE

    Salta si no es mayor ni igual

    SF<>OF

    JLE

    Salta si menor o igual

    ZF=1 ó SF<>OF

    JNG

    Salta si no mayor

    ZF=1 ó SF<>OF

    JG

    Salta si mayor

    ZF=0 ó SF<>OF

    JNLE

    Salta si no menor o igual

    ZF=0 ó SF<>OF

    JGE

    Salta si mayor o igual

    SF=OF

    JNL

    Salta si no menot

    SF=OF

    · Otros.

    INSTRUCCIÓN

    DESCRIPCIÓN

    CONDICIÓN

    JP

    Salta si paridad

    PF=1

    JPE

    Salta si paridad par

    PF=1

    JNP

    Salta si no paridad

    PF=0

    JPO

    Salta si paridad impar

    PF=0

    JS

    Salta si signo

    SF=1

    JNS

    Salta si no signo

    SF=0

    TABLA ASCII


    dec

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14