lenguaje ensamblador

44
LENGUAJE ENSAMBLADOR CONTINUACION

Upload: gbermeo

Post on 12-Jun-2015

63.757 views

Category:

Business


0 download

TRANSCRIPT

Page 1: Lenguaje Ensamblador

LENGUAJE ENSAMBLADOR

CONTINUACION

Page 2: Lenguaje Ensamblador

DWORD y SDWORD

• Valor1 DWORD 12345678h; sin signo

• Valor2 SDWORD -2147483648; con signo

• Valor3 DWORD 20 DUP(?)• Versiones viejas del ensamblador usan la

directiva DD para definir palabras dobles con y sin signo.Valor1 DD 12345678h; sin signo

valor2 DD -2147483648; con signo

• Lista DWORD 1, 2, 3, 4, 5; arreglo de palabras dobles

Page 3: Lenguaje Ensamblador

QWORD y TBYTE

• QWORD designa localidades para valores de 8 bytes (4 palabras).Valor1 QWORD 1234567812345678hUsted puede usar DQ por compatibilidad con ensambladores viejos.

• TBYTE designa localidades para valores de 10 bytes (enteros de 80 bits). Se puede usar DT por compatibilidad con ensambladores viejos.Valor1 TBYTE 1000000000123456789Ah

Page 4: Lenguaje Ensamblador

REAL4, REAL8 y REAL10• REAL4 define una variable real de 4 bytes.

• REAL8 define una variable real de 8 bytes.

• REAL10 define una variable real de 10 bytes.Ejemplosrvalor1 REAL4 -2.1rvalor2 REAL8 3.2E-260rvalor3 REAL10 4.6E+4096arreglo REAL4 20 DUP(0.0)

Page 5: Lenguaje Ensamblador

Ejemplo: Suma y Resta

• Esta secuencia de instrucciones suma y resta enteros de 32 bits.

MOV EAX, 10000H; EAX=10000HADD EAX, 40000H; EAX=50000HSUB EAX, 20000H; EAX=30000H

Page 6: Lenguaje Ensamblador

Ejemplo de Suma y Resta usando variables

• Esta secuencia de instrucciones suma y resta enteros sin signo de 32 bits y almacena el resultado en una variable.

Valor1 DWORD 10000hvalor2 DWORD 40000hvalor3 DWORD 20000hresultado DWORD ?

MOV EAX, valor1ADD EAX, valor2SUB EAX, valor3MOV resultado, EAX

Page 7: Lenguaje Ensamblador

Constantes Simbólicas

• Una constante simbólica se define asociando un identificador (un símbolo) con una expresión entera o con texto.

• A diferencia de una variable, la cual reserva memoria, una constante simbólica no usa memoria.

• Las constantes simbólicas se usan solamente durante el ensamblado del programa, ellas no cambian durante la ejecución del programa (runtime).

Page 8: Lenguaje Ensamblador

Directiva =

• La directiva = asocia el nombre de un símbolo con una expresión entera. La sintaxis es:

nombre = expresióncontador = 500mov ax, contador

lo que se genera y ensambla esmov ax, 500

Page 9: Lenguaje Ensamblador

Directiva =

• esc_key = 27mov al, esc_key

• Contador = 100arreglo DWORD contador DUP(0)

• El símbolo definido con = puede ser redefinido cualquier número de veces:CNT = 5mov al, CNT ; AL = 5CNT = 10 mov al, CNT ; AL = 10CNT = 100mov al, CNT ; AL = 100

Page 10: Lenguaje Ensamblador

Cálculo del tamaño de arreglos y cadena de caracteres

• lista BYTE 10, 20, 30, 40, 50tamaño_lista = ($ - lista)

MASM usa el operador $(contador de localidades) para devolver el desplazamiento asociado con la localidad actual.

• mi_cadena BYTE “Esta es una cadena” BYTE “larga que

contiene” BYTE “cualquier número de”

BYTE “caracteres”tamaño_cadena = ($ - mi_cadena)

Page 11: Lenguaje Ensamblador

Directiva EQU• La directiva EQU asocia el nombre de un símbolo con

una expresión entera o con texto. Hay tres formatos:nombre EQU expresión

nombre EQU símbolo nombre EQU <texto>

• En el primer formato, expresión debe ser una expresión entera válida.

