Estructura de Computadores: Tema 1 El procesador Índice z z Arquitectura del i8086 Registros del i8086 Introducción Estudiaremos la arquitectura del procesador i8086 (CPU, registros, ...), su gestion de la memoria y su conjunto de instrucciones. z Programaremos en lenguaje ensamblador z Todo esto lo enlazaremos con los conocimientos previos de Tecnología de Computadores z Arquitectura del i8086 z z – Manejo de bytes z – Busqueda – Decodificación – Ejecución Gestion de Memoria – Esquema de almacenamiento z z z ¿dónde está el PC? Ensamblador del i8086 Mapa de memoria de un programa Máquina de programa almacenado. Ciclo de instrucción z z B.I.U.: Unidad de Intefaz con el Bus. Direcciona la memoria. Busca las instrucciones y las guarda en una cola. E.U.: Unidad de Ejecución. Decodifica y ejecuta la instrucción. Los registros del i8086 z Dispone de 14 registros de 16 bits. – – – – – 4 generales: AX, BX, CX y DX. 4 de segmento: CS, SS, DS, ES. 3 punteros: SP, BP, IP. 2 de índice: SI, DI. 1 de Flags. Se usan 9 de los 16 bits. Manejo de bytes Se pueden realizar transferencias y operaciones sobre datos de 1 byte. z Los registros AX, BX, CX y DX se pueden direccionar como dos registros de 8 bits cada uno. z Estos registros se llaman: AH, AL; BH, BL; CH, CL; y DH, DL. z – H (High): byte más significativo – L (Low): byte menos significativo. 6 bits de estado: CF, OF, ZF, PF, SF, AF. z 3 bits de control: DF, IF, TF. z Gestion de la Memoria (BIU) Direcciona la memoria a nivel de byte. z Utiliza 20 bits de direcciones (1 Mbyte). Esquema de Almacenamiento z – Los registros son de 16 bits!!! – La BIU se encarga de generar las direcciones z Dirección lógica – segmento:desplazamiento z Dirección física – segmento*10h+desplazamiento z El segmento lo indica un registro de segmento. Utiliza el convenio Little-Endian: “el byte menos significativo ocupa la posición más baja”. z Otras máquinas utilizan el convenio opuesto (Big-Endian). z El número 11FFh en la posición 14h de memoria se almacena: FFh (1 byte) en la posición 14h y 11h en la posición 15h. z ¿dónde está el PC? z z z z z z z NO existe un registro PC (Program Counter). La siguiente instrucción a ejecutar está en una posición de la memoria de 1Mb, luego necesitamos 20 bits para direccionar. Como hemos visto, los registros son de 16 bits, así que necesitamos saber el segmento y el desplazamiento (dirección lógica) para calcular la dirección física. Registro de segmento: CS (Code Segment) Desplazamiento: IP (Instruction Pointer) La siguiente instrucción está en CS:IP Los registros CS e IP se encuentran en la BIU Objetos Constantes: valores numéricos. z Variables: nombre que apunta a una dirección de memoria donde se almacena un valor. z Etiqueta: nombre simbólico que acompaña a una instrucción, apunta a esa dirección. z El ensamblador Segmentos: datos, pila y código. z Objetos: constantes, variables y etiquetas. z Instrucciones: transferencia de datos, transferencias de control, aritméticas, manejo de bits, manejo de cadenas, de control (flags) e interrupciones. z Directivas: asignación, segmento, procedimiento, operando y macros. z N EQU –3 DATOS SEGMENT ;Segmento de datos A1 dw –1 A2 dw 7777h DATOS ENDS PILA SEGMENT STACK ;Segmento de pila DB 64 DUP (‘?’) PILA ENDS CODIGO SEGMENT ;Segmento de codigo ASSUME CS:CODIGO, SS:PILA, DS:DATOS INICIO: MOV AX, DATOS MOV DS, AX ETIQ1: MOV AX, A1 MOV BX, A2 ADD AX, BX MOV AX, 4C00h INT 21h ;para volver al DOS CODIGO ENDS END INICIO Instrucciones z z z z z z z Transferencia de datos: IN, LEA, MOV, OUT, POP, PUSH, ... Aritméticas: ADD,DEC,DIV,INC,MUL,SUB, ... Manejo de bits: AND, NOT, OR, ROL, ROR, SHL, SHR, ... Transferecia de control: CALL, JMP, LOOP, RET, J(cond), JN(cond). Manejo de cadenas: MOVS, ... Interrupcion: INT, IRET. De control: CLC, CLD, CLI, ... Directivas Asignación: EQU,=,DB,DW,DD,DQ,DT. z Segmento: ASSUME, SEGMENT, ENDS, STACK (modificador). z Procdimiento: PROC, ENDP. z Fin de programa: END. z Operando: +,-,*, /, AND, OR, NOT, SEG, OFFSET, PTR. z Macros: MACRO, ENDM. z N EQU –3 DATOS SEGMENT ;Segmento de datos A1 dw –1 A2 dw 7777h DATOS ENDS PILA SEGMENT STACK ;Segmento de pila DB 64 DUP (‘?’) PILA ENDS CODIGO SEGMENT ;Segmento de codigo ASSUME CS:CODIGO, SS:PILA, DS:DATOS INICIO: MOV AX, DATOS MOV DS, AX ETIQ1: MOV AX, A1 MOV BX, A2 ADD AX, BX MOV AX, 4C00h INT 21h ;para volver al DOS CODIGO ENDS END INICIO N EQU –3 DATOS SEGMENT ;Segmento de datos A1 dw –1 A2 dw 7777h DATOS ENDS PILA SEGMENT STACK ;Segmento de pila DB 64 DUP (‘?’) PILA ENDS CODIGO SEGMENT ;Segmento de codigo ASSUME CS:CODIGO, SS:PILA, DS:DATOS INICIO: MOV AX, DATOS MOV DS, AX ETIQ1: MOV AX, A1 MOV BX, A2 ADD AX, BX MOV AX, 4C00h INT 21h ;para volver al DOS CODIGO ENDS END INICIO Mapa de memoria z Posiciones de los segmentos de un programa en la memoria – Siempre empiezan en una posición múltiplo de 10h. z Valor de los registros de segmento – Hay que inicializar DS y ES. z El PSP (Program Segment Prefix) Fuentes de información adicionales Bibliografía recomendada en el programa de la asignatura (en biblioteca). z Guión de la práctica 1 (en reprografía). z Guías Norton, HelpPC (en los ordenadores del laboratorio) z