ESTRUCTURA DE MICROPROCESADORES

ESTRUCTURA DE MICROPROCESADORES Programación Básica con ensamblador Profesor Ing. Johan Carvajal Godínez JCG-2009 Agenda de la Clase 1. 2. 3. 4. 5. 6. 7. 8. 9. Introducción Elementos básicos de lenguaje ASM Instrucciones básica en Ensamblador Ejemplo: Suma y restas de enteros Proceso de ensamblado, enlazado y ejecución de un programa en ASM Protocolo de definición de datos Definición de constantes Programación en modo real Estructuras básicas de programación 2 JCG-2009 Que es ensamblador? 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. JCG-2009 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 JCG-2009 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). JCG-2009 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. JCG-2009 Fases en generación de un ejecutable TASM TLINK JCG-2009 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 JCG-2009 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 JCG-2009 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 JCG-2009 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 JCG-2009 Niveles de

2 downloads 115 Views 1MB Size

Story Transcript

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

Agenda de la Clase 1. 2. 3. 4. 5. 6. 7. 8. 9.

Introducción Elementos básicos de lenguaje ASM Instrucciones básica en Ensamblador Ejemplo: Suma y restas de enteros Proceso de ensamblado, enlazado y ejecución de un programa en ASM Protocolo de definición de datos Definición de constantes Programación en modo real Estructuras básicas de programación 2 JCG-2009

Que es ensamblador? 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.

JCG-2009

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 JCG-2009

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). JCG-2009

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. JCG-2009

Fases en generación de un ejecutable

TASM

TLINK

JCG-2009

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 JCG-2009

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 JCG-2009

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

JCG-2009

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 JCG-2009

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

ASM Program

JCG-2009

OS Function

Level 2

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 JCG-2009

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 JCG-2009

Operaciones con enteros • Nivel de precedencia en operaciones con enteros:

• Ejemplos: 15 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 Mnemónico Operando Comentario

(opcional) (requerido) (según el mnemónico requerido) (opcional)

Etiqueta: Mnemónico

Operando

Comentario 19

JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

Algunos formatos de instrucción • Sin operandos – stc

; Pone en uno la bandera de carry

• Con un operando – inc eax – inc myByte

; Incrementa EAX ; Incrementa valor

• Con dos operandos – add ebx,ecx – sub myByte,25 – add eax,36 * 25

; Registro, Registro ; Memoria, Constante ; Registro, expresión 23 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

Ensamblado, enlace y ejecución ejecuci n de ASM • • • •

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

28 JCG-2009

Ciclo de ensamblado, enlace y ejecución ejecuci n

El diagrama describe la secuencia de pasos requeridos para crear un programa en ASM Link Library Source File

Step 1: text editor

Step 2: assembler

Object File

Step 3: linker

Listing File

Executable File

Step 4: OS loader

Output

Map File

29 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

Definiendo Bytes Cada una de estas definiciones trabaja sobre bytes: PRUEBA1 BYTE 'A'

; caracter inicializado

PRUEBA2 BYTE 0

; Byte sin signo más bajo

PRUEBA3 BYTE 255

; Byte sin signo más alto

PRUEBA4 SBYTE -128

; Byte con signo más bajo

PRUEBA5 SBYTE +127

; Byte con signo más alto

PRUEBA6 BYTE ?

; Byte sin inicializar

• Algunos debugers muestran los valores con formato de signos y valor • Ejemplo: -2

34 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 word2 word3 word4 myList array

WORD SWORD WORD WORD WORD WORD

65535 –32768 ? "AB" 1,2,3,4,5 5 DUP(?)

; ; ; ; ; ;

Máximo valor sin signo Mínimo valor con signo variables sin inicializar Variable inicializada Arreglo de palabras Arreglo sin inicializar

40 JCG-2009

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 val2 val3 val4

DWORD SDWORD DWORD SDWORD

12345678h –2147483648 20 DUP(?) –3,–2,–1,0,1

; ; ; ;

Doble palabra sin signo Doble palabra con signo arreglo sin signo Arreglo con signo

41 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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

45 JCG-2009

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 JCG-2009

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 JCG-2009

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 JCG-2009

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 pressKey EQU .data prompt BYTE pressKey

49 JCG-2009

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 rowSize = 5 .data prompt1 BYTE continueMsg count TEXTEQU %(rowSize * 2)

; evaluates the expression

setupAL TEXTEQU .code setupAL

; se sustituye por "mov al,10" 50 JCG-2009

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 JCG-2009

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 JCG-2009

Implementación de estructuras típicas

JCG-2009

Implementación de estructuras típicas

JCG-2009

Implementación de estructuras típicas

JCG-2009

Implementación de estructuras típicas

JCG-2009

Implementación de estructuras típicas

JCG-2009

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

JCG-2009

Bibliografía • Irvine, Kip; Assembly Language for IntelBased Computers. 5th Edition. Pearson Education. 2007

JCG-2009

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.