• En el segundo formato, símbolo es el nombre de un símbolo previamente definido con = o EQU.

• En el tercer formato cualquier texto puede aparecer dentro de <……>.

• Cada vez que el ensamblador encuentra nombre sustituye el valor entero o el texto por el símbolo.

Page 12: Lenguaje Ensamblador

Ejemplos de EQU• EQU es muy útil para definir cualquier valor que

no evalúa a entero. Por ejemplo:PI EQU <3.1415926>

• matriz1 EQU 10*10matriz2 EQU <10*10>………………………M1 WORD matriz1M2 WORD matriz2El ensamblador genera:M1 WORD 100M2 WORD 10*10

• BBB EQU AA + 5BBB EQU AA + 10: ilegal

Page 13: Lenguaje Ensamblador

MAS DIRECTIVAS

• Directiva TITLE [línea de texto]: marca la línea entera como comentario, permite poner título al programa.

Ejemplo: TITLE Ordenar Números

• Directiva INCLUDE [nombre archivo]: permite usar y copiar definiciones necesarias e información de configuración desde un archivo de texto.

Page 14: Lenguaje Ensamblador

SEGMENT - ENDS

• El formato general para un segmento es:

nombre SEGMENT [align] [combine] [‘class’]

…………..

nombre ENDS

• Todos los operandos o atributos son opcionales.

• Estas dos directivas definen segmentos completos.

Page 15: Lenguaje Ensamblador

Atributos de la directiva SEGMENT

• El operando de la directiva SEGMENT puede tener tres tipos de atributos (opcionales):- Atributos de alineación: PARA, WORD, BYTE- Atributos de combinación: STACK, COMMON, PUBLIC, AT- Atributos de clase: ´CODE´, ´DATA´, ´STACK´ - estos atributos, entre apóstrofes, son usados para agrupar segmentos relacionados cuando ejecutamos el LIGADOR.

• Atributos de alineaciónPARA: el segmento inicia en una dirección divisible para 16 (10H)WORD: el segmento inicia en una dirección divisible para 2BYTE: el segmento inicia en cualquier direcciónNota: en caso de omisión el ensamblador asume PARA

• Atributos de combinaciónSTACK: el ensamblador y ligador automáticamente cargan SS y SP y el segmento forma parte la pila durante la corrida.COMMON: sobrelapa segmentos que tienen el mismo nombre.PUBLIC: concatena segmentos que tienen el mismo nombre.

• AT expresión: ubica el segmento en una dirección dada por expresión.

Page 16: Lenguaje Ensamblador

ORG y ASSUME

• La directiva ORG [address] le dice al ensamblador que inicie la generación de código a partir del desplazamiento de dirección indicado por [address]. Se ubica inmediatamente después de la directiva que define un segmento.

ORG 100H• La directiva ASSUME le dice al ensamblador los

nombres que han sido escogidos para los segmentos de datos, código, extra de datos y pila. Se ubica después de la directiva segment ‘code’.

Assume cs:code_sg, ds:data_sg, ss:stack_sg

Page 17: Lenguaje Ensamblador

PROC – ENDP y END

• Directivas PROC y ENDP: define procedimientos (subrutinas)nombre PROC FAR (o NEAR); procedimiento

. ….. ; dentro del

. ….. ; segmento

. ret ; de código

nombre ENDP

• Directiva END: especifica el FIN del programa fuente.

Page 18: Lenguaje Ensamblador
Page 19: Lenguaje Ensamblador

Detalles del Ensamblador

• Los segmentos lógicos contienen los tres componentes de un programa: CODE, DATA y STACK.

• El ensamblador organiza las tres partes de tal forma que ocupe segmentos físicos de memoria. CS, DS y SS contienen las direcciones de memoria donde residen los segmentos lógicos.

• Se puede definir segmentos de dos maneras:- Utilizando Modelos (segmentos simplificados) - Usando definiciones de segmento Completo.

Page 20: Lenguaje Ensamblador

Detalles del Ensamblador

• Las directivas de segmento simplificado esconde muchos detalles de la definición de segmento y asume las mismas normas de Microsoft usadas con los lenguajes de nivel alto.

• Las definiciones de segmento completo requieren de una sintaxis más compleja, pero en cambio provee un control completo sobre cómo el ensamblador genera los segmentos.

