ARQ14
-
Upload
xavier-guamangallo -
Category
Documents
-
view
215 -
download
0
description
Transcript of ARQ14
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
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