Práctica 3: Programación en ASM Orga 1

Documentos relacionados
Práctica 3 - Arquitectura del CPU

Guía de ejercicios # 8 Flags y Saltos

Organización de Computadoras

Práctica 6: Programación en ASM Orga 1

Operaciones lógicas y repetición

Organización de computadoras. Clase 8. Universidad Nacional de Quilmes. Lic. Martínez Federico

Arquitectura del CPU. Organización del Computador 1 Verano 2016

El Diseño de un Lenguaje Máquina

Práctica 4 - Arquitectura CPU

Introducción al simulador

Práctica 4 - Arquitectura CPU

Arquitectura de Computadores II Clase #3

Repaso Registros internos Z80 1/37

Unidad 2 Programación en Lenguaje Ensamblador

FUNCIONAMIENTO DEL ORDENADOR

Guía de ejercicios # 4 Rutinas: modularización y reuso

Los números naturales y enteros en el 80X86 y en LAN

Práctica 7 - Microarquitectura del CPU

Unidad Nº II Capacidad de la unidad central. de procesamiento. Instituto Universitario Politécnico. Santiago Mariño

Arquitectura de Computadores II Clase #3

Guía práctica lenguaje ensamblador

Práctica 4 - Microarquitectura del CPU

Introducción Ejercicio Interrupciones Ejercicio Cierre. Entrada/Salida. Organización del Computador I. Departamento de Computación - FCEyN UBA

Bus de direcciones. Bus de datos

Organización de computadoras. Clase 4. Universidad Nacional de Quilmes. Lic. Martínez Federico

Arquitectura de Computadoras

Organización del Computador. Máquina de von Neumann Jerarquía de Niveles

Conceptos de Arquitectura de Computadoras Curso 2015

Dado el siguiente programa, ensamblado y cargado a partir de la posición de memoria 0x0010, en una máquina Orga1, se pide:

Tema 2 INSTRUCCIONES DE UN COMPUTADOR. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Repaso concepto de programa

Ejercicios Práctica 4 Primer Cuatrimestre de de abril de 2008

TEMA 5 JUEGO DE INSTRUCCIONES DE UN COMPUTADOR

Modos de Direccionamiento+ Diseño de ISA. Organización del Computador 1 Verano 2016

Organización de Computadoras. Clase 7

Ensamblador. Introducción. Dpto. Física y Arquitectura de Computadores. Universidad Miguel Hernandez

Estructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS

Estructura de Computadores: Tema 1. Introducción. Índice. Arquitectura del i8086

El nivel ISA (II)! Conjunto de Instrucciones

8.4. El software en los μprocesadores

Instrucciones del microprocesador

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Intel Departamento de Arquitectura 1. Facultad de Ingeniería Universidad de la República. Arquitectura de Computadoras, 2016

Arquitectura de Computadoras

Estructura de los sistemas de cómputo

a) if (i==5){ j=2*k; k=k+1; } else { j=k; k=1; } c) for (i=0, i<5, i++){ j=k+m; m=2*m; } b) if (i<0){ i=i-5; } if (i==0){ i=4; }

EXAMEN ORDINARIO DE ORGANIZACIÓN DE COMPUTADORES

Tema 2. Diseño del repertorio de instrucciones

Arquitectura y mapa de memoria del 80C167. Cesáreo Fernández Martínez Álvaro Sánchez Miralles

Funciones y Datos en Intel 8086

Organización del Computador 1. CPU (ISA) Conjunto de Instrucciones de la Arquitectura 2017

PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88

Dada la CPU con la estructura interna que se muestra en la figura,

Instituto Tecnológico de Morelia

Introducción a la arquitectura de computadores

ARQUITECTURA VON NEUMANN

2º CURSO INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN TEMA 2 UNIDAD DE CONTROL JOSÉ GARCÍA RODRÍGUEZ JOSÉ ANTONIO SERRA PÉREZ

