Sunteți pe pagina 1din 50

ARQUITECTURA DEL COMPUTADOR

LENGUAJE ENSAMBLADOR

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

CONSTANTES

Constantes Enteras

Ejemplos: 10, 42d, 10001101b, 0FF3Ah, 777o


Base: b = binario, d = decimal, h = hexadecimal, y o = octal Si no se indica la base, la constante se toma como representada en el sistema decimal Cuando un numero en hexadecimal comienza con una letra, se debe colocar un 0 al inicio: A03h 0A03h

Constantes Carcter y Cadenas de Caracteres

Delimitar carcter o cadena con comillas sencillas o dobles

Ejemplos: 'A', "d", 'ABC', "ABC", '4096

Comillas internas: Comilla simple ' interna", Comillas dobles interna Cada carcter ASCII ocupa un slo byte

SENTENCIAS
Tres tipos de sentencias en lenguaje ensamblador
Tpicamente, una sentencia debe aparecer en una lnea

Instrucciones Ejecutables

Generan cdigo de maquina a ejecutar por el procesador Indican al procesador que hacer Ejecutan una accin

Directivas al Ensamblador

Proveen informacin al ensamblador mientras traduce el programa Usadas para definir datos, seleccionar el modelo de memoria, etc. No se ejecutan: las directivas no son parte de las instrucciones Abreviacin para un grupo de sentencias Secuencia de instrucciones, directivas o de otros macros

Macros

INSTRUCCIONES

Las instrucciones en lenguaje ensamblador tienen el formato:


[etiqueta:] mnemnico [operandos] [;comentarios]

Etiqueta de la instruccin (opcional)

Marca la direccin de una instruccin, debe terminar en dos puntos : Usada para indicar un sitio del programa a donde puede bifurcar (saltar) el control del programa

Mnemnico

Palabra clave que Identifica la operacin (MOV, ADD, SUB, JMP, CALL, )

Operandos

Especifican los datos requeridos por la operacin Las instrucciones ejecutables pueden tener de cero a tres operandos Pueden ser registros, variables de memoria o constantes

EJEMPLOS DE INSTRUCCIONES

Sin operandos stc ; set carry flag Un operando inc eax ; incrementar registro eax call Clrscr ; llamar procedimiento Clrscr jmp L1 ; saltar a instruccin con etiqueta L1

Dos operandos add ebx, ecx ; registro ebx = ebx + ecx sub var1, 25 ; variable de memoria var1 = var1 25 Tres operandos imul eax,ebx,5 ; registro eax = ebx * 5

Comentarios

Comentarios son muy importantes!


Explican el propsito del programa Cuando fue escrito, revisado y por quien Explican los datos usados en el programa Explican las secuencias de instrucciones y los algoritmos utilizados Dan explicaciones especficas a la aplicacin

Comentarios de una lnea


