ESTRUCTURA DE MICROPROCESADORES

Documentos relacionados
ENSAMBLADOR DE ARCHIVO TASM MASM NASM GAS. Características de un Ensamblador de Archivo

FUNDAMENTOS DE INFORMÁTICA

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Elementos de un programa en C

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

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

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

DIRECTIVAS DEL ASM86

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Manual de turbo pascal

Principios de Computadoras II

El nivel ISA (II)! Conjunto de Instrucciones

Conceptos de Arquitectura de Computadoras Curso 2015

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Tema 2 Introducción a la Programación en C.

Sobre cómo dividir un programa ensamblador x86 (modo Real) en módulos compilables por separado.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Arquitectura (Procesador familia 80 x 86 )

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL SAN NICOLÁS INGENIERIA EN ELECTRÓNICA

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

APUNTES DE LENGUAJE ENSAMBLADOR. Lenguaje ensamblador

Representación de datos y aritmética básica en sistemas digitales

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

El Diseño de un Lenguaje Máquina

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

Práctica Nº 4 Entorno de Programación

Estructuras de Datos Declaraciones Tipos de Datos

Curso de Programación Avanzada en C

TEMA 3: El proceso de compilación, del código fuente al código máquina

Alternativas de programación

Qué es un programa informático?

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Tema 5: La pila, las macros y los procedimientos

8.4. El software en los μprocesadores

Principios de Computadoras II

Fundamentos de programación JAVA

Técnicas de Programación

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

El lenguaje C. 1. Identificadores, constantes y variables

FUNCIONAMIENTO DEL ORDENADOR

INDICE Programa Entrada Unidad de control Unidad aritmética y lógica (ALU)

Construyendo Programas más Complejos

ESTRUCTURA Y TECNOLOGÍA A DE COMPUTADORES

APENDICE B Ensamblador IASM11/Simulador AVSIM11

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Estructura de Microprocesadores. Profesor Ing. Johan Carvajal Godínez

Tema 2. El lenguaje JAVA

Funciones como Subprogramas en C++

Programación. Test Autoevaluación Tema 3

Informática Ingeniería en Electrónica y Automática Industrial

Fundamentos de Programación Visual Basic

Ingeniería en Sistemas. Sistemas Operativos. Trabajo Práctico: Repaso de Interrupciones, direccionamiento de memoria y registros del procesador.

MÓDULO III PROGRAMACIÓN DEL MICROPROCESADOR

PHP: Lenguaje de programación

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

LENGUAJE. Tema 2 Elementos de un programa

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Ciclos de máquina. Otro ejemplo: decremento de un registro par (donde rp = HL, DE, BC, SP) DCX rp

Unidad I: Organización del Computador. Ing. Marglorie Colina

Ficha de Aprendizaje N 13

Lenguaje de programación C. Introducción

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

ESCUELA DE INFORMÁTICA

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Fundamentos de Programación 2017-I

Computación II. Introducción a Visual Basic

MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C

Programación en Visual Basic Ricardo Rodríguez García

Fundamentos de Informática 2. Conceptos Básicos. El ordenador. Contenidos. El ordenador. El ordenador. El ordenador. Tema 2.

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Unidad II: Análisis semántico

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

LENGUAJE ENSAMBLADOR PRÁCTICA 11 PRÁCTICA 11 CUATRO OPERACIONES FUNDAMENTALES EN NÚMEROS DE 8 BYTES

Tema: Clases y Objetos en C#. Parte II.

Relación de Problemas I

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

1. Computadores y programación

Definición de Memoria

Introducción al NASM. Convenciones de colores

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Todos los comandos de DEBUG se invocan usando una sola letra y son los siguientes:

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

Herramientas computacionales para la matemática MATLAB: Cómo guardar el trabajo?

TAREA 1 ARITMETICA PARA BCD Y ASCII.

P L A N I F I C A C I O N

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Lección 2 Introducción al lenguaje C

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

3 - Arquitectura interna de un up

Programación en java. Estructuras algorítmicas

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Generador de analizadores léxicos FLEX

Apuntadores en C y C++

Sistemas Operativos. IES Pedro Espinosa. Relación de ejercicios Tema 1: Conceptos básicos de informática

Programación estructurada (Introducción a lenguaje C)

