Glosario técnico - Lenguaje Ensamblador
Glosario técnico - Lenguaje Ensamblador
Conceptos básicos.
Lenguaje de alto
nivel: es aquel que se aproxima más al lenguaje natural humano que al lenguaje
binario de las computadoras. Su función principal radica en que a partir de su
desarrollo, existe la posibilidad de que se pueda utilizar el mismo programa en
distintas máquinas, es decir que es independiente de un hardware determinado.
La única condición es que la PC tenga un programa conocido como traductor o
compilador, que lo traduce al lenguaje específico de cada máquina. Entre estos
lenguajes figuran ejemplos como PASCAL, BASIC, FORTRAN y C++. (Lanzillotta,
2004).
Lenguaje de bajo nivel: también llamado lenguaje ensamblador,
permite al programador escribir instrucciones de un programa usando
abreviaturas del inglés, también llamadas palabras nemotécnicas, tales como:
ADD, DIV, SUB, etc. Un programa escrito en un lenguaje ensamblador tiene el
inconveniente de que no es comprensible para la computadora, ya que, no está
compuesto por ceros y unos. Para traducir las instrucciones de un programa
escrito en un lenguaje ensamblador a instrucciones de un lenguaje máquina hay
que utilizar un programa llamado ensamblador. (Pes, 2009).
Lenguaje
ensamblador: es un tipo de lenguaje de bajo nivel utilizado para escribir
programas informáticos, y constituye la representación más directa del código
máquina específico para cada arquitectura de computadoras legible por un
programador. (Wikipedia, 2009).
Lenguaje máquina: El
lenguaje máquina es el único que entiende la computadora digital, es su
"lenguaje natural". En él sólo se pueden utilizar dos símbolos: el
cero (0) y el uno (1). Por ello, al lenguaje máquina también se le denomina
lenguaje binario. (Pes, 2009).
Compilador: los compiladores son
programas o herramientas encargadas de compilar. Un compilador toma un texto
(código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje
comprensible por las computadoras (código objeto).
Clasificación de
los ensambladores.
Ensambladores
Cruzados (Cross-Assembler): Se denominan así los ensambladores que se
utilizan en una computadora que posee un procesador diferente al que tendrán
las computadoras donde va a ejecutarse el programa objeto producido. El empleo
de este tipo de traductores permite aprovechar el soporte de medios físicos
(discos, impresoras, pantallas, etc.), y de programación que ofrecen las
máquinas potentes para desarrollar programas que luego los van a ejecutar
sistemas muy especializados en determinados tipos de tareas.
Ensambladores
Residentes: Son aquellos que permanecen en la memoria principal de la
computadora y cargan, para su ejecución, al programa objeto producido. Este
tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente
el programa sin necesidad de transportarlo de un lugar a otro, como se hacía en
cross-assembler, y sin necesidad de programas simuladores.
Microensambladores: Generalmente,
los procesadores utilizados en las computadoras tienen un repertorio fijo de
instrucciones, es decir, que el intérprete de las mismas interpretaba de igual
forma un determinado código de operación.
Macroensambladores: Son
ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su
potencia, normalmente son programas robustos que no permanecen en memoria una
vez generados el programa objeto. Puede variar la complejidad de los mismos,
dependiendo de las posibilidades de definición y manipulación de las
macroinstrucciones, pero normalmente son programas bastantes complejos, por lo
que suelen ser ensambladores residentes.
Ensambladores de
una fase: Estos ensambladores leen una línea del programa fuente y la
traducen directamente para producir una instrucción en lenguaje máquina o la
ejecuta si se trata de una pseudoinstrucción. También va construyendo la tabla
de símbolos a medida que van apareciendo las definiciones de variables,
etiquetas, etc.
Ensambladores de
dos fases: Los ensambladores de dos fases se denominan así debido a que
realizan la traducción en dos etapas. En la primera fase, leen el programa
fuente y construyen una tabla de símbolos; de esta manera, en la segunda fase,
vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto
que conocen la totalidad de los símbolos utilizados y las posiciones que se les
ha asignado. Estos ensambladores son los más utilizados en la actualidad.
Instrucciones
simbólicas
Una instrucción en
ensamblador consta de códigos de operación, operaciones, operandos y
comentarios.
La etiqueta, es el
símbolo que añadido a una instrucción permite que se pueda referenciar
simbólicamente en el programa.
El código de
operación, es generalmente un símbolo, aunque en algunos sistemas es un entero
octal, hexadecimal o decimal que indica la operación que se quiere realizar.
El campo operando,
es un campo de dirección de datos que puede estar dividido en varios subcampos
de acuerdo con la constitución interna de la computadora correspondiente.
El comentario, que
no es obligatorio, no es procesado por el ensamblador. Nos dice que las
instrucciones pueden ser de formato fijo, formato libre y formato mixto.
CONJUNTO DE
INSTRUCCIONES (Microprocesadores 8086/8088)
Se pueden
clasificar en los siguientes grupos:
Instrucciones de
Transferencia de Datos
Estas instrucciones
mueven datos de una parte a otra del sistema; desde y hacia la memoria
principal, de y a los registros de datos, puertos de E/S y registros de
segmentación.
Las instrucciones
de transferencia de datos son las siguientes:
MOV
transfiere
XCHG
intercambia
IN
entrada
OUT
salida
XLAT
traduce usando una
tabla
LEA
carga la
dirección efectiva
LDS
carga el
segmento de datos
LES
carga el
segmento extra
LAHF
carga los indicadores en
AH
SAHF
guarda AH en los
indicadores
PUSH
FUENTE (sp) ←←fuente
POP
DESTINO destino←←(sp)
Control de Bucles
(instrucciones simples)
Éstas posibilitan
el grupo de control más elemental de nuestros programas. Un bucle es un bloque
de código que se ejecuta varias veces. Hay 4 tipos de bucles básicos:
• Bucles
sin fin
• Bucles
por conteo
• Bucles
hasta
• Bucles
mientras
Las instrucciones
de control de bucles son las siguientes:
• INC
incrementar
• DEC
decrementar
• LOOP
realizar un bucle
• LOOPZ,
LOOPE realizar un bucle si es cero
• LOOPNZ,
LOOPNE realizar un bucle si no es cero
• JCXZ
salta si CX es cero
Instrucciones
de Prueba, Comparación y Saltos.
Este
grupo es una continuación del anterior, incluye las siguientes instrucciones:
TEST
verifica
CMP
compara
JMP
salta
JE, JZ
salta si es igual a cero
JNE, JNZ
salta si no igual a cero
JS
salta si signo negativo
JNS
salta si signo no negativo
JP, JPE
salta si paridad par
JNP, JOP
salta si paridad impar
JO
salta si hay capacidad excedida
JNO
salta si no hay capacidad excedida
JB, JNAE
salta si por abajo (no encima o igual)
JNB, JAE
salta si no está por abajo (encima o igual)
JBE, JNA
salta si por abajo o igual (no encima)
JNBE, JA
salta si no por abajo o igual (encima)
JL, JNGE
salta si menor que (no mayor o igual)
JNL, JGE
salta si no menor que (mayor o igual)
JLE, JNG
salta si menor que o igual (no mayor)
JNLE, JG
salta si no menor que o igual (mayor)
Instrucciones
de Llamado y Retorno de Subrutinas.
Para que los
programas resulten eficientes y legibles tanto en lenguaje ensamblador como en
lenguaje de alto nivel, resultan indispensables las subrutinas:
CALL
llamada a subrutina
RET
retorno al programa o subrutina que llamó
Instrucciones
Aritméticas.
Estas instrucciones
son las que realiza directamente el 8086/8088
a. Grupo
de adición:
ADD
suma
ADC
suma con acarreo
AAA
ajuste ASCII para la suma
DAA
ajuste decimal para la suma
b. Grupo
de sustracción:
SUB
resta
SBB
resta con acarreo negativo
AAS
ajuste ASCII para la resta
DAS
ajuste decimal para la resta
c. Grupo
de multiplicación:
MUL
multiplicación
IMUL
multiplicación entera
AAM
ajuste ASCII para la multiplicación
d. Grupo
de división:
DIV
división
IDIV
división entera
AAD
ajuste ASCII para la división
e.
Conversiones:
CBW
pasar octeto a palabra
CWD
pasar palabra a doble palabra
NEG
negación
f.
Tratamiento de cadenas:
Permiten
el movimiento, comparación o búsqueda rápida en bloques de datos:
MOVC
transferir carácter de una cadena
MOVW
transferir palabra de una cadena
CMPC
comparar carácter de una cadena
CMPW
comparar palabra de una cadena
SCAC
buscar carácter de una cadena
SCAW
buscar palabra de una cadena
LODC
cargar carácter de una cadena
LODW
cargar palabra de una cadena
STOC
guardar carácter de una cadena
STOW
guardar palabra de una cadena
REP
repetir
CLD
poner a 0 el indicador de dirección
STD
poner a 1 el indicador de dirección
Instrucciones
Lógicas.
Son
operaciones bit a bit que trabajan sobre octetos o palabras completas:
NOT
negación
AND
producto lógico
OR
suma lógica
XOR
suma lógica exclusiva
Instrucciones
de Desplazamiento, Rotación y Adeudos.
Básicamente
permiten multiplicar y dividir por potencias de 2
SHL, SAL
desplazar a la izquierda (desplazamiento aritmético)
SHR
desplazar a la derecha
SAR
desplazamiento aritmético a la derecha
ROL
rotación a la izquierda
ROR
rotación a la derecha
RCL
rotación con acarreo a la izquierda
RCR
rotación con acarreo a la derecha
CLC
borrar acarreo
STC
poner acarreo a 1
Instrucciones
de Pila.
Una de las
funciones de la pila del sistema es la de salvaguardar (conservar) datos (la
otra es la de salvaguardar las direcciones de retorno de las llamadas a
subrutinas):
PUSH
introducir
POP
extraer
PUSHF
introducir indicadores
POPF
extraer indicadores
Instrucciones de
Control del microprocesador.
Hay varias
instrucciones para el control de la CPU, ya sea a ella sola, o en conjunción
con otros procesadores:
NOP
no operación
HLT
parada
WAIT
espera
LOCK
bloquea
ESC
escape
Instrucciones de
Interrupción.
STI
poner a 1 el indicador de interrupción
CLI
borrar el indicador de interrupción
INT
interrupción
INTO
interrupción por capacidad excedida (desbordamiento)
IRET
retorno de interrupción
Comentarios
Publicar un comentario