+ All Categories

ARQ14

Date post: 25-Dec-2015
Category:
Upload: xavier-guamangallo
View: 215 times
Download: 0 times
Share this document with a friend
Description:
rwrw
37
LENGUAJE ENSAMBLADOR Arquitectura de Computadoras
Transcript

LENGUAJE ENSAMBLADOR

Arquitectura de Computadoras

Lenguajes de Bajo Nivel

Lenguaje de Máquina

Se denomina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar

La información que hace que el hardware de la computadora realice una determinada actividad de llama: Instrucción

Por consiguiente una instrucción es un conjunto de unos y ceros

El conjunto de instrucciones que son interpretadas directamente por la máquina se denomina: Lenguaje de Máquina

Una instrucción en lenguaje de máquina puede representarse de la siguiente forma:

011011001010010011110110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación para el programador

Lenguaje Ensamblador

Se puede utilizar la propia máquina para la traducción de los programas escritos con ciertos caracteres alfabéticos comprensibles para el programador, en una secuencia de unos y ceros

Al grupo alfabético se le denomina mnemotécnico

La anterior instrucción se podría escribir de la siguiente forma: TRASLADAR POS-A, POS-B

que nos resulta de más fácil comprensión

A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje de máquina, también se les denomina normalmente: Programa Ensamblador

LENGUAJE ENSAMBLADOR: VENTAJAS

El Lenguaje Ensamblador es un Lenguaje de Bajo Nivel, es decir, ligado con la estructura interna concreta de una determinada máquina

En los lenguajes de alto nivel, como el Pascal, C, etc., el programador no tiene porque reconocer la estructura interna de la máquina

Trabajan con variables, constantes e instrucciones simbólicas, y es el traductor quien las transforma en las direcciones apropiadas

Se codifican en comandos poderosos, cada uno de los cuales pueden generar muchas instrucciones en lenguaje de máquina

Un programa escrito en el lenguaje ensamblador requiere menos memoria y tiempo de ejecución que un programa escrito en un lenguaje de alto nivel

El lenguaje ensamblador permite al programador realizar tareas muy técnicas que serían difíciles de realizar en un lenguaje de alto nivel

El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura interna de la máquina

Aunque la mayoría de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que son más fáciles de escribir y de dar mantenimiento, una práctica común es codificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento

Los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en el lenguaje ensamblador

Los lenguajes de alto nivel fueron diseñados para eliminar las particularidades de un microprocesador especifico, mientras que un lenguaje ensamblador esta diseñado para una familia especifica de microprocesadores

Para realizar un programa en Lenguaje Ensamblador se requiere: Sistema Operativo MS-DOS o PC-DOS y estar familiarizados con su uso

Programa Ensamblador. Las versiones de Microsoft son: MASM y QuickAssembler; TASM es de Borland y OPTASM es de System

MODOS DE DIRECCIONAMIENTO

El modo de direccionamiento indica la forma en que el procesador calcula la dirección donde irá a buscar el dato origen o grabará el resultado en el operando destino

MODO IMPLICITO

En este modo se especifican los operandos en forma implícita en la definición de la instrucción. Ejemplo: CLC, “borrar señalizador de arrastre“

MODO INMEDIATO

En este modo se especifica el operando en la instrucción misma. Son útiles para inicializar registros en un valor constante: Ejemplo: MOV AX,5

MODO DE REGISTRO

En este modo, solamente se realiza una copia del registro fuente al registro destino, dejando intacto el primero: Ejemplo: MOV AX, BX

MODO INDIRECTO DE REGISTROS

En este caso, el valor del operando es señalado por una dirección de desplazamiento almacenado en uno de los registros siguientes: SI, DI, BX y bajo ciertas circunstancias BP. El designador del operando fuente es reconocido por los corchetes [ ]

Ejemplo: MOV AX, [BX]

MODO DE DIRECCIONAMIENTO DIRECTO

En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en memoria y su dirección la proporciona en forma directa el campo de dirección de la instrucción. El operando en este modo de direccionamiento puede ser una etiqueta

Ejemplo: MOV AX, MISDATOS

MOV AX, [200H]

MODO DE DIRECCIONAMIENTO INDEXADO

En este modo el contenido de un registro índice se suma a la parte de dirección de la instrucción para obtener la dirección efectiva

El registro índice puede incrementarse para facilitar el acceso a operandos consecutivos

