Top Banner
Repaso: Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras
42

Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Feb 24, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Repaso:

Arquitectura 8086

Instituto de Computación

Facultad de Ingeniería

Universidad de la República

2020

Arquitectura de Computadoras

Page 2: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Características:

– Procesador de 16 bits.

• 8088 con bus de memoria de 8 bits.

– Memoria segmentada.

– 12 registros visibles, con personalidad.

– Little Endian.

– Diseño CISC, incluyendo instrucciones de multiplicación y

división enteras.

– Stack por Hardware.

Page 3: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Características:

– Formato de instrucción de dos operandos.

• Uno es origen y destino.

– 12 Registros visibles: CS, DS, SS, ES, AX, BX, CX, DX, SI,

DI, SP y BP.

– Registros parcialmente visibles: IP, FLAGS.

– Los registros son personalizados, es decir no se pueden

intercambiar libremente en su utilización.

Page 4: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Registros:

– CS, DS, SS, ES: Registros de segmento. Code, Data, Stack

y Extra Segment.

– AX, BX, CX, DX: Registros de uso general. Acumulator,

Base, Counter y Data.

– Variantes de 8 bits, por ejemplo AX -> AH, AL.

– SP y BP: Registros Stack y Base Pointer. Implementación

de stack.

– SI y DI: Registros Source y Destination Index.

Page 5: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Registro FLAGS:

Page 6: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Memoria Segmentada:

– Con direcciones de 16 bits, se pueden direccionar

únicamente 64 KB.

– Para direccionar 1 MB recurren a un direccionamiento

basado en segmentos de memoria de 64 KB.

– Se disponen 4 registros de segmento (CS, DS, SS y ES)

que se utilizan exclusivamente para el acceso a memoria.

– Dirección Final [20] = Registro de segmento * 24 +

Desplazamiento (Dirección Indicada)

Page 7: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Memoria Segmentada:

Page 8: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Modos de Direccionamiento:

– Inmediato

– Directo (a Registro / a Memoria)

– Indirecto (por Registro)

– Indizado (combinación de Indirecto y Directo a Memoria)

– Hay restricciones para los modos indirecto e indizado

{BX | BP} [+ {SI | DI}] [+ desplazamiento]

{SI | DI} [+ desplazamiento] | desplazamiento

Page 9: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Ejemplos de Modos de Direccionamiento:

– MOV AX, 1234

– ADD BX, [1234]

– ADD CX, [0x1234]

– CMP DL, [BX]

– SUB DI, [BP]

– SUB DI, [BP + DI]

– SUB DI, [BP + DI + 0x1234]

Page 10: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Segmentos por defecto:

– MOV ES:[BX], AX

– MOV DX, SS:[DI]

Page 11: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Soporte de Stack por hardware:

– Registros SS, SP y BP

– Instrucciones PUSH y POP

– Estructura de 16 bits (no maneja bytes)

Page 12: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Soporte de Stack por hardware:

Page 13: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Set de Instrucciones:

– Aritméticas (ADD, SUB, INC, MUL, DIV)

– Lógicas (AND, OR, XOR)

– Control (JMP, Jxx)

– Transferencia de datos (MOV, IN, OUT, PUSH, POP)

– Control de funcionamiento (STI, CLI)

– Largo variable

– Dos operandos, de los cuales solo uno puede ser memoria

Page 14: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Es una forma sencilla de escribir programas en lenguaje de

máquina (usando las instrucciones de la CPU)

– Consta de los siguientes elementos:

• Comentarios

• Constantes

• Instrucciones

• Etiquetas

• Directivas

Page 15: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Comentario es cualquier texto luego de ; y hasta el final de

la línea.

– Constantes

• Numéricas

– 001101b (Binario)

– 664o (Octal)

– FE53h o 0xFE53 (Hexadecimal)

– 120 (Decimal positivo)

– -120 (Decimal negativo)

Page 16: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Constantes

• Texto

– ‘c’ (Carácter)

– “Hola mundo!” (String)

– Instrucciones

• ADD op1, op2

• INC op1

• PUSH op1

Page 17: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Etiquetas

• Formadas por letras y números

• Referencia la posición de la instrucción o estructura de memoria

que esté definida a continuación

Page 18: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Directivas

• Utilizadas para indicar datos constantes y datos iniciales

• EQU

• DB, DW, DDW (con el operador DUP)

• PROC y ENDP

Page 19: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Programando el control del flujo del programa

• Se utilizan los saltos, tanto incondicionales como condicionados a

valores de las banderas de condición (C, O, S, Z)

• Existe un set de saltos condicionales “con signo” o “sin signo”