Transcripción:

ESTRUCTURA DE MICROPROCESADORES Programación Básica con ensamblador Profesor Ing. Johan Carvajal Godínez

Agenda de la Clase 1. Introducción 2. Elementos básicos de lenguaje ASM 3. Instrucciones básica en Ensamblador 4. Ejemplo: Suma y restas de enteros 5. Proceso de ensamblado, enlazado y ejecución de un programa en ASM 6. Protocolo de definición de datos 7. Definición de constantes 8. Programación en modo real 9. Estructuras básicas de programación 2

Que es ensamblador? El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas en una computadora, y constituye la representación más directa del código máquina específico para cada arquitectura.

Como funcionan los ensambladores? Un ensamblador crea código objeto traduciendo instrucciones mnemónicas a códigos operativos e interpretando los nombres simbólicos para direcciones de memoria y otras entidades. El uso de referencias simbólicas es una característica básica de los ensambladores, evitando tediosos cálculos y direccionamiento manual después de cada modificación del programa. La mayoría de los ensambladores incluyen facilidades para crear macros, a fin de generar series de instrucciones cortas que se ejecutan en tiempo real, en lugar de utilizar subrutinas

Que es código objeto? Se llama código objeto en programación al código resultante de la compilación del código fuente. Consiste en lenguaje máquina o bytecode y se distribuye en varios archivos que corresponden a cada código fuente compilado. Para obtener un programa ejecutable se han de enlazar todos los archivos de código fuente con un programa llamado enlazador (linker).

Que es un programa ejecutable Un programa ejecutable es un archivo binario cuyo contenido se interpreta por el ordenador como un programa. Dependiendo del tipo de que se traten las instrucciones, hablaremos de ejecutables portables (se pueden ejecutar en varias plataformas) y no portables (destinado a una plataforma concreta). Por ejemplo, un ejecutable Java es portable ya que utiliza un bytecode no asociado a un procesador en concreto. Existen otro tipo de programas llamados scripts. No contienen código máquina sino el código fuente, que se interpreta a la vez que se ejecuta.

Fases en generación de un ejecutable TASM TLINK

Como se programa en ensamblador? Se analiza el problema Se identifican los subproblemas Se crean bloques de solución al sub-problema Se enlazan los bloques en un bloque principal Se llama el bloque principal

Estructura de un programa en ASSY X86 Un programa debe contener la definición de 4 bloques básicos Modelo Modelo de administración de la memoria Datos Variables Constantes Pila Tamaño de la pila Código Código fuente

Modelo de programación Define la extensión que va a tener el programa y la forma en que se va a disponer del código Se indica por directriz.model Los tipos de modelo a indicar son Tiny: solo un segmento para todos los datos y código, puede ser un.com Small: código y datos pueden compartir segmento físico. Todos los procedimientos y variables se direccionan como NEAR con solo apuntar al desplazamiento. Compact: por defecto todos los elementos de código se ubican en un segmento físico pero los datos pueden tener su propio segmento. Medium: Es el opuesto a compact Large: El código esta separado físicamente de los datos Flat: se usa en aplicaciones con memoria paginada. Win32

Segmentos Pila Se declara el tamaño por medio de la directriz.stack + tamaño en bytes Datos Se declara por medio de la directriz.data El formato para declarar una variable es Nombre-longitud-valor predeterminado FileName DB "C:\new.txt" Constantes Se declara en cualquier parte del programa Se hace por medio del nombre EQU valor LShfBit equ 2

Niveles de programación en ensamblador La programación en ASM se puede orientar en tres niveles de acuerdo a las capacidades y requerimientos del problema a resolver OS Function Level 2 ASM Program BIOS Function Level 1 Hardware Level 0

Elementos Básicos del lenguaje ASM Manejo de enteros Constantes Expresiones Manejo de caracteres y cadenas String Palabras Reservadas e identificadores Directrices e instrucciones Etiquetas Mnemónicos y operandos Comentarios 13

Constantes Enteras Pueden estar antecedidas por +/- Se pueden definir números en binario, decimal, hexadecimal u octal Caracteres de distinción de código: h hexadecimal d decimal b binario r Real codificado Ejemplos: 30d, 6Ah, 42, 1101b Usualmente en Hex se comienza: 0A5h 14

