Examenes Comentados

Partes del computador


...

Como podemos ver el computador se compone principalmente de la CPU que se compone de una ALU "unidad aritmética lógica",La unidad de control y los registros. Luego tenemos la MP "memoria principal" y el sistema de E/S.

ALU

Realiza las operaciones tanto aritméticas como lógicas. Para facilitar caso con acarreo o similar contara con el RE.

RE Registro de estado (Registro transparente el usuario no lo puede tocar , dice si ha pasado algo en la última operación Over flow...Z, C...). (Propósito específico )

  • Registro - Registro (viene de los registros) más rápido
  • Registro - Memoria (viene de la memoria )
  • Memoria - Memoria más lento
  • U. CONTROL

    Extrae de MP la instrucción, la analiza Activa las señales, es el que reparte las órdenes. Siempre se mira si estas en el nivel adecuado ( super user (1), user (0) )

  • PC - Contador de programa : guarda la instrucción que vamos a ejecutar (Registro transparente)(Propósito específico).
  • RI - Registro instrucción : información sobre la instrucción, la primera parte me da los datos de la operación y el resto
  • DR - Registro de datos: Bus de datos
  • AR - Registro de direcciones: Bus de direcciones
  • Registros

    BR: Banco de registro
    MEMORIA PRINCIPAL

    Conjunto de celdas,contiene los datos e instrucciones, señales : RD , WR , MEMRQ. Las operaciones de memoria tardan siempre más que los de CPU. la memoria se separa en código datos ya que de primeras no hay una diferencia entre ellos, por eso es importante separar las instrucciones de los datos “00…….000001100000”. Puede ejecutar un dato pensando que es una instrucción. Todas las instrucciones usan la memoria TODAS “fase de fetch”.

    ...

    porque se usan registros

    porque son más rápidos y por ello al hacer un programa lo más eficiente, es guardar todos los datos que vayas a necesitar en registros y a partir de ahí realizar las operaciones que necesites. De este modo ahorras tiempo de lectura durante la ejecución de las instrucciones. Latencia: desde que empieza hasta que acaba.

    UNIDAD E/S

    Instrucciones Fases:

    1. Fetch
    2. Decodificación
    3. Ejecución
    4. Prepara siguiente instrucción
    5. Vuelta al 1
    6. Finalización

    Las instrucciones manejan 3 tipos de datos, palabras (4 bytes), medias palabras (2 bytes) y Bytes.

    E/S Programada
  • Iniciar programa
  • Comprobar estado
  • Dato listo avanzamos, sino volvemos a comprobar estado
  • enviamos dato
  • fin de operación , si, terminamos, sino volvemos a comprobar estado
  • Osea como el nombre dice los pasos por el bus de E/S estan programadas y siguen un procedimiento establecido.

    E/S Interrupciones

    La CPU inicia la operación E/S, Ejecuta el programa , mientras el periferico cuando tenga los datos listos realizara la interrupción, en ese momento la CPU inicia la rutina de tratamiento de interrupción RTI realizandose la transferencia de los datos. La CPU tiene que salvar y restaurar el estado.

    E/S DMA

    La CPU inicia la operación E/S,el periferico mientras recibe la transferencua de datos a MP, la CPU Ejecuta el programa, y cuando se termina la transferencia de datos a MP se realiza una INT y la CPU realiza la rutina de tratamiento de interrupción.

    Tema 2 Programación en ensamblador

    Antes de empezar a programar !Pensar!

    Tipos de datos

  • Palabra: Tamaño privilegiado del computador 4 bytes
  • Medias Palabras 2 bytes
  • Bytes : cadena de carateres
  • Tipos de Direccionamiento

  • A nivel de palabra: Cada palabra tiene una dirección
  • A nivel de Bit: Cada byte tiene una dirección, dos palabras estan separadas por el tamaño en bytes de la palabra.
  • Alineamiento a palabra

  • Little-Endian - Byte menos significativo de una palabra en la dirección menos significativa.

  • 0x10 20 30 40

    1000 | 40 30 20 10

    1004 |
  • Big-Endian :Byte menos significativo de una palabra en la dirección más significativa.

  • 0x10 20 30 40

    1000 | 10 20 30 40

    1004 |

    Modos de Direccionamiento

    El concepto de direccionamiento lo que hace es decir donde esta el objeto, de este modo tenemos inmediato que el objeto es en la propia instrucción. Directo , absoluto -> la instrucción con la dirección completa del objeto,

  • Inmediato: El objeto está contenido en la propia instrucción. ADD .R1,#4
  • Relativo: Si la instrucción contiene la dirección del objeto de forma parcial.
  • Absoluto a registro: El objeto del direccionamiento está contenido en un registro. La instrucción contiene el registro que contiene el objeto del direccionamiento.
    ADD .R4,.R5       R4<- R4+R5
  • Absoluto a memoria: El objeto del direccionamiento está contenido en una dirección de memoria. La instrucción contiene la dirección completa de memoria que contiene el objeto del direccionamiento.
    LD .R4,/1000       R4 <- M(1000)
  • Relativo a registro base: El registro base se carga una dirección de memoria que contiene un conjunto de datos a los que se accede conociendo su posición relativa frente al comienzo de dicha zona: Estructuras de datos. El rango de direcciones al que se puede acceder está limitado por el tamaño del desplazamiento.

    DIR EFECTIVA = REGISTRO BASE(Registro de propósito específico o general que
    contiene una dirección a memoria.) + DESPLAZAMIENTO (Valor entero con signo.)

    LD .R1,#4[.R7]       R1<-MEM(R7+4)
  • Relativo Registro Base: Registro de propósito específico o general que contiene una dirección a memoria + Desplazamiento: Valor entero con signo.
  • Relativo a PC: Es un direccionamiento relativo a registro base en el que el registro base es el PC. “saltos”
    BR $10       PC <- PC + 10
  • Registro Índice: Es un direccionamiento relativo a registro base en el que el registro base se modifica. Incrementos y decrementos.
    Preincremento
    LD .R1,#8[++.R7] R7 <- R7+4 R1 <- MEM(R7+8)

    Predecremento
    LD .R1,#8[--.R7] R7 <- R7-4 R1 <- MEM(R7+8)

    Postincremento
    LD .R1,#8[.R7++] R1 <- MEM(R7+8) R7 <- R7+4

    Postdecremento
    LD .R1,#8[.R7--] R1 <- MEM(R7+8) R7 <- R7-4
  • Indirecto A Registro: La instrucción contiene la especificación del registro que contiene la dirección de memoria donde está almacenado el objeto.
    LD .R1,[.R4] R1<-MEM(R4)
  • Indirecto A Memoria: La instrucción contiene una dirección de memoria donde está contenida la dirección donde se almacena el objeto.
    LD .R1, [/1000] R1<- MEM(MEM(1000))

    Juego de instrucciones

    IEEE

    Transferencia de datos


    LD LD .R2,#4[.R4] R2 <- MEM(R4+4)
    ST ST .R2, #4[.R4] MEM(R4+4) <- R2
    MOVE MOVE .R2,.R4 R4 <- R2
    MOVE [.R2],[.R4] MEM(R4) <- MEM(R2)
    PUSH PUSH .R1 SP <- SP-4;MEM(SP) <- R1
    POP POP .R1 R1 <- MEM(SP); SP <- SP + 4
    BR BR /1000 PC <- 1000
    BR #4[.R4] PC <- R4+4
    BR $10 PC <- PC + 10 El PC apunta a la dirección de la siguiente instrucción
    BZ /1000 Si Z = 1 PC <- 1000
    BNC #4[.R4] Si C = 0 PC <- R4+4
    BP $10 Si S = 0 PC <- PC + 10

    CALL /1000 R1 <- PC ; PC <- 1000
    RET PC <- R1

    ADD .R1, .R2       R1 <- R1 + R2; mod. flags

    SUB .R1, .R2       R1 <- R1 – R2; mod. flags

    MUL .R1, .R2       R1 <- R1 · R2; mod. flags

    DIV .R1, .R2       R1 <- R1 / R2; mod. flags

    ADDC .R1, .R2 R1 <- R1 + R2 + c; mod. flags

    SUBC .R1, .R2 R1 <- R1 - R2 - c; mod. flags

    CMP .R1, .R2 R1 – R2 ; mod. flags

    Modelo Registro-Registro.

    ADD .R1,.R2 R1 <- R1 + R2; mod. Flags

    ADD .R1,#4 R1 <- R1 + 4; mod. Flags

  • Modelo Registro-Memoria.
  • ADD .R1,[.R2] R1 <- R1 + MEM(R2); mod. Flags

  • Modelo Memoria-Memoria.

    ADD [.R1],#4[.R2] MEM(R1) <- MEM(R1) + MEM(R2+4);

    AND .R1,.R2 R1 <- R1 AND R2; mod. Flags

  • Operaciones Lógicas

    XOR .R1,#4 R1 <- R1 XOR 4; mod. Flags

    OR .R1,.R2 R1 <- R1 OR R2; mod. Flags

    NOT .R1 R1 <- NOT R1; mod. Flags

    Se utilizan para trabajar con máscaras

    AND .R1, #1 ; Si Z = 1 el número es par

    Arquitectura 88110

    Usa 3 direcciones, modelo de ejecución registro-registro, palabras de 32 bits, ALU en complemento a 2.

  • R0 Cableado a 0
  • R1 Guarda dirección de retorno de subrutina accesibles por pares en operaciones de 64 bits.
  • R30 Puntero de pila
  • R31 Puntero de marco de pila

    Tiene direccionamiento :
  • Directo a registro: .Ri
    add r1, r2, r3 ; r1 <- r2 + r3
  • Inmediato:
    add r1, r2, 0xFFF3

    add r1, r2, -13
  • Relativo a registro base:
    ld r1, r4, 13 r1 <- MEM(r4+13)

    st r1, r4, 13 r1 <- MEM(r4+13)
  • Relativo a PC:
    ADD .7, .5

    BR $ desp ; PC <- et1+desp

    et1: LD .1, [.7]
  • Indirecto a registro:
    JMP (.R10) ; PC <- R10

    Juego de instrucciones

  • Lógicas (or, and, xor, mask)
  • Aritméticas (add, sub, addu, subu, muls, mulu, divs, divu, cmp)
  • Bifurcaciones (bb0, bb1, br, bsr, jmp, jsr)
  • Transferencia (ld, st, ldcr, stcr, xmem)
  • Campos de bit (clr, set, ext, extu, mak, rot) v Coma flotante (fadd, fsub, fmul, fdiv, fcvt, flt, int, fcmp)

    Pseudoinstrucciones

  • Org n: Indica que el código que le sigue se almacene en la posición de memoria n.
  • Res n: Indica que se reserven n bytes en memoria. N debe estar alineado a palabra.
  • Data a, b, c, ....: Inicializa las posiciones de memoria con los valores a, b y c.
  • Data “texto”: Inicializa las posiciones de memoria con la cadena de bytes texto. Asegura que la siguiente palabra en memoria está alineada (véase ejemplo).
  • Low(etiqueta o inmediato): Devuelve los 16 bits menos significativos de la dirección asociada a la etiqueta o dato inmediato.
  • High(etiqueta o inmediato): Devuelve los 16 bits más significativos de la dirección asociada a la etiqueta o dato inmediato.

    Macros:

    Conjunto de sentencias a las que se le asigna un nombre y se les pasa un conjunto de argumentos.

    Subrutinas

    Parte de código cerrado, con especificación bien definida, que se puede utilizar desde varios puntos de un programa o diferentes programas. Una vez ejecutado el código de la subrutina se debe retornar “al lugar desde el que se llamó”.

  • Variables globales: se crean cuando arranca el programa y tiene validez durante toda la vida del mismo
  • Variables locales: Se crean cada vez que se activa la subrutina y se destruyen cuando se finaliza cada ejecución.

    Marco de pila:

    Conjunto de datos privados a una subrutina que incluye, parámetros, dirección de retorno y variables locales. Se dedica un registro que apunta a una posición conocida del marco de pila: puntero de marco de pila (frame pointer o FP). En 88110 es r31. Pasos a seguir para subrutinas del 88110

    1. Activación de las subrutinas y creación del marco de pila
    • 1.1 Almacenamiento de la dirección de retorno
    • Guardar puntero de marco de pila antiguo
    • Creamos el marco de pila
    • Se establece el nuevo valor de fp
    • Reservar espacio en la pila para variables locales y salvar registros
    • Inicializar variables locales
    2. Código de subrutina
    3. Destrozar marco de pila y retorno de subrutina
    • Restaurar puntero del marco de pila antiguo
    • Recuperar este
    • Recuperar dirección de retorno
    • Retornar