Académique Documents
Professionnel Documents
Culture Documents
ANTOLOGA DE
LENGUAJES DE
INTERFAZ
CONTENIDO
Lenguajes de Interfaz
Pagina
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
Primera Parte
INTRODUCCION AL LENGUAJE ENSAMBLADOR
Importancia de la programacin en lenguaje ensamblador...
El procesador y sus registros internos.
La memoria principal (RAM).
El concepto de interrupciones.
Llamadas a servicios del sistema.
Modos de direccionamiento.
Proceso de ensamblado y ligado.
Desplegado de mensajes en el monitor.
Segunda Parte
PROGRAMACION BASICA
Ensamblador (y ligador) a utilizar.
Ciclos numricos.
Captura bsica de cadenas.
Comparacin y prueba.
Saltos.
Ciclos condicionales.
Incremento y decremento.
Captura de cadenas con formato.
Instrucciones aritmticas.
Manipulacin de la pila.
Obtencin de cadena con representacin decimal.
Instrucciones lgicas.
Desplazamiento y rotacin.
Obtencin de una cadena con la representacin hexadecimal.
Captura y almacenamiento de datos numricos.
Operaciones bsicas sobre archivos de disco.
Tercera Parte
3 Modularizacin
3.1 Procedimientos.
3.2 Macros.
Cuarta Parte
4
4.1
4.2
4.3
4.4
4.5
4.6
Programacin de dispositivos
El buffer de video en modo texto.
Acceso a discos en lenguaje ensamblador.
Programacin del puerto serial.
Programacin del puerto paralelo.
Programacin hbrida.
Programacin de puerto usb.
Programacin Bsica
Lenguajes de Interfaz
Modularizacin
Programacin de dispositivos
UNIDAD 1
INTRODUCCIN A LOS LENGUAJES DE BAJO NIVEL
Un lenguaje de programacin de caractersticas bajo nivel es aquel en el que sus
instrucciones ejercen un control directo sobre el hardware y estn condicionados
por la estructura fsica de la computadora que lo soporta. El uso de la palabra bajo
en su denominacin no implica que el lenguaje sea inferior a un lenguaje de alto
nivel, si no que se refiere a la reducida abstraccin entre el lenguaje y el hardware.
Por ejemplo, se utiliza este tipo de lenguajes para programar tareas crticas de los
Sistemas Operativos, de aplicaciones en tiempo real o controladores de
dispositivos.
Desventajas:
Arquitectura:
Unidad de control
Registros Internos
Buses internos
Interrupciones
Esquema:
Secuencia de Acciones:
1. Se inicia en una posicin de memoria definida.
2. Se lee el dato de esa posicin y se manda al control.
3. La unidad de control decodifica la instruccin y la ejecuta en seales
adecuadas.
4. Se incrementa el contador del programa (registro que indica a que posicin
se debe dirigir).
5. Se repite proceso desde el punto 2, hasta recibir una seal del exterior.
Tipos:
Registros de datos: operaciones aritmticas lgicas y manipulacin
de datos
Registros de Direcciones : para acceder a posiciones de memoria
Siguiendo esta nomenclatura, es posible referirse a cada uno de los dos bytes,
byte de orden alto o ms significativo y byte de orden bajo o menos significativo,
de cada uno de estos registros. Por ejemplo: AH es el byte ms significativo del
registro AX, mientras que AL es el byte menos significativo.
Un segmento es un rea especial en un programa que inicia en un lmite de un
prrafo, esto es, una localidad regularmente divisible entre 16 o 10 hex.
Un segmento en modo real puede ser de hasta 64k. Se puede tener cualquier
nmero de segmentos, para direccionar un segmento en particular basta cambiar
la direccin en el registro del segmento apropiado. Los tres principales segmentos
son: segmentos de cdigo, de datos y de la pila.
Los registros de segmento son registros de 16 bits que constituyen la
implementacin fsica de la arquitectura segmentada del 8086.
Registros de segmento
IF. Bit de Interrupcin. Indica que una interrupcin externa, como la entrada
desde el teclado, sea procesada o ignorada.
SF. Bit de Signo. Indica el valor del bit ms significativo del registro despus
de una operacin aritmtica o de desplazamiento.
Pueden manejar 64 bits de una vez, por lo que pueden usarse de 1 en 1 en los
Pentium, K6 y superiores. Existen para voltaje estndar (5 voltios) o reducido (3.3
V).
Las SDRAM normales tienen 168 contactos, los primeros mdulos se
comercializaban a 66MHz de velocidad, luego surgieron los de 100 y 133MHz, que
son prcticamente los nicos que se emplean en SDRAM, actualmente slo se
encuentran fcilmente los SDRAM de 133MHz.
SDRAM: Sincronic-RAM. Funciona de manera sincronizada con la velocidad de la
placa (de 50 a 66 MHz), para lo que debe ser rapidsima, de unos 25 a 10 ns. Slo
se presenta en forma de DIMMs de 168 contactos; es usada en los Pentium II de
menos de 350 MHz y en los Celeron.
la direccin correspondiente,
Ensamblador
IBM:
Est
integrado
por
un
ensamblador
un
UNIDAD 2
PROGRAMACIN BASICA
Para comenzar con la programacin en lenguaje ensamblador, es necesario
contar con un conjunto de herramientas de programacin. Este conjunto de
herramientas consta de un editor de texto capaz de producir archivos en cdigo
ASCII, un ensamblador y un enlazador.
Ensamblador
IBM:
Est
integrado
por
un
ensamblador
un
Descripcin
Microsoft Macro Assembler
Microsoft Symbolic Debuger Utility
LINK.EXE
MAPSYM.EXE
CREF.EXE
LIB.EXE
MAKE.EXE
EXEPACK.EXE
EXEMOD.EXE
COUNT.ASM
README.DOC
"11" (tres en
Decimal: 0 1
10
1 si n=1 o 0 si n=0
Segunda cifra:
n*2^1 =
2 si n=1 o 0 si n=0
Tercera cifra:
n*2^2 =
4 si n=1 o 0 si n=0
Cuarta cifra:
n*2^3 =
8 si n=1 o 0 si n=0
etc.,...
Hex Dec
1 --> 1
2 --> 2
3 --> 3
4 --> 4
5 --> 5
6 --> 6
7 --> 7
8 --> 8
9 --> 9
A --> 10
B --> 11
C --> 12
D --> 13
E --> 14
F --> 15
10 --> 16
11 --> 17
Etc,...
Como vemos, este sistema nos planteas bastantes problemas para la conversin,
una calculadora cientfica ser casi imprescindible para realizar esta operacin.
Por que utilizar este sistema? Bien sencillo. Volvamos al byte, y traduzcamos su
valor ms alto, "11111111". Resulta ser 256. Ahora pasemos esta cifra al sistema
hexadecimal, y nos resultar "FF". Obtenemos un nmero ms comprensible que
el binario (difcil de recordar), y ante todo mucho ms compacto, en el que dos
cifras nos representaran cada byte. Podremos adems traducir fcilmente el
binario a hexadecimal con esta tabla; cada cuatro cifras binarias pueden traducirse
al hexadecimal:
Binari
o
Hexadecim
al
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
En hexadecimal sera:
1111 0011 1010 1110
F
2.5 Saltos
Los saltos incondicionales en un programa escrito en lenguaje ensamblador estn
dados por la instruccin jmp, un salto es alterar el flujo de la ejecucin de un
programa enviando el control a la direccin indicada.
2.6 Ciclos condicionales
Un ciclo, conocido tambin como iteracin, es la repeticin de un proceso un cierto
nmero de veces hasta que alguna condicin se cumpla. En estos ciclos se
utilizan los brincos "condicionales" basados en el estado de las banderas. Por
ejemplo la instruccin jnz que salta solamente si el resultado de una operacin es
diferente de cero y la instruccin jz que salta si el resultado de la operacin es
cero.
Hay cuatro operaciones bsicas que se pueden realizar con un nmero binario, y
coinciden con operaciones de la lgica matemtica, con lo que cualquiera que la
haya estudiado tendr cierta ventaja para entenderla. Para explicarlas, llamar al
valor 0 resultado "falso", y al valor 1 "verdadero". Las operaciones son AND, OR,
XOR y NOT
AND
Es un 'y' lgico. Se realiza entre dos cifras binarias confrontando cada cifra con su
correspondiente, y el resultado ser "1" si las dos son verdaderas (si las dos valen
"1), y "0" (falso) en el resto de los casos.
AND
1er.
numero
2do.
numero
Resultado
216
AND
respira debajo del agua), y si los dos son falsos, el resultado es falso (no es cierto
que "El hombre es un ave y respira debajo del agua)
OR
El "o" lgico. El resultado es "verdadero" cuando al menos uno de los factores es
verdadero. O sea, es "1" cuando al menos uno de los dos factores es "1". Sera
como la frase "Voy a buscar el peine o la caja de bombones", donde que uno sea
cierto no significa que el otro no lo sea; es cierta la frase, es verdadera mientras
uno de los trminos sean verdaderos.
Operemos con los nmeros "10100110" y "01101100":
10100110
OR
01101100
-------- 11101110
Como hemos visto, el valor 1 (verdadero) queda en las cifras de las que,
confrontadas, al menos una es verdadera. Slo resulta 0 (falso) si los dos nmeros
enfrentados son 0 (falsos).
XOR
"OR" exclusivo. Se trata de una orden parecida al OR, tan slo que la verdad de
una excluye la de la otra. El resultado, por tanto, es "1" (verdad) cuando uno y slo
uno de los dos nmeros es verdadero (y el otro falso, claro). Sera como la oracin
"O vivo o estoy muerto", para que sea cierta se tiene que dar una de las dos, pero
nunca las dos o ninguna.
10111001
XOR 01011101
--------
11100100
NOT
ejemplo, " No es verdad que tenga ganas de estudiar y de no beber ", negando las
otras dos que en caso contrario seran verdad:
NOT 11100110
--------
00011001
UNIDAD 3
MODULARIZACIN
Bsicamente es crear varias rutinas (funciones o procedimientos) y as segmentar
el cdigo y hacerlo ms entendible para el programador ya sea para
actualizaciones o depuraciones.
3.1 Procedimientos
Modularizacin
3.2 Macros
3.1 Procedimientos
Los procedimientos o rutinas, que son una serie de pasos que se usarn
repetidamente en el programa y en lugar de escribir todo el conjunto de pasos
nicamente se les llama por medio de la instruccin call.
Un procedimiento en ensamblador es aquel que inicie con la palabra Proc y
termine con la palabra ret.
Realmente lo que sucede con el uso de la instruccin call es que se guarda en la
pila el registro IP y se carga la direccin del procedimiento en el mismo registro,
conociendo que IP contiene la localizacin de la siguiente instruccin que
ejecutara la UCP, entonces podemos darnos cuenta que se desva el flujo del
programa hacia la direccin especificada en este registro. Al momento en que se
llega a la palabra ret se saca de la pila el valor de IP con lo que se devuelve el
control al punto del programa donde se invoc al procedimiento.
Es posible llamar a un procedimiento que se encuentre ubicado en otro segmento,
para esto el contenido de CS (que nos indica que segmento se est utilizando) es
empujado tambin en la pila.
La manera ms fcil de construir el programa en mdulos, es dividirlo en dos o
ms partes. Para esto, es necesario que datos, smbolos, y dems valores de un
mdulo sean reconocidos por el otro u otros mdulos. Para este tipo de
declaraciones globales existen dos directivas:
PUBLIC nombre,,,
que hace la variable, etiqueta o smbolo absoluto
disponible para todos los programas.
stack
NAME
main
PUBLIC
exit
EXTRN
print:near
64 DUP(?)
stack
ENDS
data
data
ENDS
code
start:
mov ax,data
mov ds,ax
; en el registro DS
jmp print
exit:
mov ah,4ch
int
code
21h
ENDS
END start
SUBMODULO: TASK.ASM
data
NAME
task
PUBLIC
EXTRN
exit:near
entrada DB
"Entrando a un submodulo....",13,10,"$"
salida
DB
data
ENDS
code
cs:code, ds:data
print:
mov
ah,06h
mov
al,0
mov
cx,0
; de 0,0
mov
dh,24d
mov
dl,79d
mov
bh,0
int
10h
mov
mov
ah,09h
int
21h
mov
int
21h
jmp
code
exit
ENDS
END
3.2 Macros
La declaracin de macros se hace a travs de las directivas MACRO y ENDM. Su
sintaxis es:
Los parmetros son los valores que se substituirn en la macro cada vez que se
haga referencia a sta.
Para la definicin de procedimientos se emplean las directivas PROC y ENDP. Su
sintaxis es:
nombre PROC [distancia]
sentencias
nombre ENDP
La distancia, que puede ser NEAR (default) o FAR permiten indicar el tipo de
acciones a realizar en brincos y llamados a subrutinas. nombre se puede usar
como direccin en llamados o brincos.
UNIDAD 4
PROGRAMACIN DE DISPOSITIVOS
Los dispositivos externos como terminales, impresoras y manejadores de disco, se
comunican con el microprocesador va los puertos de E/S. Un byte de 8 bits o una
palabra de 16 bits puede ser transferido a travs de un puerto de E/S. Dentro del
8086, los datos deben ser enviados siempre (o recibidos) del registro acumulador,
AX. En los casos en que se transfieren nicamente 8 bits, se usa la mitad baja del
acumulador, AL. La direccin de
E/S se especifica como el contenido del registro DX, o como un valor inmediato
contenido en la instruccin. En el caso posterior, solamente los primeros 256
puertos de E/S (direcciones de E/S 00h a FFh) pueden ser accesadas. Se
muestran a continuacin ejemplos de uso de las instrucciones IN y OUT.
RED CONCEPTUAL DE LA UNIDAD
BIBLIOGRAFIA
Abel, P. (1966). Lenguaje Ensamblador y Programacin para PC IBM y compatibles. USA:
Pearson.
KIP R. Irvine, Lenguaje ensamblador para computadoras basadas en Intel,
Pearson Prentice Hall, 5 edicin, 2008.
Luna, C. (2004). Lenguaje Ensamblador. Recuperado el 12 de Septiembre de 2014, de
http://leng-ensam.wikispaces.com/file/view/Antologia+Lenguaje+Ensamblador.pdf
Rincn, L. (2012). Conceptos Bsicos sobre programacin en ensamblador. Recuperado
el 15 de Octubre de 2014, de http://dac.escet.urjc.es/docencia/ETC-ITIG_LADE/teoriacuat1/tema9_conceptos_basicos_ensamblador.pdf