You are on page 1of 23

Estructura del Lenguaje Ensamblador

Importancia del lenguaje ensamblador Permite la comunicacin entre Sw y Hw Difcil al programar. Son dependientes de la maquina. Conocer caractersticas especificas de la maquina en que se est trabajando. Difcil de entender el programa.

Manejo de memoria Las instrucciones de ensamblador estn direccionadas a procesadores: Pentium IV: 686, 586, 486. Arquitectura Intel: 386, 286, 5i, 7i.

Los procesadores trabajan en modo protegido, modo real y modo virtual. Modo protegido: donde el procesador est programado y trabaja a 16 bits. Modo real: se puede alterar o disminuir rendimientos en nuestros procesadores, trabaja a 32 bits. Modo virtual: es un doble ncleo, trabaja a64 bits.

Ensamblador Manda ordenes a la bios para que haga una interrupcin no enmascarable. Debug: es un depurador para el lenguaje ensamblador. Editores de un lenguaje ensamblador ASM TAS MASM

Lenguaje ensamblador Est orientado a Hw bsico bit, byte, registro, procesador y el bus. Los elementos internos en que se ejecuta son: microprocesador, la memoria, el ensamble de los registros y utiliza puertos externos como salida de ejecucin. Hace uso de las interrupciones IRQ 21 y 25. 21 est orientado al procesador y est en cascada a la 25. El Sw en el que se pueden ejecutar las interrupciones debe ser un depurador (debug), que consta de diferentes archivos que incluye el sistema operativo. Existen otros depuradores ajenos al DOS llamados: TAS, MASM; los cuales interrumpen al procesador al ejecutar la interrupcin. Los registros manejan la aritmtica, movimiento de datos y el direccionamiento de datos. Instrucciones aritmticas ADC: adicin con acarreo. ADD: adicin de los operadores DIV: divisin sin signo. IDIV: divisin con signo MUL: multiplicacin sin signo IMUL: multiplicacin de dos enteros con signo SBB: substraccin con acarreo SUB: substraccin

Instrucciones de datos en registros MOV: mueve los registros para ingresar datos.

Instrucciones de registro AX: acumulador BX: registro base

Un programa en lenguaje ensamblador consiste en uno o ms segmentos para definir datos y almacena instrucciones de maquina a un segmento llamado stack o pila que contiene direcciones almacenadas.

Introduccin al lenguaje ensamblador Debug Ms-dos

Uso de debug con el sistema operativo dos (ms-dos = Microsoft disk operating system)

Incluye un depurador: programa para observar el comportamiento de los registros del CPU 80386.(Intel o AMD)

Recurdese que los registros de esta arquitectura son un subconjunto elemental de aquellos presentes en modelos ms modernos de la familia '86. U equivalentes. usando debug es posible observar el comportamiento de las instrucciones, la forma cmo stas afectan a las banderas, los contenidos de la memoria, el cdigo de las instrucciones; adems permite ensamblar cdigo elemental usando los mnemotcnicos del 8086. en particular, obsrvese lo siguiente:

1261207946 a) debug opera bajo dos. b) cuando se invoca (como en el ejemplo) sin argumentos, el contenido de la memoria es arbitrario. en las siguientes secciones de hace un breve resumen de los comandos de debug. este comando compara y reporta diferencias entre los contenidos de dos bloques de memoria. la sintaxis es:

Registro bandera El lenguaje ensamblador trabaja en registros bandera o flag o estac de 16 a8 bits en registro a un octeto, en este caso trabaja en una bandera de 8 bits repartidos en dos octetos con la direccin en el primer octeto.

Convertimos nuestro registro de bandera a: Hexadecimal: 1781 Octal: 13601 Decimal: 6017 Binario: 1011110000001 1 7 8 1 0 1 0 0

4 octetos

4 octetos

r: es el registro del debug y su como modificar un registro de la CPU Dando como consecuencia del acumulador.

Registro de la CPU

instruccin ax bx cx dx ds es ss cs

segmento acumulador registro base registro contador registro de datos segmento de registro de datos registro de segmento extra registro de segmento de pila registro de segmento de cdigo

bp sp ip

registro de apuntador base registro del apuntador de pila registro del apuntador de la siguiente instruccin

f sc

registro bandera registro de segmento de cola