Registros Arquitectura x86. M. en C. Erika Vilches

ESTRUCTURA. Estructura básica de un computador ESTRUCTURA BÁSICA DE UN COMPUTADOR RELOJ. Unidad de control CPU ULA. Onda cuadrada RELOJ

Instrucción De Salto Incondicional

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

Memoria y Buses. Organización de Computadoras Universidad Nacional de Quilmes

CS2: Unidad de datos (UD)

Construyendo Programas más Complejos

La Unidad Aritmética

ALU. Unidad aritmético-lógica

Tema 2: Segmentación y modos de direccionamiento

TEMA VI DISEÑO DEL PROCESADOR

Estructura de Computadores. Problemas de Instrucciones y Direccionamientos

Comparaciones en lenguaje ensamblador

Microprocesadores. Informática Aplicada DSI-EIE FCEIA

Arquitectura de Computadores II Clase #4

Arquitectura de Computadores II Clase #4

Elementos constituyentes de la ejecución de un programa

Transcripción:

Ignacio Eguinoa Organización del Computador I DC - UBA Segundo Cuatrimestre de 2015

Generaciones de lenguajes 1G: Lenguaje de máquina(código binario de operaciones) 2G: Lenguaje Ensamblador(Assembly) (Textual mediante mnemónicos) 3G: Lenguajes de alto nivel (C, C++, Java, etc) 4G: PL/SQL 5G: Programación lógica, declarativa, etc.

Ensamblador (Assembler) Lenguaje ensamblador Lenguaje de 2da Generación Se refiere directamente a las instrucciones de hardware (depende de la computadora que lo ejecuta) Textual (no confundir con el código de máquina) Lenguaje en el que escribimos programas para la máquina Orga1

Arquitectura Orga1 Componentes de la máquina Orga1:

Arquitectura Orga1 Componentes de la máquina Orga1: Procesador (CPU)

Arquitectura Orga1 Componentes de la máquina Orga1: Procesador (CPU) Memoria

Arquitectura Orga1 Componentes de la máquina Orga1: Procesador (CPU) Memoria Dispositivos de Entrada/Salida

Arquitectura Orga1 CPU Unidad Aritmético-Lógica (ALU) Flags: Z, N, C, V Registros 8 registros de propósito general de 16 bits (R0 a R7)

Arquitectura Orga1 CPU Unidad Aritmético-Lógica (ALU) Flags: Z, N, C, V Registros 8 registros de propósito general de 16 bits (R0 a R7) 3 registros de propósito específico de 16 bits PC (program counter) SP (stack pointer) IR (instruction register)

Arquitectura Orga1 CPU Unidad Aritmético-Lógica (ALU) Flags: Z, N, C, V Registros 8 registros de propósito general de 16 bits (R0 a R7) Memoria 3 registros de propósito específico de 16 bits PC (program counter) SP (stack pointer) IR (instruction register)

Arquitectura Orga1 CPU Unidad Aritmético-Lógica (ALU) Flags: Z, N, C, V Registros 8 registros de propósito general de 16 bits (R0 a R7) Memoria 3 registros de propósito específico de 16 bits PC (program counter) SP (stack pointer) IR (instruction register) Direcciones de 16 bits (de 0x0000 a 0xFFEF) Palabras de 16 bits

ASM Orga1 Qué operaciones básicas necesitamos?

ASM Orga1 Qué operaciones básicas necesitamos? Operaciones de manejo de memoria ( MOV )

ASM Orga1 Qué operaciones básicas necesitamos? Operaciones de manejo de memoria ( MOV ) Operaciones aritmético-lógicas ( ADD, SUB, OR, etc.)