Ejemplo: MOV DH, [SI + 0100H]

EJECUCIÓN DE INSTRUCCIONES

Se utilizará un programa del DOS llamado DEBUG que me permite:

Probar y depurar programas ejecutablesVisualizar el contenido de la memoriaIngresar programas en la memoriaRastrear su ejecución

El rastreo de cómo se ejecutan las instrucciones da una idea de la operación de una computadora y la función de los registros

COMANDOS DEL DEBUG

A: ensamblar instrucciones simbólicas y pasarlas a código de máquina

D: mostrar el contenido de un área de memoria

E: introducir datos en memoria, iniciando en una localidad específica

G: correr el programa ejecutable que se encuentra en memoria

N: nombrar un programa

P: ejecutar un conjunto de instrucciones relacionadas

Q: salir de la sesión del DEBUG

R: mostrar el contenido de uno o más registros

T: rastrear la ejecución de una instrucción

U: “desensamblar” código de máquina y pasarlo a código simbólico

W: escribir o grabar un programa en disco

Ejemplo: D DS:200

Reglas de los comandos del DEBUG

No distingue entre letras minúsculas y mayúsculasSe introduce un espacio solo donde sea necesario separar parámetros en un comandoSe especifíca segmentos y desplazamientos con dos puntos (:)DEBUG supone que todos los números están en formato hexadecimal

Ejemplo: D DS:200 DDS : 200

dds : 200

El despliegue de DEBUG

Consiste de tres partes:

-Dirección del primer byte de la izquierda que se despliega en forma SEGMENTO:DESPLAZAMIENTO

La representación hexadecimal del área desplegada

La representación en ASCII de los bytes que contienen caracteres desplegables

