LENGUAJES DE INTERFAZ UNIDAD I

INTRODUCCION AL LENGUAJE ENSAMBLADOR

LENGUAJES DE INTERFAZ UNIDAD II

PROGRAMACION BASICA

LENGUAJES DE INTERFAS

PROGRAMACION DE DISPOSITIVOS

jueves, 14 de mayo de 2015

capturas de formato

Formato de instrucciones para lenguaje ensamblador: Nombre_procedimiento PROC Instrucción operando destino , operando fuente Nombre_procedimiento ENDP END Directivas de segmento ; comentarios MOV Transfiere datos entre celdas de memoria y registros. Sintaxis: MOV Destino,Fuente Ejemplo: MOV AX,0006h MOV DX,AX MOVS (MOVSB) (MOVSW) Mueve cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI. Sintaxis: MOVS Este comando no necesita parametros ya que toma como dirección fuente el contenido del registro SI y como destino el contenido de DI. Ejemplo: MOV SI, OFFSET VARIABLE1 MOV DI, OFFSET VARIABLE2 MOVS Primero se inicializan los valores de SI y DI con las direcciones de las variables VARIABLE1 y VARIABLE2 respectivamente, despues al ejecutar MOVS se copia el contenido de VARIABLE1 a VARIABLE2. Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el segundo una palabra. LODS (LODSB) (LODSW) Carga cadenas de un byte o palabra al acumulador. Sintaxis: LODS Toma la cadena que se encuentre en la dirección especificada por SI, la carga al registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la transferencia es de bytes o 2 si la transferencia es de palabras. Ejemplo: MOV SI, OFFSET VARABLE1 LODS La primer linea carga la dirección de VARIABLE1 en SI y la segunda linea lleva el contenido de esa localidad al registro AL. Los comandos LODSB y LODSW se utilizan de la misma forma, el primero carga un byte y el segundo una palabra (utiliza el registro completo AX). LAHF Transfiere al registro AH el contenido de las banderas Sintaxis: LAHF Se utiliza para verificar el estado de las banderas durante la ejecución de un programa. Las banderas quedan en el siguiente orden dentro del registro: SF ZF __ AF __ PF __ CF LEA Carga la dirección del operando fuente. Sintaxis: LEA destino, fuente El operando fuente debe estar ubicado en memoria, y se coloca su desplazamiento en el registro índice o apuntador especificado en destino. Ejemplo: MOV SI, OFFSET VAR1 Que es equivalente a: LEA SI, VAR1 POP Recupera un dato de la pila Sintaxis: POP destino Transfiere el último valor almacenado en la pila al operando destino y despues incrementa en dos el registro SP. Este incremento se debe a que la pila va creciendo desde la dirección mas alta de memoria del segmento hacia la mas baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en dos el registro SP realmente se le esta restando dos al tamaño real de la pila. POPF Extrae las banderas almacenadas en la pila. Sintaxis: POPF Transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas. La forma de transferencia es la siguiente: BIT BANDERA 0 CF ___ 2 PF ___ 4 AF ___ 6 ZF 7 SF 8 TF 9 IF 10 DF 11 OF Estas localizaciones son las mismas para el comando PUSHF Una vez hecha la transferencia se incrementa en 2 el registro SP disminuyendo así el tamaño de la pila. PUSH Coloca una palabra en la pila. Sintaxis: PUSH fuente La instrucción PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva dirección resultante en el registro recién modificado. El decremento en la dirección se debe a que al agregar valores a la pila ésta crece de la dirección mayor a la dirección menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que hacemos es aumentar el tamaño de la pila en dos bytes, que es la única cantidad de información que puede manejar la pila en cada entrada y salida de datos. PUSHF Coloca el valor de las banderas en la pila Sintaxis: PUSHF Decrementa en 2 el valor del registro SP y luego se transfiere el contenido del registro de banderas a la pila, en la dirección indicada por SP. Las banderas quedan almacenadas en memoria en los mismos bits indicados en el comando POPF

Incremento y decremento

 Incremento y decremento Son las instrucciones más básicas a la hora de hacer operaciones con registros: INC incrementa el valor de un registro, o de cualquier posición en memoria, en una unidad, y DEC lo decrementa. Instrucción INC INC AX Incrementa en uno el valor de AX IN WORD PTR Incrementa la palabra situada en CS. Instrucción DEC DEC AX Decremento AX, le resta uno. DEC WORD PTR Decrementa la palabra situada en CS.

Ciclos condicionales

Ciclos condicionales Sintaxis: LOOP etiqueta La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1. Instrucción LOOPE Propósito: Generar un ciclo en el programa considerando el estado de ZF Sintaxis: LOOPE etiqueta Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo del programa se transfiere a la etiqueta indicada como operando. Instrucción LOOPNE Propósito: Generar un ciclo en el programa, considerando el estado de ZF Sintaxis: LOOPNE etiqueta Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0.