• Esto implica escribir directivas más complejas para manejar todas las tareas, que las directivas de segmento simplificado ejecutan automáticamente.

Page 21: Lenguaje Ensamblador

Directivas de Segmento Simplificado

• Las directivas de segmento simplificado son:- .MODEL- .CODE- .CONST- .DATA- .DATA?- .FARDATA-. FARDATA?- .STACK

Page 22: Lenguaje Ensamblador

Modelos de Memoria del Ensamblador• Cada modelo define la manera como un programa

se almacena en la memoria del sistema.

• Por ejemplo, el modelo “Tiny” se usa para crear archivos .COM en lugar de archivos .EXE

• Los archivos .COM son diferentes porque todos los datos y código calzan en un solo segmento y usan como origen la dirección 100H.

• Los archivos .COM se ejecutan más rápido que los archivos .EXE.

• Para la mayoría de las aplicaciones se usa los archivos .EXE y el modelo de memoria SMALL.

Page 23: Lenguaje Ensamblador

Modelos de Memoria del Ensamblador

• Tiny- se combina datos y código en el mismo segmento, debe ser menor que 64K. Este modelo permite crear archivos .COM el cual se origina en la localidad 100H.

• Small- contiene dos segmentos separados-Code <= 64K y Data <= 64K

• Medium- contiene un segmento de datos y cualquier número de segmentos de código.

• Compact- contiene un segmento de código y cualquier número de segmentos de datos.

• Large- Permite cualquier número de segmentos de datos y código.

• HugeIgual que Large, pero los segmentos de datos pueden tener más de 64K.

Page 24: Lenguaje Ensamblador
Page 25: Lenguaje Ensamblador

Ensamblado, Ligado y Ejecución de un Programa

ProgramaEditor

Programa Ensamblador

ProgramaLigador

Ejecutar ProgramaDepurar

Miarchivo.asm Miarchivo.obj

Miarchivo.exe

Page 26: Lenguaje Ensamblador

Ejemplo de un Programa Fuente• title Ejemplo de un Programa Fuente

datasg segment para ´data´datoA word 250datoB word 125datoC word ?datasg ends

codesg segment para ´code´principal proc far

assume cs: codesg, ds: datasgpush dsmov ax,0push axmov ax, datasgmov ds,ax;*************************************************mov ax, dataAadd ax, dataBmov datoC, axmov ax, 4c00hint 21hret

principal endpcodesg ends

end principal

Page 27: Lenguaje Ensamblador

Ejemplo• title Programa para mover datos en memoria

datasg segment para ´data´;Definición de constantes usadas en el programa

n=16tabla1=100htabla2=120h

datasg endscodesg segment para ´code´principal proc far

assume cs:codesg, ds: datasg;aquí instrucciones de inicialización

;Inicializar puntero fuente y puntero destinomov si, tabla1mov di, tabla2mov cx, n ; Inicializar contador

proxnum: mov ah, [si]mov [di], ahinc siinc didec cxjnz proxnum

aquí: jmp aquíret

principal endpcodesg ends

end principal

Page 28: Lenguaje Ensamblador

Proceso de Arranque (boot process)

• En el arranque se carga CS: IP con FFFFH: 0000H, punto de entrada a ROMBIOS.

• Luego BIOS establece dos áreas de datos: tabla de vectores de interrupción y datos de BIOS (hardware del sistema).

• BIOS verifica si esta presente el sistema de archivos del DOS para accesar el Cargador del DOS.

• El cargador del DOS lleva a memoria los archivos IO.SYS y MSDOS.SYS.

• IO.SYS contiene “drivers” y códigos específicos del harware; transfiere el control a MSDOS.

• MSDOS a su vez inicializa tablas internas y la tabla de interrupciones del DOS. Lee el archivo CONFIG.SYS y ejecuta sus comandos.

• Finalmente MSDOS pasa el control a COMMAND.COM el cual procesa el archivo AUTOEXEC.BAT y muestra el indicador C:\> que indica que esta listo para recibir comandos.

Page 29: Lenguaje Ensamblador

Responsabilidades del DOS

• Administrar el Sistema de Archivos• Entrada/ Salida de datos• Administrar memoria• Manejo de Interrupciones• Cargar programas para su ejecución

Page 30: Lenguaje Ensamblador

Carga de Programas para su Ejecución

