estructura de microprocesadores microprocesadores

Anuncio
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 <3.1416>
pressKey EQU <"Press any key to continue...",0>
.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 <"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
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
Descargar