El documento describe el lenguaje ensamblador, un lenguaje de bajo nivel que se traduce directamente al código máquina de la computadora. El lenguaje ensamblador consiste en instrucciones mnemónicas que representan acciones elementales de la máquina. Un programa ensamblador traduce el código ensamblador a código binario que puede entender el procesador.
2. CONCEPTOS
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel
utilizado para escribir programas de computadora, y constituye la
representación más directa del código máquina específico para
cada arquitectura de computadoras legible por un programador.
Una computadora digital, sólo distingue datos de tipo binario, es
decir, constituidos por dos únicos valores a los que se denomina 0 y
1. Para representar datos que contengan una información se utilizan
una serie de unos y ceros cuyo conjunto indica dicha información.
Un programa escrito en lenguaje ensamblador consiste en una serie
de instrucciones que corresponden al flujo de órdenes ejecutables
que pueden ser cargadas en la memoria de una computadora.
3. El mnemónico "mov" es un código de operación u "opcode" ,
elegido por los diseñadores de la colección de instrucciones para
abreviar "move" (mover).- El opcode es seguido por una lista de
argumentos o parámetros, completando una instrucción de
ensamblador típica.
Las instrucciones así formadas equivalen a acciones elementales
de la máquina, por lo que al conjunto de dichas instrucciones que
son interpretadas directamente por la máquina se denomina
lenguaje máquina.
La transformación del lenguaje ensamblador en código máquina la
realiza un programa ensamblador, y la traducción inversa la puede
efectuar un desensamblador.
Los ensambladores, son capaces de ensamblar el programa
traducido a partir de varias piezas, procedimientos o subrutinas a
código binario ("1" y "0") que entiende el procesador.
El código simbólico puede parecer de difícil acceso, pero es más
fácil de recordar e interpretar que el binario o el hexadecimal.
4.
5. Ventajas
Un programa escrito en el lenguaje ensamblador requiere
considerablemente menos memoria y tiempo de ejecución que un
programa escrito en los conocidos lenguajes de alto nivel, como
Pascal y C.
El lenguaje ensamblador da a un programador la capacidad de
realizar tareas muy técnicas que serian difíciles, si no es que
imposibles de realizar en un lenguaje de alto nivel.
El conocimiento del lenguaje ensamblador permite una
comprensión de la arquitectura de la maquina que ningún lenguaje
de alto nivel puede ofrecer
Los lenguajes de alto nivel fueron diseñados para eliminar las
particularidades de una computadora especifica, mientras que un
lenguaje ensamblador esta diseñado para una computadora
especifica, o, de manera más correcta, para una familia especifica
de microprocesadores.
6. APLICACIONES
mover
llenar un registro con un valor constante
mover datos de una posición de memoria a un registro o viceversa
escribir y leer datos de dispositivos
computar
sumar, restar, multiplicar o dividir los valores de dos registros,
colocando el resultado en uno de ellos on en otro registro
realizar operaciones binarias, incluyendo operaciones lógicas
(AND/OR/XOR/NOT)
comparar valores entre registros (mayor, menor, igual)
afectar el flujo del programa
saltar a otra posición en el programa y ejecutar instrucciones allí
saltar si se cumplen ciertas condiciones (IF)
saltar a otra posición, pero guardar el punto de salida para retornar
7. APLICACION MAS IMPORTANTE
Se lo usa cuando se requiere
manipular directamente el
HARDWARE, pudiendo:
DESHABILITAR/HABILITAR,
LEER/ESCRIBIR desde
perifericos.
8. EJEMPLO 1
El siguiente es un ejemplo del programa
clásico Hola mundo escrito para la
arquitectura de procesador x86 bajo el
sistema operativo DOS.
9. EJEMPLO 2
Una selección de
instrucciones para
una computadora
virtual con las
correspondientes
direcciones de
memoria en las que
se ubicarán las
instrucciones. Estas
direcciones no son
estáticas. Cada
instrucción se
acompaña del código
ensamblador
generado (código
objeto) que coincide
con la arquitectura de
computador virtual.
10. EJEMPLO RECURSIVIDAD
ld b,8 ; veces a repetir el bucle principal
BUCLE_EXTERNO:
push bc ; guardamos el valor del registro en la pila
... ; código a repetir en el principal
ld b,128 ; veces a repetir el bucle interno
BUCLE_INTERNO:
push bc ; guardamos el valor del registro en la pila
... ; código a repetir en el anidado
pop bc ; recuperamos el valor original desde la pila
djnz BUCLE_INTERNO ; repite el bucle interno
... ; otro código del principal
pop bc ; recuperamos el valor original desde la pila
djnz BUCLE_EXTERNO ; repite el más externo
11. DESENSAMBLADOR
Un desensamblador es un programa de
computación que traduce desde lenguaje
máquina (código binario) al lenguaje de
programación (assembler).
El programa desensamblador a utilizar, depende
exclusivamente del microprocesador que
estamos usando (para que pueda reconocer las
instrucciones del código binario), de la
arquitectura de la máquina y del sistema
operativo en uso
12. QUE NO HACE UN
DESENSAMBLADOR?
Rescatar los nombres de las variables o las funciones
nombradas por el programador
Recuperar los comentarios
Rescatar código fuente perdido
Recuperar la estructura de clases
****Existe una EXCEPCION a todo esto y es cuando el
que compiló el programa ha habilitado una opción, que
es incluir la información de debug en el programa
(usualmente se trata de programas en fase de desarrollo
y no de programas finales).
14. PARA CRACKEAR
Hacemos:
El problema radica en encontrar en lenguaje
ensamblador, las partes necesarias para hacer
dichos cambios
15. CONCLUSIONES
El lenguaje ensamblador, es algo muy complicado en
comparacion con lenguajes de alto nivel, que ocupan
palabras del idioma ingles.
El lenguaje ensamblador nos da gran control sobre el
Hardware, pudiendo activar o desactivar los mismos tan
solo con algunas direcciones.
El lenguaje ensamblador es un lenguaje de bajo nivel,
pero puede llegar a ser de los mas potentes.
Los desensambladores son las herramientas mas
basicas para crackear programas.
La mayoria de controladores de la computadora estan
hechos en lenguaje de ensamblador porque trabajan
directo con los dispositivos.