![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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/1.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/2.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/3.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/4.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/5.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/6.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/7.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/8.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/9.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/10.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/11.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/12.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/13.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/14.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/15.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/16.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/17.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/18.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/19.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/20.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/21.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/22.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/23.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/24.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/25.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/26.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/27.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/28.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/29.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/30.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/31.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/32.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/33.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/34.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/35.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/36.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/37.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/38.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/39.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/40.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/41.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022071403/60f6fa2313bf565a651575e7/html5/thumbnails/42.jpg)
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