saltos

Saltos La mayoría de los programas constan de varios ciclos en los que una serie de pasos se repite hasta alcanzar un requisito específico y varias pruebas para determinar qué acción se realiza de entre varias posibles. Una instrucción usada comúnmente para la transferencia de control es la instrucción JMP (jump, salto, bifurcación). Un salto es incondicional, ya que la operación transfiere el control bajo cualquier circunstancia. También JMP vacía el resultado de la instrucción previamente procesada; por lo que, un programa con muchas operaciones de salto puede perder velocidad de procesamiento. La instrucción LOOP, requiere un valor inicial en el registro CX. En cada iteración, LOOP de forma automática disminuye 1 de CX. Si el valor en el CX es cero, el control pasa a la instrucción que sigue; si el valor en el CX no es cero, el control pasa a la dirección del operando. La distancia debe ser un salto corto, desde -128 hasta +127 bytes. Para una operación que exceda este límite, el ensamblador envía un mensaje como "salto relativo fuera de rango".

Comparación y prueba

2.4 Comparación y prueba La instrucción CMP pro lo común es utilizada para comparar dos campos de datos, uno de los cuales están contenidos en un registro. El formato general para CMP es:| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato} | Observe que la operación compara el primer operando con el segundo; por ejemplo, el valor del primer operando es mayor que, igual o menor que el valor del segundo operando? La instrucción CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de dirección, CMPS incrementa o disminuye también losregistros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La operación establece las banderas AF, CF, OF, PF, SF y ZF. Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de cualquier longitud. Pero observe que CMPS proporciona una comparación alfanumérica, esto es, una comparación de acuerdo a con los valores ASCII. Considere la comparación de dos cadenas que contienen JEAN y JOAN Algunas derivaciones de CMPS son las siguientes: · CMPSB. Compara bytes · CMPSD. Compara palabras dobles · CMPSW. Compara palabras

saltos y ciclos

Saltos, ciclos y procedimientos
Los saltos incondicionales en un programa escrito en lenguaje ensamblador están dados por la instrucción jmp, un salto es alterar el flujo de la ejecución de un programa enviando el control a la dirección indicada.
Un ciclo, conocido también como iteración, es la repetición de un proceso un cierto número de veces hasta que alguna condición se cumpla. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instrucción jnz que salta solamente si el resultado de una operación es diferente de cero y la instrucción jz que salta si el resultado de la operación es cero.
Por último tenemos los procedimientos o rutinas, que son una serie de pasos que se usarán repetidamente en el programa y en lugar de escribir todo el conjunto de pasos unicamente se les llama por medio de la instrucción 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 instrucción call es que se guarda en la pila el registro IP y se carga la dirección del procedimiento en el mismo registro, conociendo que IP contiene la localización de la siguiente instrucción que ejecutara la UCP, entonces podemos darnos cuenta que se desvía el flujo del programa hacia la dirección 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 ésto el contenido de CS (que nos indica que segmento se está utilizando) es empujado también en la pila.

Ensamblador (y ligador) a utilizar.

Resumen del 2.1. Ensamblador (y ligador) a utilizar.

Ensamblador.El lenguaje ensamblador es un lenguaje de bajo nivel que se comunica directamentecon el hardware de la máquina.El termino ensamblador se refiere a un tipo de programa informático que se encarga detraducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto quecontiene código máquina, ejecutable directamente por el microprocesador.El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de loscódigos nemotécnicos que aparecen por su código de operación correspondiente ensistema binario para la plataforma que se eligió como destino en las opcionesespecificas del ensamblador.Características
 ˆ El código escrito en lenguaje ensamblador posee una cierta dificultad de serentendido ya que su estructura se acerca al lenguaje máquina, es decir, es unlenguaje de bajo nivel.
 ˆ El lenguaje ensamblador es difícilmente portable, es decir, un código escritopara un microprocesador, puede necesitar ser modificado, para poder ser usadoen otra máquina distinta. Al cambiar a una máquina con arquitectura diferente,generalmente es necesario reescribirlo completamente.
 ˆ Con el lenguaje ensamblador se tiene un control muy preciso de las tareasrealizadas por un microprocesador por lo que se pueden crear segmentos decódigo difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, yaque, entre otras cosas, en el lenguaje ensamblador se dispone de instruccionesdel CPU que generalmente no están disponibles en los lenguajes de alto nivel.Podemos distinguir entre dos tipos de ensambladores:
 Ensambladores modulares 32 bits o de alto nivel, son ensambladores queaparecieron como respuesta a una nueva arquitectura de procesadores de 32bits, muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar conprogramas con estructuras d 16 bits.

 Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamenteen ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas