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