• El cargador del DOS accesa MIARCHIVO.EXE en disco.• Construye en memoria un Segmento Prefijo del Programa

(PSP) de 256 bytes.• Almacena en memoria MIARCHIVO.EXE inmediatamente

después de PSP.• Carga la dirección del Segmento Prefijo del Programa en DS y

ES.• Carga CS: IP con la dirección de la primera instrucción de

MIARCHIVO.EXE.• Carga el puntero SS: SP definiendo así el tamaño de la Pila.• Transfiere el control a MIARCHIVO.EXE para su ejecución

comenzando con la primera instrucción en el Segmento de Código.

• Nota: Contenido de PSP página 440 en: IBM PC Assembly Language and Programming por Peter Abel, Tercera Edición.

Page 31: Lenguaje Ensamblador

Interface DOS-BIOS

PROGRAMAS DE APLICACION

COMMAND.COM

MSDOS KERNEL

BIOS ROM + IO.SYS

“HARWARE”

Page 32: Lenguaje Ensamblador

EL ROM-BIOS

• El ROM-BIOS (Basic Input Output System) es parte del sistema de control en ROM de una IBM PC o compatible, provee los servicios de entrada y salida básicos para la operación de un computador. BIOS es una colección de procedimientos o subrutinas que implementan funciones específicas tales como: leer caracteres desde el teclado, escribir caracteres en pantalla, leer información desde un disco, etc.. Los servicios de BIOS más importantes son:

• Servicios para periféricos.Interrupción Uso10H Despliegue de datos en pantalla13H Control de diskettes14H Control puertos seriales15H Sevicios para Caseteras16H Servicios Estándares de Teclado17H Servicios para Control de impresora

Page 33: Lenguaje Ensamblador

EL ROM-BIOS

• Servicios del estado de dispositivosInterrupción Uso11H Determinación de Equipos12H Determinación de Memoria

• Servicio Hora / FechaInterrupción Uso1AH Servicio de Hora y Fecha

• Servicio de Impresión de pantallaInterrupción Uso05H Imprimir Pantalla

• Servicios EspecialesInterrupción Uso18H Activa ROM Basic19H Activa Subrutina “bootstrap start-up”

Page 34: Lenguaje Ensamblador

Funciones del INT 10H• Función 00H: Selecciona Modo de Video

AH = 00HAL = # de modo

Ejemplo: AL = 03H pantalla color tipo texto 25 filas X 80 columnas• Función 01H: Fija tamaño de Cursor.

AH = 01HCH = (bits 4-0) = línea inicial (0)CL = (bits 4-0) = línea final (13 monocromático, 7

para color)• Función 02H: Posición del Cursor

AH = 02HBH = # página (normalmente 0)DH = # de filaDL = # de columna

• Función 06H: Buscar con avance de páginaAH = 06HAL = # filas para buscar(0 borra ventana)BH = atributo de caracteresCH = fila superior para buscarCL = Columna izquierda para buscarDH = última fila para buscarDL = columna derecha para buscar

Salida: desplaza la pantalla de abajohacia arriba. Las líneas en blanco llenan

la parte inferior utilizando el atributode carácter cargado en BH. El atributo71H significa fondo blanco frente azul.

Page 35: Lenguaje Ensamblador

Pantalla Modo Texto

• El modo texto se usa para el despliegue normal de los caracteres ASCII en la pantalla. Provee el acceso al conjunto completo de 256 caracteres ASCII.

• El Byte Atributo en modo texto determina las características de cada caracter en pantalla.

• Cuando un programa fija un atributo, permanece fijo; es decir, todos los demás caracteres enviados a pantalla poseen el mismo atributo hasta que otra operación lo cambie.

Page 36: Lenguaje Ensamblador

Byte Atributo• El byte atributo tiene el siguiente formato:

7

BL

6

R

5

G

4

B

3

I

2

R

1

G

0

B

BACKGROUND FOREGROUNDFIJA

ALTA

INTENSIDAD

Page 37: Lenguaje Ensamblador

Despliegue de Colores

Page 38: Lenguaje Ensamblador

Ejemplos de Atributos Típicos

Page 39: Lenguaje Ensamblador

Funciones del INT 10H (cont.)

• Función 09H: despliegue de atributo o carácter en la posición del cursor.