Manejo de interrupciones del debug Int 10 es la que se genera en la BIOS Int 20 se cuando invocamos a lo que es el hw especficamente a nuestro procesador. () Int 21 que esta invoca a la interrupcin sobre el m-dos o el Shell del S.O. (obedece a la rutina del debug). r.- el registro al procesador t.- tracert (rastrea un paquete que est perdido en el equipo (actualiza todo el registro del procesador)).darle ping al procesador q.- salir (quit) mov.- mover el registro

Ejercicios de manejo de operaciones aritmticas: Suma: la suma utilizando add g: es para ir al final del programa. mov ax, 4 mov bx, 5 add ax, bx int 20 int 21

Resta: para realizar una resta el siguiente es el procedimiento: mov ax,4 mov bx,5 sub ax, bx: el nombre sub es lo que cambia puesto que es el nombre aritmtico para realizar la resta. int 20 int 21

multiplicacin: la multiplicacin es la siguiente operacin utilizando mul g: es para ir al final del programa. mov ax,4 mov bx,5 mul ax, bx int 20 int 21

Divisin: la divisin es la siguiente operacin utilizando div g: es para ir al final del programa. mov ax,4 mov bx,5 div ax, bx int 20 int 21

Proceso para ensamblar. Restar el proceso final a100. 2.-asignar el resultado del registro final a una direccin a ensamblar. 3.- utilizar la instruccin n, que significa nombre, ejemplo: n_c:nombre.com, n_c:nombre.exe 4.- mover el valor al registro (rcx) 5.- imprimir el valor de cx resultado de la ltima posicin Dar la letra w escritura

Interrupciones Es una operacin que invoca la ejecucin de una rutina especfica que suspende la ejecucin del programa que la llam, de tal manera que el sistema toma control del computador colocando en el stack el contenido de los registros cs e ip. en este caso se realizo una interrupcin en donde la pantalla se recorre, y marcndola con color azul. utilizando las instrucciones que aparecen en las pantallas.

Desensamblar Para pode desensamblar un archivo la instruccin es: n c: hola.com l u100 A continuacin se presentan uno de los ejercicios en pantallas desensamblados

Esta imagen es la del ensamblaje del mensaje hola mundo.

Practicas del lenguaje ensamblador


Hola Mundo C:\>debug // entrar al debug -a // comando a para q nos d el segmento en el q se va a ensamblar 139A:0100 jmp 0125 // salto de lnea a la posicin 0125 139A:0103 -e 0103 "hola mundo$"// comando e permite escribir caracteres y $ indica el final de la cadena -a 0125 // ensamblar en la posicin donde se dio el salto de lnea 139A:0125 mov ah, 09// permiten imprimir el mensaje en pantalla 139A:0127 mov dx, 0102// mover a dx el mensaje colocado en 0102"hola mundo" 157A:0108 int 21// ejecucin de la rutina del debug 157A:010A int 20// llamar al hw 157A:010C g // comando para terminar el proceso hola mundo// muestra el mensaje El programa ha terminado de forma normal -h 010c a100// para obtener el tamao del archivo A20C 600C // tamao del archivo -n c:division.com// comando n guarda el archivo -rcx// mover el valor del registro CX 0000 : 600c // tamao del archivo -w// guardar Escribiendo 3600C bytes

Suma
C:\>debug // entrar al debug -a // comando a para q nos d el segmento en el q se va a ensamblar 157A:0100 mov ax, 4// mover a ax el numero 4 157A:0103 mov bx, 5// mover en bx el valor 5 157A:0106 add ax, bx// operador add permite realizar la suma utilizando los valores de los registros ax, bx. 157A:0108 int 20// llamar al hw 157A:010A int 21// ejecucin de la rutina del debug 157A:010C T// permite ver el proceso y la operacin de los registros AX=0004 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // ax toma el valor de 4 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 BB0500 MOV BX, 0005// instruccin a ejecutarse T AX=0004 BX= 0005 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // bx toma el valor de 5 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 01D8 ADD AX, BX // instruccin a ejecutarse T AX=0009 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // resultado de la suma en ax (9) DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 CD20 INT 20 // regresa el control a la pc g // comando para terminar el proceso El programa ha terminado de forma normal

Resta
C:\>debug // entrar al debug -a // comando a para q nos d el segmento en el q se va a ensamblar 157A:0100 mov ax, 6// mover a ax el numero 4 157A:0103 mov bx, 4// mover en bx el valor 5 157A:0106 sub ax, bx// operador add permite realizar la resta utilizando los valores de los registros ax, bx. 157A:0108 int 20// llamar al hw 157A:010A int 21// ejecucin de la rutina del debug 157A:010C T// permite ver el proceso y la operacin de los registros AX=0006 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // ax toma el valor de 6 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 BB0300 MOV BX, 0004// instruccin a ejecutarse T AX=0006 BX= 0004 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // bx toma el valor de 4 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 01D8 SUB AX, BX // instruccin a ejecutarse T AX=0002 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // resultado de la resta en ax (2) DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 CD20 INT 20 // regresa el control a la pc g // comando para terminar el proceso El programa ha terminado de forma normal -h 010c a100// para obtener el tamao del archivo A20C 600C // tamao del archivo -n c:suma.com// comando n guarda el archivo -rcx// mover el valor del registro CX 0000 : 600c // tamao del archivo -w// guardar Escribiendo 3600C bytes

Multiplicacin
C:\>debug // entrar al debug -a // comando a para q nos d el segmento en el q se va a ensamblar 157A:0100 mov ax, 2// mover a ax el numero 2 157A:0103 mov bx, 4// mover en bx el valor 4 157A:0106 mul ax, bx// operador MUL permite realizar la multiplicacin utilizando los valores De los registros ax, bx. 157A:0108 int 20// llamar al hw 157A:010A int 21// ejecucin de la rutina del debug 157A:010C T// permite ver el proceso y la operacin de los registros AX=0002 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // ax toma el valor de 2 DS=157A ES=157A SS=157A 157A:0103 BB0300 T IP=0103 MOV NV UP EI PL NZ NA PO NC

BX,0004// instruccin a ejecutarse

AX=0002 BX= 0004 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // bx toma el valor de 4 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 01D8 T mul AX,BX // instruccin a ejecutarse

AX=0008 BX= 0004 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // resultado de la resta en ax(8) DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 CD20 INT 20 // regresa el control a la pc g // comando para terminar el proceso El programa ha terminado de forma normal -h 010c a100// para obtener el tamao del archivo A20C 600C // tamao del archivo -n c:MULTIP.com// comando n guarda el archivo -rcx// mover el valor del registro CX 0000 : 600c // tamao del archivo -w// guardar Escribiendo 3600C bytes

Divisin
C:\>debug // entrar al debug -a // comando a para q nos d el segmento en el q se va a ensamblar 157A:0100 mov ax, 8// mover a ax el numero 8 157A:0103 mov bx,4// mover en bx el valor 4 157A:0106 DIV bx, ax// operador DIV permite realizar la multiplicacin utilizando los valores de los registros ax, bx. 157A:0108 int 20// llamar al hw 157A:010A int 21// ejecucin de la rutina del debug 157A:010C T// permite ver el proceso y la operacin de los registros AX=0008 BX= 0000 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // ax toma el valor de 8 DS=157A ES=157A SS=157A 157A:0103 BB0300 T IP=0103 MOV NV UP EI PL NZ NA PO NC

BX,0004// instruccin a ejecutarse

AX=0008 BX= 0004 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // bx toma el valor de 4 DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 01D8 T div bX,aX // instruccin a ejecutarse

AX=0002 BX= 0004 CX=0000 DEX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 // resultado de la divisin en ax(2) DS=157A ES=157A SS=157A IP=0103 NV UP EI PL NZ NA PO NC 157A:0103 CD20 INT 20 // regresa el control a la pc g // comando para terminar el proceso El programa ha terminado de forma normal -h 010c a100// para obtener el tamao del archivo A20C 600C // tamao del archivo -n c:division.com// comando n guarda el archivo -rcx// mover el valor del registro CX 0000 : 600c // tamao del archivo -w// guardar Escribiendo 3600C bytes

Establece El Tamao Del Cursor C:\>debug // entrar al debug -a 0CC8:0100 mov ah, 09// permite mostrar los cambios en pantalla 0CC8:0102 mov ah, 01// peticin para asignar el tamao del cursor 0CC8:0104 mov ch,00 // lnea inicial de rastreo 0CC8:0106 mov cl, 14//lnea final de rastreo 0CC8:0108 int 10h // llama al BIOS 0CC8:010A int 20// llamar al hw 0CC8:01OC int 21// ejecucin de la rutina del debug 0CC8:010E g // comando para terminar el proceso ll El programa ha terminado de forma normal -h 010E a100// para obtener el tamao del archivo A20C 600E // tamao del archivo -n j:cursor.com// comando n guarda el archivo -rcx// mover el valor del registro CX 0000 : 600E // tamao del archivo -w// guardar Escribiendo 0600E bytes

You might also like