-D DS:200149D:0200 8F 17 68 00 80 6A 02 1E-68 7E 60 1E 68 71 60 6A ..h..j..h~`.hq`j149D:0210 00 6A 03 1E 68 B8 BE 6A-00 6A 04 6A 00 9A 06 45 .j..h..j.j.j...E149D:0220 8F 19 6A 00 6A 43 6A 00-9A 12 16 4F 17 8E 46 FA ..j.jCj....O..F.149D:0230 26 C7 05 01 00 EB 41 8E-46 FA 26 C7 05 00 00 EB &.....A.F.&.....149D:0240 37 C7 06 36 36 00 00 FF-76 FA 57 56 9A E8 9F DF 7..66...v.WV....149D:0250 3DE9 46 FF 8B 76 0E 56-6A 08 66 FF 76 06 9A 28 =.F..v.Vj.f.v..(149D:0260 0D AF 17 C6 06 FC C9 00-1E 68 35 60 1E 68 46 60 .........h5`.hF`149D:0270 56 0E E8 C9 F7 83 C4 0A-B8 01 00 EB 02 33 C0 1F V............3..

Lenguaje de Máquina: Datos Inmediatos

DEBUG se utiliza también para ingresar programas en memoria en LENGUAJE DE MÁQUINA y rastrear su ejecución

Ejemplo:Instrucción Código Explicación Máquina SimbólicoB82301 MOV AX, 0123 Mover 0123H a AX052500 ADD AX, 0025 Sumar 0025H a AX8BD8 MOV BX, AX Mover AX a BX03D8 ADD BX, AX Sumar AX a BX8BCB MOV CX, BX Sumar BX a CX2BC8 SUB CX, AX Restar AX de CX 2BC0 SUB AX, AX Restar AX de AX90 NOP No operación

Las instrucciones de máquina pueden tener 1, 2 o 3 bytes. El primer byte es la operación real, y los otros, si los hay son operandos

INTRODUCIR INSTRUCCIONES DE PROGRAMA

Solo teclee la parte del lenguaje de máquina:El comando E hace que debug almacene cada par de dígitos hexadecimales en memoria:

DEBUG -E CS: 100 B8 23 01 05 25 00 -E CS: 106 8B D8 03 D8 8B CB -E CS: 10C 2B C8 2B C0 90

Si teclea un comando de manera incorrecta, solo repítalo con los valores correctos

Por las diferentes versiones del DOS, el contenido de algunos registros pueden diferir del de otros

Para rastrear la ejecución de cada una de las instrucciones teclee el comando T del DEBUG

En el caso de código de máquina, la representación ASCII de la derecha carece de significado

INTRODUCIR UN PROGRAMA EN ENSAMBLADOR

El comando A (Assemble, Ensamblar) le dice al DEBUG que acepte instrucciones simbólicas en ensamblador y las convierta a lenguaje de máquina

Si se digita: A 100 (Enter)

DEBUG muestra el valor del segmento de código y el desplazamiento como XXXX:0100

Ejemplo:Ingresando lo siguiente: C:\debug-A 100

Me mostrará:

XXXX:0100 _

Entonces se puede ingresar el programa en instrucciones simbólicas, ejemplo:

mov al, 25 mov bl, 32 add al, bl nop

El comando U (Unassemble, Desensamblar) me permite examinar el lenguaje de máquina generado

Ejemplo: U 100, 106

XXXX:0100 B025 MOV AL,25XXXX:0102 B332 MOV BL,32XXXX:0104 00D8 ADD AL,BLXXXX:0106 90 NOP

USO DE LA INSTRUCCIÓN INT

Me permite ingresar al DOS o al BIOS para enviar información acerca del sistema

Para lo cual sale de su programa, ingresa a una rutina del DOS o BIOS, realiza la función solicitada y regresa a su programa

Ejemplo: Obtener el número de la versión del DOS

mov ah, 30hint 21hnop

Se usa el comando P (Proceed) de DEBUG para ejecutar toda la rutina de interrupción en lugar de usar el comando T para avanzar un solo paso

En AL se mostrará el número principal de la versión del DOS, como X en DOS X .Y, y en AH el numero secundario de la versión (Y)

Al ejecutar el programa mostrará algo semejante a:

C:\>debug-a1000CAA:0100 MOV AH,300CAA:0102 INT 21H0CAA:0104 NOP0CAA:0105-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0100 NV UP EI PL NZ NA PO NC0CAA:0100 B430 MOV AH,30-T

AX=3000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0102 NV UP EI PL NZ NA PO NC0CAA:0102 CD21 INT 21-P

AX=0005 BX=FF00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0104 NV UP EI PL NZ NA PO NC0CAA:0104 90 NOP-

Como guardar y cargar un programa desde el DEBUG

Para guardar:

Hallar la longitud del programa (debe expresarse en hexadecimal)

Crear el nombre para el programaPoner a cero el contenido del registro BXPoner la longitud del programa en CXDar la orden de escritura

Ejemplo: Ingresar el siguiente programa:

XXXX:0100 MOV AX, 4XXXX:0103 MOV BX, 2XXXX:0106 ADD AX, BXXXXX:0108 INT 20XXXX:010A

-H 10A 100 020A 000A

-N C:ejemplo1.com

-R BX BX ????: 0000

-RCX CX 0000: 000A

-WEscribiendo 000A bytes

Para cargar un Programa:

Digitar el nombre del programaCargarlo mediante el comando L (Load)Desensamblar

-N C:ejemplo1.com-L-U 100 L 0A

Ejemplos de programas:

Ejemplo 1:

Verificación de fecha del ROM BIOS:

Digite: D FFFF:5 y Enter

Ejemplo 2: como obtener la fecha actual

MOV AH, 2AINT 21NOP

Donde:

AL: Día de la semana( 0 = domingo)CX: Año en hexadecimalDH: Mes(01 a 12)DL: Día del mes(01 al 31)

Ejemplo 3: Realizar un programa que cambie la forma del cursor

mov ah,1 ; función para cambiar el cursor

mov cx,7 ; forma del cursor

int 10 ; invoca al BIOS

int 20 ; termina el programa

Ejemplo 4: Realizar un programa que lea el teclado y escriba en pantalla el carácter digitado:

mov ah,1 ; función 1 (lee el teclado)

Int 21 ; invoca al DOS

cmp al, 0d ; compara si lo leído es un retorno de carro

jne 100 ; si no lo es, lee otro caracter

mov ah,2 ; función 2 (escribe en pantalla)

mov dl,al ; carácter a escribir en al a dl

int 21 ; invoca al DOS

int 20 ; regresa el control al DEBUG

Ejemplo 5: Realizar un programa que lea me permita exhibir en pantalla una cadena de caracteres varias veces

cs:0100 jmp 125Cs:0102 ENTER-e 102 ‘Este es un ejemplo usando debug’ 0d 0a ‘$’-a125cs:0125 mov cx,0014cs:0128 mov dx,0102cs:012b mov ah,09cs:012d int 21cs:012f loop 012dcs:0131 int 20