• El ensamblador no es un lenguaje estructurado (en realidad no es

un lenguaje estrictamente hablando)

• Las sentencias de control de flujo de los lenguajes de alto nivel

deben traducirse utilizando saltos

• La instrucción CMP es muy útil en estos casos

Page 20: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– If-then

Page 21: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– If-then-else

Page 22: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– While

Page 23: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Anidadas

Page 24: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Estructuras de memoria

• Por definición, una variable es un espacio en memoria con un

nombre asignado.

• En ensamblador esto se mapea a posiciones de memoria

identificadas con una etiqueta.

• El ensamblador usa un modelo de memoria estático.

• No existen funciones como “new” o “delete”

• Las variables también pueden almacenarse en registros

Page 25: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

Page 26: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Estructuras de memoria

• Arreglos

Page 27: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Estructuras de memoria

• Structs

Page 28: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Estructuras de memoria

• Structs

Page 29: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Invocación de funciones

• Pasaje de parámetros por registros o por stack

• Mismas alternativas para el resultado

• El llamado utiliza el stack para guardar el punto al cual retornar al

finalizar la función

• Instrucciones CALL y RET

• Atributos NEAR y FAR

• El stack se utiliza para salvar el contexto (valor de registros)

Page 30: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Preservación de Contexto (salvar registros)

Page 31: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Pasaje de Argumentos y Resultados por stack

• Para acceder a los argumentos se puede hacer POP en el código

de la función, recordando que el primer POP trae del stack la

dirección de retorno.

• Una alternativa es utilizar BP para direccionar dentro del stack:

PUSH BP ; salvo valor actual de BP

MOV BP, SP ; BP apunta al tope del stack

; [BP] -> valor salvado de BP

; [BP + 2] -> dirección de retorno

; [BP + 4] -> argumento

Page 32: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Ajuste de stack para el (los) resultado(s)

• Cuando la cantidad de palabras de resultado no coincide con la de

los argumentos, no alcanza con escribir los resultados en los

lugares ocupados por los argumentos y es necesario ajustar el

stack.

• Para el caso en que haya menos resultados es necesario reducir el

stack y para el caso contrario hay que agrandarlo.

• En ambas situaciones es necesario mover la dirección de retorno,

para que ocupe el lugar correcto.

Page 33: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Ejemplo de 2 argumentos y 1 resultado:

PUSH BP

MOV BP, SP

MOV BX, [BP + 4] ; argumento 2

MOV AX, [BP + 6] ; argumento 1

--------- ; código de procesamiento

MOV AX, [BP + 2] ; AX <- dirección de retorno

MOV [BP + 4], AX ; acomodo dirección de retorno

MOV [BP + 6], resultado

POP BP

ADD SP, 2 ; “achico” el stack

RET

Page 34: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Ejemplo de 1 argumento y 2 resultados:

SUB SP, 2 ; “agrando” el stack

PUSH BP

MOV BP, SP

MOV AX, [BP + 4] ; AX <- dirección de retorno

MOV [BP + 2], AX ; acomodo dirección de retorno

MOV AX, [BP + 6] ; argumento 1

--------- ; código de procesamiento

MOV [BP + 6], resultado2

MOV [BP + 4], resultado1

POP BP

RET

Page 35: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 1

Page 36: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 1

• En este caso solo se guarda la dirección de retorno en el stack

Paso base: consumo(0) = 2

Paso recursivo: consumo(n) = 2 + consumo(n - 1)

Total: consumo(n) = 2 * n + 2

Page 37: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 2

Page 38: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 2

• En este caso solo se guarda la dirección de retorno en el stack

Paso base: consumo(0) = 2

Paso recursivo: consumo(n) = 4 + consumo(n - 1)

Total: consumo(n) = 4 * n + 2

Page 39: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 3

Page 40: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 3

• En este caso solo se guarda la dirección de retorno en el stack

Paso base: consumo(0) = 4

Paso recursivo: consumo(n) = 6 + consumo(n - 1)

Total: consumo(n) = 6 * n + 4

Page 41: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 4

Page 42: Arquitectura de Computadoras · Arquitectura 8086 Instituto de Computación Facultad de Ingeniería Universidad de la República 2020 Arquitectura de Computadoras. Arquitectura 8086

Arquitectura 8086

Lenguaje Ensamblador:

– Rutinas Recursivas 4

• En este caso solo se guarda la dirección de retorno en el stack

Paso base: consumo(0) = 10

Paso recursivo: consumo(n) = 10 + consumo(n - 1)

Total: consumo(n) = 10 * n + 10