La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente
con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en l se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sera que los programas en ensamblador ocupan menos espacio en memoria. Sintaxis El lenguaje ensamblador x86 tiene 2 vertientes diferentes en cuanto a su sintaxis de programacin: sintaxis Intel, usada en sus inicios para la documentacin de la plataforma x86, y sintaxis AT&T . 1 La sintaxis Intel es la dominante en la plataforma Windows, mientras que en Unix/Linux ambas son utilizadas aunque GCC solo soportaba la sintaxis AT&T en sus primeras versiones. La sintxis de AT&T es poco ms o menos como la de Intel, en el sentido de que no cambia los nombres de los cdigos de operacin ni de los registros, pero tiene algunas diferencias chocantes a primera vista: Los nombres de los cdigos de operacin (opcodes) llevan una letra al final que indica el tamao de los operandos. Aunque algunas veces se puede inferir el tamao de los operandos de ellos mismos, resulta una buena prctica aadir esta letra al final. El sufijo (la letra en cuestin) es b si queremos indicar operandos tamao byte, w para tipo word, etc... En las instrucciones tales como mov, que llevan un operando origen y otro destino, el orden en el que se colocan tras el cdigo de operacin es el inverso a la sintxis Intel. En sta, primero se coloca el destino y luego el origen. En la sintxis AT&T se coloca primero el operando de origen y luego el de destino. Las instrucciones que tienen ms de un operando de origen no tienen los operandos invertidos, al menos en arquitectura i386. Esto tambin ocurre con las instrucciones de punto flotante debido a como las genera el compilador de C. Los operandos inmediatos van precedidos por el smbolo $ en AT&T, mientras que no llevan delimitadores en la sintxis Intel. Los nombres de los registros van precedidos por el smbolo %, mientras que no van delimitados en la sintxis Intel. Los operandos de los saltos absolutos cortos van precedidos por el smbolo emph*, mientras que no van delimitados en la sintxis Intel. Los saltos largos se forman indicando section,offset, mientras que en la sintxis Intel se forman indicando section:offset. Adems, las instrucciones para salto largo se llaman ljmp y lcall, y la de retorno largo se llama lret, en lugar de sus correspondientes en sintxis Intel, que son call far, jmp far y ret far. Por ltimo, en principio se espera que un programa escrito en lenguaje de ensamble en Unix tenga una sola seccin (una seccin viene a ser como un segmento. Aunque no sea exacto, se puede considerar as.).
Diferencias entre Lenguaje Ensamblador y Lenguaje Maquina
ENSAMBLADOR MAQUINA El siguiente lenguaje de programacin de "ms alto" nivel es el lenguaje ensamblador, que se trata de cdigo mquina cuyos cdigos de instrucciones han sido reemplazados por comandos ms intuitivos. Por ejemplo, el comando para colocar el valor 97 en un registro de la memoria es llamado AL (en cdigo mquina sera "10110000 01100001"), y en lenguaje ensamblador sera "MOV AL, 97", que sigue siendo un comando crptico pero es mucho ms sencillo de leer. Aunque sigue siendo ineficiente escribirlo y requiere que el programador trate directamente con el hardware de la computadora, es un lenguaje de nivel ms alto que el de cdigo mquina porque es ms abstracto, es decir, est ms cerca del programador. Un lenguaje de bajo nivel es aquel que se encuentra cerca de los conceptos bsicos del hardware de la computadora. El lenguaje de ms bajo nivel es el cdigo mquina, que el hardware entiende directamente y que no requiere interpretacin o traduccin. El cdigo mquina est compuesto completamente por cadenas de nmeros binarios: los famosos ceros y unos. Si bien puede hacer todo lo que cualquier otro lenguaje puede lograr (de hecho el resto de los lenguajes deben ser traducidos a cdigo mquina por el intrprete), no est diseado para cumplir con las necesidades del programador y requiere un conocimiento profundo del procesador y de los dispositivos de la computadora, adems de que es casi imposible que un humano pueda leerlo.
Ventajas y desventajas del Lenguaje Ensamblador Ventajas Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el ms cercano a la mquina la computadora lo procesa ms rpido. Eficiencia de tamao: Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan libreras y dems como son los lenguajes de alto nivel Flexibilidad: Es flexible porque todo lo que puede hacerse con una mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los lenguajes de alto nivel tienen en una u otra forma limitante para explotar al mximo los recursos de la mquina. O sea que en lenguaje ensamblador se pueden hacer tareas especficas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite Desventajas Tiempo de programacin: Como es un lenguaje de bajo nivel requiere ms instrucciones para realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Por otro lado, requiere de ms cuidado por parte del programador, pues es propenso a que los errores de lgica se reflejen ms fuertemente en la ejecucin.
Programas fuente grandes: Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos ms instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.
Peligro de afectar recursos inesperadamente: Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la mquina, programar en este lenguaje lo ms comn que pueda pasar es que la mquina se
bloquee o se reinicialice. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones invlidas, que normalmente no aparecen al usar un lenguaje de alto nivel.
Falta de portabilidad: Porque para cada mquina existe un lenguaje ensamblador; por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una mquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.
Compiladores para Ensamblador ASM NASM MASM/MASM32 FASM NASAM TASAM EMU8086 MPASM MPLINK MPLIB MIPS SPARC HP PA-RISC SOAP
Registros de Propsito General Los registros de propsito general AX, BX, CX y DX son los caballos de batalla del sistema. Son nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ltimo byte de la izquierda es la parte alta, y el ltimo byte de la derecha es la parte baja. Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre.
Registro AX: El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo ms eficiente si se refieren al AX en lugar de a los otros registros. Registro BX: El BX es conocido como el registro base ya que es el nico registro de propsito general que puede ser ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos. Registro CX: El CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. El CX tambin es usado para muchos clculos. Registro DX: El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos.