Ciclos de máquina - UNSLpmp/archivos/teoria7_bol4.pdf · Dado el siguiente circuito, escribir un...

Click here to load reader

  • date post

    22-Oct-2018
  • Category

    Documents

  • view

    213
  • download

    0

Embed Size (px)

Transcript of Ciclos de máquina - UNSLpmp/archivos/teoria7_bol4.pdf · Dado el siguiente circuito, escribir un...

  • Ciclos de mquina Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP)

    DCX rp

  • Acceso a perifricos: funcin del pin IO/M Este P cuenta con dos instrucciones especficas para I/O, llamadas IN y OUT.

    Cuando se ejecuta un IN en lugar de un LDA, la lnea IO/M se pone en alto (lo mismo ocurre con OUT frente a STA).

    Adems, en estos casos, solo se utilizan direcciones de 8 bits:

    IN dir_puerto

    Lenguaje de mquina: 11011011 = DBh (opcode)00110011 = 33h (dir. puerto entrada, de 8 bits)

    En assembler: IN 33h A (puerto 33h)

    OUT dir_puerto

    Lenguaje de mquina: 11010011 = D3h (opcode)01000101 = 45h (dir. puerto salida, de 8 bits)

    En assembler: OUT 45h (puerto 45h) A

  • Ciclos de mquina: instruccin OUT

  • Ciclos de mquina: instruccin STA

  • Terminales del P 8085(vistos hasta ahora)

    Buses de direcciones y datos

    Bus de control

    Alimentacin, clock, reset

  • Acceso a memorias lentas: funcin del pin READY Diferencias en ciclos de lectura con y sin estados de espera (TW):

  • Clculo de tiempos de ejecucin

    (puerto 33h) 00000000b

    B 100

    B B-1

    activ Z?

    (puerto 33h) 00000001b

    B 100

    B B-1

    activ Z?

    2000h: MVI A,00000000b2002h: OUT 33h2004h: MVI B,1002006h: DCR B2007h: JNZ 2006h200Ah: MVI A,00000001b200Ch: OUT 33h200Eh: MVI B,1002010h: DCR B2011h: JNZ 2010h2014h: JMP 2000h2015h:

    delay

    delay

    Ejemplo: parpadeo de un bit en el puerto 33h

  • Clculo de tiempos de ejecucin1000h: LXI SP,4100h

    .

    .

    .2000h: MVI A,00000000b2002h: OUT 33h2004h: CALL 3000h2007h: MVI A,00000001b2009h: OUT 33h200Bh: CALL 3000h200Eh: JMP 2000h2011h:

    .

    .

    .3000h: MVI B,1003002h: DCR B3003h: JNZ 3002h3006h: RET

    .

    .

    .4000h:

    .

    .

    .4100h:

    programaprincipal

    subrutina

    zona de RAMdedicada al

    stack

    Solucin usando una subrutina:

  • Ejercicio 1: decodificacin y acceso a puertosDado el siguiente circuito, escribir un programa en assembler y hexadecimal para el 8085 a

    partir de la direccin que se ejecuta despus de un reset, de modo que:

    a) Encienda los leds de salida que correspondan a los contactos que permanezcan cerrados.

    b) Encienda los leds de salida que correspondan a los contactos que permanezcan abiertos.

  • Ejercicio: decodificacin y acceso a puertos

    Direccin A15 . . . A8 A7 A6 A5 A4 A3 A2 A1 A0Puerto entrada . . . 0 0 1 X 1 1 1 1 (2F)Puerto salida . . . 1 0 0 X 1 1 1 1 (8F)

    Leer puerto de entrada

    Enviar valor apuerto de salida

    COMASSEMBLER:

    DIR: HEXA:

    2000 DB 2000h: IN h8F2001 8F

    2002 D3 OUT h2F2003 2F

    2004 C3 JMP h20002005 002006 20

    Parte a):

  • Ejercicio: decodificacin y acceso a puertos

    Leer puerto de entrada

    Enviar valor apuerto de salida

    COMASSEMBLER:

    DIR: HEXA:

    2100 DB 2100h: IN h2F2101 2F

    2102 2F CMA

    2103 D3 OUT h8F2104 8F

    2105 C3 JMP h21002106 002107 21

    Parte b):

    Invertir

    Se podra leer o escribir esos puertos con instrucciones LDA o STA?

    Que le cambiara al circuito para lograrlo?

  • Lenguaje Assembler Es ms fcil de manejar que el lenguaje de mquina.

    Consiste esencialmente de las mismas instrucciones que el P (los mnemnicos).

    Se agregan otras instrucciones propias del lenguaje, llamadas pseudo-instrucciones o directivas del ensamblador (empiezan con un punto).

    Se hace uso de las llamadas etiquetas (o labels) para efectuar saltos o sealar una direccin.

    Algunas pseudo-instrucciones son:

    .ORG dir(Indica que el cdigo que sigue a continuacin ha de ubicarse a partir de la direccin dir)

    .END(Indica el fin del programa)

    label .EQU data(le asigna a la etiqueta label el valor data)

  • Clculo de tiempos de ejecucin1000h: LXI SP,4100h

    .

    .

    .2000h: MVI A,00000000b2002h: OUT 33h2004h: CALL 3000h2007h: MVI A,00000001b2009h: OUT 33h200Bh: CALL 3000h200Eh: JMP 2000h2011h:

    .

    .

    .3000h: MVI B,1003002h: DCR B3003h: JNZ 3002h3006h: RET

    .

    .

    .4000h:

    .

    .

    .4100h:

    programaprincipal

    subrutina

    zona de RAMdedicada al

    stack

    (puerto 33h) 00000000b

    B 100

    B B-1

    activ Z?

    (puerto 33h) 00000001b

    B 100

    B B-1

    activ Z?

  • Mismo ejemplo pero en lenguaje assembler:pilaini: .EQU 4100htiempo: .EQU 100puerto: .EQU 33h

    ;-------------------------------------; Programa principal

    .ORG 1000h

    LXI SP,pilaini ; inicializo el stack; para poder usar CALL

    parpadear: MVI A,00000000bOUT puerto ; apaga el LEDCALL demoraMVI A,00000001bOUT puerto ; enciende el LEDCALL demoraJMP parpadear

    ;--------------------------------------; Subrutina de delay, T=tiempo*14*Tclock (aprox.)

    demora: MVI B,tiemporepetir: DCR B

    JNZ repetirRET

    .END

  • Ejercicio 2: decodificacin y algo masDado el siguiente circuito, escribir un programa en assembler y hexadecimal para el 8085 a

    partir de la direccin que se ejecuta despus de un reset que:

    a) Reproduzca en los 8 leds superiores el contenido del registro B del P y en los 8 inferiores el contenido del registro C.

    b) Indicar el valor de la suma del contenido de los registros A, B y C ( A+B+C ) y colocarlo en binario en los 16 bits formados por los dos puertos (superior mas significativo).

  • Ejercicio 2: decodificacin y algo masDireccin A15 . . . A8 A7 A6 A5 A4 A3 A2 A1 A0

    Salida de arriba X . . . X 1 1 1 1 0 1 0 1 (F5)Salida de abajo X . . . X 1 1 1 1 0 1 0 0 (F4)

    Leer registro B

    Invertir

    COMASSEMBLER:

    DIR: HEXA: .ORG h00000000 C3 JMP START0001 00 .0002 01 .. . .. .. . .ORG h0100

    0100 78 START: MOV A,B0101 2F CMA0102 D3 OUT hF50103 F50104 79 MOV A,C0105 2F CMA0106 D3 OUT hF40107 F40108 C3 JMP START0109 00010A 01

    Escribir puerto de arriba

    Leer registro C

    Invertir

    Escribir puerto de abajo

    Parte a):

  • Ejercicio 2: decodificacin y algo mas

    Inicializar variables

    Sumar A+B+C

    COM

    ASSEMBLER:

    DIR: HEXA: .ORG h00000000 C3 JMP START0001 00 .0002 1F .

    . . .

    . .

    . . .ORG h1F001F00 26 START: MVI H,01F01 001F02 80 ADD B1F03 D2 JNC SALTO1F04 071F05 1F1F06 24 INR H1F07 81 SALTO: ADD C1F08 D2 JNC SALTO11F09 0C1F0A 1F1F0B 24 INR H1F0C D3 SALTO1: OUT hF41F0D F41F0E 7C MOV A,H1F0F D3 OUT hF51F10 F51F11 C3 JMP START1F12 001F13 1F

    Escribir puerto de arriba

    Escribir puerto de abajo

    Parte b):