Operaciones con enteros Nivel de precedencia en operaciones con enteros: Ejemplos: 15

Manejo de caracteres y cadenas Los caracteres se pueden manejar con comillas simples o dobles 'A', "x" Tamaño de ASCII = 1 byte Las cadenas se pueden manejar con comillas simples o dobles "ABC" 'xyz' Cada carácter ocupa un byte 16

Palabras reservadas e identificadores Las palabras reservadas no pueden ser utilizadas como identificadores Mnemónicos, Operadores, Tipos de datos, etc Identificadores Caracteres incluyendo números No son sensibles a la mayúsculas La primera letra debe ser: _, @,?, ó $ 17

Directrices Son comandos que son reconocidos por el compilador pero que no son parte del set de instrucciones Ejemplo: Aquellos usados para declarar segmentos, modelos de memoria y algunas otras funciones Diferentes compiladores tienen diferentes directrices TASM son diferentes a MASM 18

Instrucciones Se crea una secuencia de código maquina por parte del ensamblador Es lo que utiliza el CPU durante el tiempo de ejecución del programa Se usa el ISA de IA32 Una instrucción se conforma por: Etiquetas (opcional) Mnemónico (requerido) Operando (según el mnemónico requerido) Comentario (opcional) Etiqueta: Mnemónico Operando Comentario 19

Las etiquetas Funcionan como marcadores dentro del CS como del DS Se debe definir una serie de reglas para su definición Etiquetas de datos Deben ser únicas Etiquetas de código Se utilizan usualmente para marcar direcciones de salto Ejemplo: ciclo1: 20

Mnemónicos y Operandos Mnemónicos de instrucciones Describen la función de la instrucción ejemplos: MOV, ADD, SUB, MUL, INC, DEC Operandos Constantes Expresiones con constantes Registros Direcciones de memoria Algunos programadores tratan las constantes como valores inmediatos 21

Los comentarios Un programa bien comentado es un programa! Explicar el propósito del código Cuando y quien escribió el programa Historial de revisión Explicar algún truco utilizado Comentarios específicos a la aplicación Comentarios de una línea Comienzan con punto y coma (;) Un bloque de comentarios Inicio: Se escribe la directriz COMMENT y un caracter elegido por el programador Termina: El caracter elegido por el programador 22

Algunos formatos de instrucción Sin operandos stc ; Pone en uno la bandera de carry Con un operando inc eax ; Incrementa EAX inc mybyte ; Incrementa valor Con dos operandos add ebx,ecx ; Registro, Registro sub mybyte,25 ; Memoria, Constante add eax,36 * 25 ; Registro, expresión 23

Ejemplo: Suma y restas de enteros TITLE Suma y resta (AddSub.asm) ; Este programa suma y resta números de 32 bits.model small.data.stack.code main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h call DumpRegs ; Despliega los registros exit main ENDP END main 24

Consejos para codificación (1 de 2) Consejos sobre uso de mayúsculas Todo en mayúsculas Nada en mayúsculas Mayúsculas solo para instrucciones, operandos, directrices Solo directrices y operandos Otras sugerencias Usar identificadores descriptivos Una línea de separación entre procedimientos 25

Consejos para codificación (1 de 2) Identación y espaciamiento Las etiquetas de datos y códigos sin identación Las instrucciones se identan con un TAB Los comentarios se comienzan a partir de las columna 40 Se dan 1 a 3 espacios entre mnemónico y operando ejemplo: mov ax,bx Se dejan una o dos líneas entre procedimientos o macros 26

Machote de programa TITLE NombrePrograma (Template.asm) ; Descripción del Programa: ; Autor: ; Fecha de creación: ; Revisión: ; Fecha: Modificado por:.model small.data ; (Declare las variables aquí).code main PROC ; (Código del procedimiento) exit main ENDP ; (Procedimientos adicionales) END main 27

Ensamblado, enlace y ejecución de ASM Ciclo de ensamblado, enlace y ejecución make32.bat Archivo de listado Archivos de mapa de memoria 28

Ciclo de ensamblado, enlace y ejecución El diagrama describe la secuencia de pasos requeridos para crear un programa en ASM Link Library Source File Step 2: assembler Object File Step 3: linker Executable File Step 4: OS loader Output Step 1: text editor Listing File Map File 29

Definición de datos en lenguaje ASM Tipos de datos intrínsicos directrices de definición de datos Definición de datos tipo BYTES y SBYTES Definición datos tipo de WORDS y SWORDS Definición de datos tipo DWORD y SDWORD Definición de datos tipo QWORD Definición de datos tipo TBYTE Definición de datos con números reales Little Endian Order Declaración de datos sin inicializar 30

Tipos de datos intrínsicos (1 / 2) BYTE, SBYTE Entero de 8 bits sin signo; Entero de 8 bits con signo WORD, SWORD Entero de 16 bits sin signo; Entero de 16 bits con signo DWORD, SDWORD Entero de 32 bits sin signo; Entero de 32 bits con signo QWORD Entero de 64 bits TBYTE Entero de 80 bits 31

Tipos de datos intrínsicos (2 / 2) REAL4 IEEE: Real corto de 4 bytes REAL8 IEEE: Real largo de 8 bytes REAL10 IEEE: Real extendido de 10 bytes 32

Procedimiento de definición de datos Se hace dentro del segmento de datos y permite declarar las variables a utilizar Se puede asignar nombre a las variables Sintaxis: [nombre] directiva de inicialización [,inicializador]... Ejemplo: prueba BYTE 10 El valor del inicializador se carga en la memoria 33

Definiendo Bytes Cada una de estas definiciones trabaja sobre bytes: PRUEBA1 BYTE 'A' PRUEBA2 BYTE 0 PRUEBA3 BYTE 255 PRUEBA4 SBYTE -128 PRUEBA5 SBYTE +127 PRUEBA6 BYTE? ; caracter inicializado ; Byte sin signo más bajo ; Byte sin signo más alto ; Byte con signo más bajo ; Byte con signo más alto ; Byte sin inicializar Algunos debugers muestran los valores con formato de signos y valor Ejemplo: -2 34

Arreglos de bytes Diferentes formas de declarar arreglos de bytes: LISTA1 BYTE 10,20,30,40 MATRIZ1 BYTE 10,20,30,40 BYTE 50,60,70,80 BYTE 81,82,83,84 LISTA2 BYTE?,32,41h,00100010b LISTA3 BYTE 0Ah,20h, A,22h 35

Definiendo cadenas (1/3) Una cadena String se implementa como un arreglo de caracteres: Se inicializa con una cadena encerrada por dobles comillas Se debe terminar con un caracter nulo o 0 Ejemplos: str1 BYTE Escriba una oración:",0 str2 BYTE 'Error: Programa terminado!!!',0 str3 BYTE 'A','E','I','O','U' saludo BYTE Bienvenido a PATIX" BYTE Version II",0 36

Definiendo cadenas (2/3) Para definir una cadena con múltiples líneas, cada línea se termina con una coma menu BYTE Menu Principal",0dh,0ah,0dh,0ah, "1. Crear una nueva cuenta",0dh,0ah, "2. Iniciar un nuevo usuario",0dh,0ah, "3. Abrir perfil",0dh,0ah, "4. Editar Perfil ",0dh,0ah, "5. Salir",0ah,0ah, Escoje una opción:> ",0 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. 37

Definiendo cadenas (3/3) Caracteres para terminación de cadena: 0Dh = Retorno de carro 0Ah = Nueva Línea str1 BYTE Escriba su Nombre: ",0Dh,0Ah, BYTE Escriba su direccion: ",0 NuevaLinea BYTE 0Dh,0Ah,0 Consejo: Defina todas las cadenas que requiera usar en el misma área del segmento de datos 38

Uso del operador DUP Se utiliza el operador DUP para reservar espacio en la memoria para una cadena Formato: Variable tipo contador DUP (inicialización) contador e inicialización deben se constantes o expresiones con constantes var1 BYTE 20 DUP(0) ; 20 bytes, todos en cero var2 BYTE 20 DUP(?) ; 20 bytes, sin inicializar var3 BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK" var4 BYTE 10,3 DUP(0),20 ; 5 bytes 39

Definición de datos tipo WORD y SWORD Reserva espacio en el segmento de datos para enteros de 16 bits con y sin signo word1 WORD 65535 word2 SWORD 32768 word3 WORD? word4 WORD "AB" mylist WORD 1,2,3,4,5 array WORD 5 DUP(?) ; Máximo valor sin signo ; Mínimo valor con signo ; variables sin inicializar ; Variable inicializada ; Arreglo de palabras ; Arreglo sin inicializar 40

Definición de datos tipo DWORD y SDWORD Reserva espacio en el segmento de datos para enteros de 32 bits con y sin signo val1 DWORD 12345678h val2 SDWORD 2147483648 val3 DWORD 20 DUP(?) val4 SDWORD 3, 2, 1,0,1 ; Doble palabra sin signo ; Doble palabra con signo ; arreglo sin signo ; Arreglo con signo 41

Definición de QWORD, TBYTE y REALES Reserva espacio en el segmento de datos para enteros de 64 bits, enteros de 80 bits y valores reales quad1 QWORD 1234567812345678h val1 TBYTE 1000000000123456789Ah rval1 REAL4-2.1 rval2 REAL8 3.2E-260 rval3 REAL10 4.6E+4096 ShortArray REAL4 20 DUP(0.0) 42

Little Endian Order Todos los datos con longitudes mayores a un byte se guardan en orden inverso en el segmento de datos Ejemplo: valor1 DWORD 12345678h 43

Declaración de datos sin inicializar Se puede declarar un segmento de datos sin inicializar por medio de la directriz.data? Dentro de un segmento de datos se puede declarar variable sin un valor predefinido por medio del inicializador? Arreglo DWORD 10 DUP(?) Ventaja: Reduce el tamaño del programa.exe generado 44

Constantes simbólicas Directriz de igual Cálculo del tamaño de arreglos y cadenas La directriz EQU La directriz TEXTEQU 45

La directriz de igual Nombre = Expresión Expresión es un entero de 32 bits que puede formarse con una expresión o una constante Puede ser redefinido Nombre es llamado una constante simbólica Buen método para administrar parámetros COUNT = 500.. mov al,count 46

Cálculo del tamaño de un arreglo de bytes Contador de posición actual: $ Se resta el inicio de lista La diferencia es el tamaño del arreglo list BYTE 10,20,30,40 ListSize = ($ - list) 47

Cálculo del tamaño de un arreglo de WORDS Como cada palabra toma dos bytes se divide el número de bytes por dos list WORD 1000h,2000h,3000h,4000h ListSize = ($ - list) / 2 48

La directriz EQU Puede definir constantes simbólicas como numéricas No puede ser redefinidas en tiempo de ejecución Se utilizan símbolos <> para definir su argumento PI EQU <3.1416> presskey EQU <"Press any key to continue...",0>.data prompt BYTE presskey 49

La directriz TEXTEQU Se utiliza para definir un símbolo como una constante ya sea numérica o línea de texto Son llamadas macros de texto Pueden ser redefinida durante tiempo de ejecución continuemsg TEXTEQU <"Do you wish to continue (Y/N)?"> rowsize = 5.data prompt1 BYTE continuemsg count TEXTEQU %(rowsize * 2) ; evaluates the expression setupal TEXTEQU <mov al,count>.code setupal ; se sustituye por "mov al,10" 50

Programación en modo real (1/2) Se trabaja en ambiente MS-DOS (16 bits) Ventajas Habilita el uso de llamadas DOS y BIOS No hay restricción de acceso a memoria Desventajas Se debe administrar tanto segmentos como desplazamientos No existen llamadas a sistema: SYSCALLS Está limitado a 640K de memoria de programa 51

Programación en modo real (1/2) Requirements Titulo del programa y definición del modelo de administración de la memoria.title.model Definición de los segmentos Pila Datos código Inicialización del segmento de datos: mov ax,@data mov ds,ax 52

Implementación de estructuras típicas

Implementación de estructuras típicas

Implementación de estructuras típicas

Implementación de estructuras típicas

Implementación de estructuras típicas

Tarea Instalar el Turbo Assembler 5.0 Encontrar el problema al programa que el profesor plantea en el TEC virtual, arreglarlo y documentarlo

Bibliografía Irvine, Kip; Assembly Language for Intel- Based Computers. 5th Edition. Pearson Education. 2007