Comienzan con un punto y coma ; y terminan al final de la lnea El carcter para identificar el comentario, puede variar para diferentes compiladores, algunos caracteres usuales son: (; # %). Se debe revisar las especificaciones del compilador usado.

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Plantilla para Programa de Memoria Plana

Compilador MASM

En esta plantilla, se incluye una librera (Irvine32.inc) que no pertenece al estndar del lenguaje, pero que nos es til para realizar los procesos de entrada y salida (I/O) de la informacin.

DIRECTIVAS TITLE y .MODEL

TITLE (opcional)

Contiene el ttulo del programa y el nombre del archivo

.MODEL

Especifica la configuracin de memoria Usaremos el modelo de memoria FLAT

Espacio de direcciones lineal de 32-bit (sin segmentacin)

STDCALL le indica al ensamblador que utilice convenciones estndares para nombres y llamadas a procedimientos

Directiva procesador .686


Utilizada antes de la directiva .MODEL Programa puede usar instrucciones de la arquitectura Pentium P6 Con el modelo FLAT por lo menos se debera usar la directiva .386

Directivas .STACK, .DATA, & .CODE

Directiva .STACK

Define una pila de ejecucin para el programa Se puede especificar el tamao de la pila (opcional) La pila de ejecucin es requerida para las llamadas a procedimientos

Directiva .DATA

Define un rea de memoria para los datos del programa Las variables del programa se deben definir bajo esta directiva El ensamblador asignar e inicializar el almacenamiento de variables

Directiva .CODE

Define la seccin de cdigo del programa conteniendo instrucciones El ensamblador colocar las instrucciones en el rea de cdigo de la memoria

INCLUDE, PROC, ENDP, y END

INCLUDE

Le indica al ensamblador que incluya cdigo de otro archivo Incluiremos Irvine32.inc provedo por el autor Kip Irvine

Declara procedimientos implementados en la librera Irvine32.lib Para usar Irvine32.lib, hay que enlazarla a nuestro programa

PROC y ENDP

Usadas para definir procedimientos Por convencin, definiremos main como el primer procedimiento Ms procedimientos se pueden definir despus de main

Directiva END

Marca el final de un programa Identifica el nombre (main) del procedimiento de arranque del programa

Plantilla para Programa Exe

Generada automticamente por EMU8086. Muestra el mensaje press any key... en pantalla y espera a que se pulse una tecla.

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Suma y Resta de Enteros

Ejemplos de Salido por Consola

El procedimiento DumpRegs esta definido en la librera Irvine32.lib


Produce la siguiente salida por consola, mostrando registros y banderas:

EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4 EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0

Estndares de Codificacin Sugeridos

Algunos enfoques del uso de maysculas


No usar maysculas Colocar todo en maysculas Colocar en maysculas las palabras reservadas, mnemnicos y nombres de registros Colocar en maysculas solo las directivas y los operandos MASM no diferencia entre minsculas o maysculas Usar nombres que tengan sentido para los identificadores Usar lneas en blanco entre los procedimientos Usar sangra y espaciado para alinear instrucciones y comentarios

Otras sugerencias

Usar sangra para las instrucciones, pero no para las etiquetas Alinear los comentarios que aparecen al despus de las instrucciones

Entendiendo la Finalizacin del Programa

El exit al final del procedimiento main es un macro

Definido en Irvine32.inc Expandido a una llamada a ExitProcess que termina el programa La funcin ExitProcess esta definida en la librera kernel32 Podemos reemplazar exit con lo siguiente:

push 0 ; coloca parmetro 0 en la pila call ExitProcess ; para terminar el programa

Tambin puede reemplazar exit con: INVOKE ExitProcess, 0 Declara un procedimiento usado en un programa y definido en otra parte

Directiva PROTO (Prototipos)

ExitProcess PROTO, ExitCode:DWORD

Especfica los parmetros y el tipo de un procedimiento

Programa Modificado

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Ciclo Ensamblar-Enlazar-Corregir

Editor

Escribir nuevos programas (.asm) Hacer cambios a los ya existentes

Ensamblador: programa ML.exe


Traduce archivos (.asm) a archivos objeto (.obj) en lenguaje de mquina Puede producir un archivo listado (.lst) que muestra el trabajo del ensamblador

Enlazador: programa LINK32.exe


Combina archivos objeto (.obj) con archivos de la librera de enlace (.lib) Produce archivos ejecutables (.exe) Puede producir archivos (.map) opcionalmente

Archivo Listado

Usado para ver como se ensamblo el programa Contiene


Cdigo fuente Cdigo objeto Direcciones relativas Nombres de Segmentos Smbolos


Variables Procedimientos Constantes

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Tipos de Datos Intrnsecos

BYTE, SBYTE

REAL4

Entero sin signo 8-bit Entero con signo 8-bit Entero sin signo 16-bit Entero con signo 16-bit Entero sin signo 32-bit Entero con signo 32-bit Entero 64-bit Entero 80-bit

WORD, SWORD

Punto flotante precisin sencilla IEEE Ocupa 4 bytes Punto flotante precisin doble IEEE Ocupa 8 bytes Punto flotante precisin extendida IEEE Ocupa 10 bytes

REAL8

DWORD, SDWORD

REAL10

QWORD, TBYTE

Sentencias de Definicin de Datos


Reservan espacio en memoria para una variable Pueden opcionalmente asignar un nombre (etiqueta) a los datos Sintaxis:

[name] directive initializer [, initializer]... val1 BYTE 10

Todos los inicializadores se convierten a datos binarios en la memoria

Definiendo Datos BYTE y SBYTE

En cada una de las siguientes instrucciones, se define un slo byte de almacenamiento:

value1 BYTE 'A' ; constante carcter value2 BYTE 0 ; byte mnimo valor sin signo value3 BYTE 255 ; byte mximo valor sin signo value4 SBYTE -128 ; byte mnimo valor con signo value5 SBYTE +127 ; byte mximo valor con signo value6 BYTE ? ; byte no inicializado

MASM no impide la inicializacin de un BYTE con un valor negativo, pero se considera un estilo pobre Si se declara una variable SBYTE, el Microsoft debugger automticamente despliega su valor en decimal con signo

Definir Arreglos de Bytes

Ejemplo que usan mltiples inicializadores


list1 BYTE 10,20,30,40 list2 BYTE 10,20,30,40 BYTE 50,60,70,80 BYTE 81,82,83,84 list3 BYTE ?,32,41h,00100010b list4 BYTE 0Ah,20h,'A',22h

Definir Cadenas de Caracteres

Una cadena se implementa como un arreglos de caracteres


Por conveniencia, se encierra entre comillas Usualmente se termina con un carcter NULL (byte valor= 0)

Ejemplos:

str1 BYTE "Enter your name", 0 str2 BYTE 'Error: halting program', 0 str3 BYTE 'A','E','I','O','U' greeting BYTE "Welcome to the Encryption " BYTE "Demo Program", 0

Definir Cadenas de Caracteres

Para continuar una cadena a travs de varias lneas, finalice cada lnea con una coma

menu BYTE "Cuenta Corriente",0dh,0ah,0dh,0ah, "1. Crear una nueva cuenta",0dh,0ah, "2. Abrir una cuenta existente",0dh,0ah, "3. Acreditar la cuenta",0dh,0ah, "4. Debitar la cuenta",0dh,0ah, "5. Salir",0ah,0ah, "Seleccin> ",0

Secuencia de caracteres para fin de lnea: 0Dh = 13 = carriage return 0Ah = 10 = line feed

Es recomendable Definir todas las cadenas de su programa en la misma rea del segmento de datos

Usando el Operador DUP


Usar DUP para asignar espacio a un arreglo o una cadena

Ventajas: ms compacto que usar una lista de inicializadores contador DUP ( argumento ) Contador y argumento deben ser expresiones constantes

Sintaxis:

El operador DUP puede estar anidado

var1 BYTE 20 DUP(0) ; 20 bytes, todos igual a cero var2 BYTE 20 DUP(?) ; 20 bytes, todos sin inicializar var3 BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK" var4 BYTE 10,3 DUP(0),20 ; 5 bytes: 10, 0, 0, 0, 20 var5 BYTE 2 DUP(5 DUP('*'), 5 DUP('!')) ; '*****!!!!!*****!!!!!'

Definir Datos de 16-bit y 32-bit

Definir almacenamiento para enteros de 16-bit y 32bit


Con signo y sin signo Uno o varios valores iniciales

word1 WORD 65535 ; mximo valor de 16-bit sin signo word2 SWORD 32768 ; mnimo valor de 16-bit con signo word3 WORD "AB" ; dos caracteres caben en una WORD array1 WORD 1,2,3,4,5 ; arreglo de 5 palabras sin signo array2 SWORD 5 DUP(?) ; arreglo de 5 palabras con signo dword1 DWORD 0ffffffffh ; mximo valor de 32-bit sin signo dword2 SDWORD 2147483648 ; mnimo valor de 32-bit con signo array3 DWORD 20 DUP(?) ; 20 doble palabras sin signo array4 SDWORD 3,2,1,0,1 ; 5 doble palabras con signo

Datos QWORD, TBYTE, y REAL

QWORD y TBYTE

Definen almacenamiento para enteros de 64-bit y 80-bit Con signo y sin signo

REAL4, REAL8, y REAL10

Definen almacenamiento para datos punto flotante de 32-bit, 64-bit, y 80-bit

quad1 QWORD 1234567812345678h val1 TBYTE 1000000000123456789Ah rVal1 REAL4 -2.1 rVal2 REAL8 3.2E-260 rVal3 REAL10 4.6E+4096 array REAL4 20 DUP(0.0)

Tabla de Smbolos

El ensamblador crea una tabla de smbolos


As podemos referirnos al espacio asignado de almacenamiento por nombre Ensamblador mantiene su nombre y su desplazamiento Desplazamiento de una variables es relativo a la direccin de la primera variable

Ejemplo

DATA value WORD 0 sum DWORD 0 marks WORD 10 DUP (?) msg BYTE 'The grade is:',0 char1 BYTE ?

Tabla de Smbolos
Nombre
value sum marks msg char1

Desplazamiento
0 2 6 26 40

Ordenamiento de los Byte


Los procesadores pueden ordenar los bytes dentro de una palabra de dos formas Ordenamiento de Bytes Little Endian

Direccin de memoria = Direccin del byte menos significativo Ejemplo: Intel 80x86

Ordenamiento de Bytes Big Endian


Direccin de memoria = Direccin del byte menos significativo Ejemplos: MIPS, Motorola 68k, SPARC

Agregar Variables a AddSub

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Definir Constantes Simblicas

Constantes Simblicas

No mas que un nombre usado en un programa en lenguaje ensamblador Procesado por el ensamblador pura substitucin de texto Ensamblador no asigna memoria a las constantes simblicas Directiva = Directiva EQU Directiva TEXTEQU Mejora la legibilidad del programa Ayuda en el mantenimiento del software: cambios se hacen en un solo lugar

El ensamblador provee tres directivas:


Definir constantes tiene dos ventajas:


Directiva Signo Igual (=)

Nombre = Expresin

Nombre es llamado una constante simblica Expresin es una expresin constante entera

El usar smbolos es un buen estilo de programacin


; NO es una variable (NO hay asignacin de ; memoria)
; mov eax, 500

COUNT = 500
... mov eax, COUNT ... COUNT = 600 ... mov ebx, COUNT

; Procesado por el ensamblador


; mov ebx, 600

Nombre se puede redefinir en el programa

Directiva EQU

Tres Formatos:

Nombre EQU Expresin Expresin constante entera Nombre EQU Smbolo Nombre de smbolo existente Nombre EQU <texto> Cualquier texto que aparezca entre < >

SIZE PI PressKey .DATA prompt

EQU 10*10 ; Integer constant expression EQU <3.1416> ; Real symbolic constant EQU <"Press any key to continue...",0> BYTE PressKey

Nombres no se pueden redefinir con EQU

Directiva TEXTEQU

TEXTEQU crea un macro de texto. Tres Formatos:


Nombre TEXTEQU <text> asigna cualquier texto al nombre Nombre TEXTEQU textmacro asigna un macro de texto existente Nombre TEXTEQU %constExpr expresin constante entera

Nombre pueden ser redefinidos en cualquier momento (diferente a EQU)


ROWSIZE COUNT MOVAL ContMsg .DATA prompt .CODE MOVAL = 5 TEXTEQU %(ROWSIZE * 2) ; evala a 10 TEXTEQU <mov al,COUNT> TEXTEQU <"Desea continuar? (S/N)?">
BYTE ContMsg ; genera: mov al,10

AGENDA

Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos

Operador OFFSET

OFFSET = direccin de una variable dentro de su segmento


En memoria FLAT, un espacio de memoria es utilizado para cdigo y datos OFFSET = direccin lineal de una variable (nmero de 32-bit) BYTE ? WORD ? DWORD ? DWORD ? ; Assume bVal is at 00404000h

.DATA bVal wVal dVal dVal2

.CODE mov esi, OFFSET bVal mov esi, OFFSET wVal mov esi, OFFSET dVal mov esi, OFFSET dVal2

; ESI = 00404000h ; ESI = 00404001h ; ESI = 00404003h ; ESI = 00404007h

Directiva ALIGN

Directiva ALIGN alinea una variable en memoria Sintaxis: ALIGN lmite

Donde lmite puede ser 1, 2, 4, o 16

Direccin de una variable debe ser un mltiplo de bound Ensamblador insertas bytes vacos para asegurar la alineacin
? ; Assume that ; Address of b1 = 00404000h ; Skip one byte ; Address of w1 = 00404002h ; Address of w2 = 00404004h ; Skip two bytes ; Address of d1 = 00404008h ; Address of d2 = 0040400Ch

.DATA b1 BYTE ALIGN 2 w1 WORD w2 WORD ALIGN 4 d1 DWORD d2 DWORD

? ?
? ?

Operador TYPE

Operador TYPE

Tamao, en bytes, de un elemento de una declaracin de datos


.DATA var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ? .CODE mov eax, TYPE var1 mov eax, TYPE var2 mov eax, TYPE var3 mov eax, TYPE var4

; eax = 1 ; eax = 2 ; eax = 4 ; eax = 8

Operador LENGTHOF

Operador LENGTHOF

Cuenta el nmero de elementos de una declaracin de datos


.DATA array1 WORD 30 DUP(?),0,0 array2 WORD 5 DUP(3 DUP(?)) array3 DWORD 1,2,3,4 digitStr BYTE "12345678",0 .code mov ecx, LENGTHOF array1 ; ecx = 32 mov ecx, LENGTHOF array2 ; ecx = 15 mov ecx, LENGTHOF array3 ; ecx = 4 mov ecx, LENGTHOF digitStr ; ecx = 9

Operador SIZEOF

Operador SIZEOF

Cuenta el nmero de bytes en una declaracin de datos Equivalente a multiplicar LENGTHOF por TYPE .DATA array1 WORD 30 DUP(?),0,0 array2 WORD 5 DUP(3 DUP(?)) array3 DWORD 1,2,3,4 digitStr BYTE "12345678",0 .code mov ecx, LENGTHOF array1 ; ecx = 64 mov ecx, LENGTHOF array2 ; ecx = 30 mov ecx, LENGTHOF array3 ; ecx = 16 mov ecx, LENGTHOF digitStr ; ecx = 9

Declaraciones de Mltiples Lneas

Una declaracin de datos abarca mltiples lneas si cada lnea (excepto la ltima) finaliza con una coma Los operadores LENGTHOF y SIZEOF incluyen todas las lneas que pertenecen a la declaracin

En el siguiente ejemplo, array identifica solo la primera lnea de la declaracin WORD Compare los valores retornados por LENGTHOF y SIZEOF aqu con los de la izquierda

.DATA array WORD 10,20, 30,40, 50,60 .CODE mov eax, LENGTHOF array mov ebx, SIZEOF array

;6 ; 12

.DATA array WORD 10,20 WORD 30,40 WORD 50,60 .CODE mov eax, LENGTHOF array mov ebx, SIZEOF array

;2 ;4

Operador PTR

PTR Provee la flexibilidad de acceder a parte de una variable Puede ser usado para combinar elementos de un tipo ms pequeo Sintaxis: Type PTR (cambia el tipo por defecto de la variable)

.DATA dval DWORD 12345678h array BYTE 00h,10h,20h,30h .CODE mov al, dval mov al, BYTE PTR dval mov ax, dval mov ax, WORD PTR dval mov eax, array mov eax, DWORD PTR array

; error porqu? ; al = 78h ; error porqu? ; ax = 5678h ; error porqu? ; eax = 30201000h

LABEL Directive

Asigna un nombre y tipo alternativo a una ubicacin de memoria LABEL no asigna espacio por ella misma Elimina la necesidad del operador PTR Formato: Nombre LABEL Tipo .DATA dval LABEL DWORD wval LABEL WORD blist BYTE 00h,10h,00h,20h .CODE mov eax, dval ; eax = 20001000h mov cx, wval ; cx = 1000h mov dl, blist ; dl = 00h

Resumen

Instruccin ejecutada en tiempo de corrida Directiva interpretada por el ensamblador STACK, .DATA, y .CODE

Definen las secciones de cdigo, datos y pila de un programa

Ciclo Editar-Ensamblar-Enlazar-Corregir Definicin de Datos


BYTE, WORD, DWORD, QWORD, etc. Operador DUP Directivas =, EQU, y TEXTEQU OFFSET, ALIGN, TYPE, LENGTHOF, SIZEOF, PTR, y LABEL

Constantes Simblicas

Operadores Relacionados a Datos

S-ar putea să vă placă și