AH = 09HAL = código ASCIIBH = # de páginaBL = atributo del CarácterCX = # de veces que la función exhibe el carácter en

pantalla• Función 0A: despliegue de un carácter en la posición actual del

cursor.AH = 0AHAL = código ASCIIBH = # de páginaCX = # de caracteres repetidos

Nota: esta función no avanza el cursor

Page 40: Lenguaje Ensamblador

BIOS: Función 07H de INT 10H

• AH=07H

• AL= con 0 borra ventana

• BH= atributo de caracteres

• CH= primera fila superior de ventana

• CL= columna izquierda superior

• DH= última fila de ventana

• DL= columna derecha inferior

Page 41: Lenguaje Ensamblador

Subrutinas del DOS• Cuando usted arranca una PC se ejecuta automáticamente varias

tareas. Una es cargar el sistema operativo del disco duro a la memoria RAM. MS-DOS carga tres archivos en RAM: IBMBIO.COM, IBMDOS.COM y COMMAND.COM.

• El archivo IBMDOS contiene las subrutinas de servicio del DOS. Hay diez interrupciones del DOS que son:

• Interrupción Uso

20H Termina un Programa21H Funciones del DOS22H Dirección Terminal.”ojo” no usar en sus progrmas23H Dirección de ruptura (brake address)24H Manejador de error crítico25H Lee direcciones absolutas de Disco26H Escribe en direcciones absolutas de disco27H Termina y permanece Residente (TSR)2FH Interrupción Multiplex. Involucra comunicación entre Programas33H Manejador de Ratón

Page 42: Lenguaje Ensamblador

Funciones del INT 21H• A través de la interrupción INT 21H se pueden llamar 115

funciones. Las funciones más importantes son:• Función 01H: Leer teclado con eco

Espera por una entrada desde teclado. La función retorna uno de los dos códigos:

AL = ASCII de la tecla pulsadaAL = 00 significa que el usuario pulsó una de las

teclas de funciones extendidas- home, page up……la función responde a CTRL + BREAK.

• Función 02H: Exhibir un carácter en pantalla. El carácter ASCII ha exhibirse se carga en DL.

• Función 06H: Lectura directa de teclado y despliegue de datos en pantalla- Entrada de datos, cargar 0FFH en DL. Si no hay caracteres en el buffer del teclado se enciende ZF y no espera por una entrada. Si hay caracteres esperado en el buffer entonces DL se carga con el código ASCII del carácter y despeja ZF. La función no rebota el carácter en pantalla ni responde a CTRL + BREAK.- Despliegue de datos en pantalla, cargar el código ASCII en DL.

Page 43: Lenguaje Ensamblador

Funciones del INT 21H

• Función 07H: Lectura directa de teclado sin eco.Opera de manera similar que la función 06H con DL = 0FFH, pero no retorna de la función hasta que se presione una tecla. Retorna en AL el código ASCII.

• Función 08H: Lee entrada estandar sin eco. Similar a la función 07H, excepto que lee el dispositivo de entrada estandar. Puede asignarse como dispositivo estandar el teclado o el puerto COM. Responde a CTRL + BREAK mientras que 06H y 07H no. Retorna con código ASCII en AL.

• Función 09H: Exhibe una cadena de caracteres. La cadena de caracteres debe terminar con un ASCII $ (24H). La cadena puede ser de cualquier longitud y puede contener caracteres de control tales como LF (0AH) y CR (0DH).mensaje db ´Buenos Días´,´$´ ;…..ómensaje db ´Buenos Días$´DS:DX = dirección de cadena de caracteres

Page 44: Lenguaje Ensamblador

Funciones del INT 21H• Función 0AH: Lee teclado con Buffer. Esta función requiere de una lista

de parámetros. Necesita saber la longitud máxima del dato que entra, para alertar al usuario con un beep en el parlante cuando ingresen demasiados caracteres. Llena también uno de los campos con el número de caracteres ingresados. Veamos un ejemplo.

LISTA_PARA LABEL BYTELONG_MAX DB 20LONG_ACT DB ?BUFFER_TECL DB 20 DUP(?)

La dirección del buffer de datos se carga en DS:DX: lea dx, lista_para.• Si tipiamos el nombre MANUEL la lista de parámetro es:

20 M A N U E L CR …

14 06 4D 41 4E 55 45 4C 0D 20 20 …..