Formato de instrucción Tipo 1: Instrucciones de dos operandos operación cod. op. efecto modifica flags MOV d, f 0001 d f no ADD d, f 0010 d d + f (suma binaria) sí SUB d, f 0011 d d f (resta binaria) sí AND d, f 0100 d d and f sí ( ) OR d, f 0101 d d or f sí ( ) CMP d, f 0110 Modifica los flags según el resultado de d f. sí ADDC d, f 1101 d d + f + carry (suma binaria) sí ( ) dejan el flag de carry (C) y el de overflow (V) en cero.

Modos de direccionamiento Y los operandos?

Modos de direccionamiento Y los operandos? Modo Ejemplo Inmediato 0xEF06 Directo [0x0007] Indirecto [[0x0009]] Registro R1 Indirecto registro [R3] Indexado [R2 + 0x0003]

Formato de instrucción Tipo 4: Saltos relativos condicionales El salto se produce si se cumple la condición de salto correspondiente. No modifican flags. Codop Operación Descripción Condición de Salto 1111 0001 JE Igual / Cero Z 1111 1001 JNE Distinto not Z 1111 0010 JLE Menor o igual Z or ( N xor V ) 1111 1010 JG Mayor not ( Z or ( N xor V ) ) 1111 0011 JL Menor N xor V 1111 1011 JGE Mayor o igual not ( N xor V ) 1111 0100 JLEU Menor o igual sin signo C or Z 1111 1100 JGU Mayor sin signo not ( C or Z ) 1111 0101 JCS Carry / Menor sin signo C 1111 0110 JNEG Negativo N 1111 0111 JVS Overflow V

Saltos condicionales Cómo indico el destino del salto?

Saltos condicionales Cómo indico el destino del salto? El lenguaje ensamblador nos permite usar etiquetas

Ahora si... A PROGRAMAR!

Ejercicio 1 Enunciado: Escribir un programa que calcule la división entera entre dos enteros sin signo de 16 bits.

Ejercicio 1 Enunciado: Escribir un programa que calcule la división entera entre dos enteros sin signo de 16 bits. R1 contiene la dirección de memoria donde se aloja el dividendo.

Ejercicio 1 Enunciado: Escribir un programa que calcule la división entera entre dos enteros sin signo de 16 bits. R1 contiene la dirección de memoria donde se aloja el dividendo. R2 contiene la dirección de memoria donde se aloja el divisor.

Ejercicio 1 Enunciado: Escribir un programa que calcule la división entera entre dos enteros sin signo de 16 bits. R1 contiene la dirección de memoria donde se aloja el dividendo. R2 contiene la dirección de memoria donde se aloja el divisor. R3 debe ser el registro en el que se guarda el cociente (el resultado de la división).

Ejercicio 1 Enunciado: Escribir un programa que calcule la división entera entre dos enteros sin signo de 16 bits. R1 contiene la dirección de memoria donde se aloja el dividendo. R2 contiene la dirección de memoria donde se aloja el divisor. R3 debe ser el registro en el que se guarda el cociente (el resultado de la división). En caso de que el divisor sea 0, habrá que devolver 0.

Pseudocódigo del Ejercicio 1 resultado = 0 if (divisor == 0): listo else: while (dividendo >= divisor): dividendo = dividendo - divisor resultado = resultado + 1 listo

Resolución del Ejercicio 1 ; R1 --> puntero al dividendo ; R2 --> puntero al divisor ; R3 --> cociente ; R4 --> dividendo ; R5 --> divisor inicio: MOV R3, 0x0000 ; R3 = 0 MOV R4, [R1] ; R4 = dividendo MOV R5, [R2] ; R5 = divisor CMP R5, 0x0000 ; divisor == 0? JE fin ciclo: CMP R4, R5 ; dividendo < divisor? JCS fin ; uso JCS en lugar de JL porque ; son enteros sin signo SUB R4, R5 ; R4 = R4-R5 ADD R3, 0x0001 ; R3 = R3+1 JMP ciclo fin:

Ejercicio 2 Enunciado: Estoy cansado de que me salgan las fotos oscuras con mi cámara digital. Hagan un programa que duplique el brillo de mis fotos para remediar mi angustia.

Ejercicio 2 Enunciado: Estoy cansado de que me salgan las fotos oscuras con mi cámara digital. Hagan un programa que duplique el brillo de mis fotos para remediar mi angustia. R1 contiene la dirección donde está la imagen como una matriz de enteros sin signo de 16 bits.

Ejercicio 2 Enunciado: Estoy cansado de que me salgan las fotos oscuras con mi cámara digital. Hagan un programa que duplique el brillo de mis fotos para remediar mi angustia. R1 contiene la dirección donde está la imagen como una matriz de enteros sin signo de 16 bits. La foto tiene 200x200 pixels.

Ejercicio 2 Enunciado: Estoy cansado de que me salgan las fotos oscuras con mi cámara digital. Hagan un programa que duplique el brillo de mis fotos para remediar mi angustia. R1 contiene la dirección donde está la imagen como una matriz de enteros sin signo de 16 bits. La foto tiene 200x200 pixels. La imagen debe ser modificada en el lugar.

Pra ctica 3: Programacio n en ASM Orga 1

Pseudocódigo del Ejercicio 2 Enunciado Duplicar el brillo La imagen tiene 200x200 píxeles. R1 contiene la dirección donde está la imagen como una matriz de enteros sin signo de 16 bits. La imagen debe ser modificada en el lugar.

Pseudocódigo del Ejercicio 2 Enunciado Duplicar el brillo La imagen tiene 200x200 píxeles. R1 contiene la dirección donde está la imagen como una matriz de enteros sin signo de 16 bits. La imagen debe ser modificada en el lugar. i = 0 while (i < 200*200): img[i] = 2 * img[i] i = i + 1 listo

Es correcto el pseudocódigo anterior?

Es correcto el pseudocódigo anterior? Qué pasa cuando duplico un pixel cuyo color ya es muy cercano al blanco más brillante?

Pseudocódigo del Ejercicio 2 (con saturación) i = 0 while (i < 200*200): tmp = 2 * img[i] if (tmp > 0xFFFF): tmp = 0xFFFF img[i] = tmp i = i + 1 listo // si hay carry

Resolución del Ejercicio 2 ; R1 --> puntero a la imagen ; R2 --> variable temporal para almacenar el pixel a procesar ; R3 --> contador de pixeles que voy procesando inicio: MOV R3, 0x0000 ; R3 = 0 ; Ciclo principal: Va a ir recorriendo uno a uno los pixeles de la ; imagen y les va a aplicar un mayor brillo duplicando su valor. ; Si se produce un overflow, satura con el color blanco (0xFFFF) ciclo: CMP R3, 0x9C40 ; R3 = cant pixeles(img)? JE fin MOV R2, [R1] ; R2 = img[r3] ADD R2, R2 ; R2 = 2*R2 ; Como estoy sumando enteros de 16 bits sin signo, tengo que ver que ; no se produzca overflow. Para eso, miro el bit de carry despues de ; realizada la suma JCS saturar cont: MOV [R1], R2 ; img[r3] = R2 ADD R1, 0x0001 ; R1 = img[r3+1] ADD R3, 0x0001 ; R3 = R3+1 JMP ciclo saturar: ; Si al duplicar el valor del pixel se obtiene un valor tan grande ; que no entra en un entero de 16 bits, saturo el valor del pixel ; con el color blanco (0xFFFF) MOV R2, 0xFFFF ; R2 = 0xFFFF JMP cont fin:

Lenguaje ensamblador Vimos: Intro a arquitectura Orga1 Set de instrucciones máquina Orga1 Implementación de soluciones usando lenguaje ensamblador

Lenguaje ensamblador La próxima: Directivas Proceso de ensamblado: codificación y carga en memoria del programa Proceso de ejecución

Preguntas?????

Fin Fin