martes, 20 de abril de 2010

INSTRUCCIONES DE LENGUAJE ENSAMBLADOR

1.-¿Instrucciones aritmeticas?

INSTRUCCIONES ARITMÉTICAS Y LÓGICAS
El microprocesador Z-80 dispone de una unidad aritmética-lógica que le permite realizar una serie de operaciones, tanto aritméticas, como lógicas. Las aritméticas incluyen la suma y resta con o sin acarreo, incremento y decremento de un registro, comparaciones, ajuste decimal, complemento y negación. Las lógicas incluyen las operaciones que se realizan con los operadores "AND", "OR" y "XOR".
Antes de adentrarnos en el estudio de las instrucciones concretas, daremos una serie de definiciones útiles:SUMA SIN ACARREO:
Consiste en sumar al contenido del registro "A" un número y obtener el resultado en el registro "A". El indicador de acarreo no se tiene en cuenta para esta operación. Su esquema sería:
A ← A+n




SUMA CON ACARREO:
Exactamente igual que la anterior, pero se suma también el indicador de acarreo del registro "F". De esta forma, sepuede incluir en la suma el acarreo procedente de una suma anterior. Su esquema sería:
A ← A+n+CF
RESTA SIN ACARREO:
Consiste en restar un número del contenido del registro "A", y obtener el resultado en este mismo registro. El indicador de acarreo no interviene en la operación. Se consideran números negativos los superiores a 127 (7Fh) de la forma que se explicó en el capítulo relativo a los sistemas de numeración; es decir, el número 255 (FFh) se considera "-1", el 254 (FEh) se considera "-2" y así sucesivamente, hasta 128 (80h) que se considera "-128". El paso de 127 a 128 o viceversa se indica poniendo a "1" el flag de "overflow" (P/V) del registro "F". Su esquema sería:
A ← A-n
RESTA CON ACARREO:
Igual que el anterior, salvo que también se resta el indicador de acarreo (CF) del registro "F". Su esquema sería:
A ← A-n-CF

INCREMENTO:
Consiste en sumar uno al contenido de un registro que se especifica en la instrucción. Su esquema es:
R ← R+1
Donde "R" representa un registro cualquiera de 8 a 16 bits. Si se trata de un registro doble (de 16 bits) se incrementa el registro de orden bajo (por ejemplo, en el "BC" se incrementa "C"), y si ello hace que este pase a valer "0", se incrementa también el de orden alto.DECREMENTO:
Es la inversa de la anterior, consiste en restar uno al contenido de un registro. Su esquema es:
R ← R-1
Si se trata de un registro doble, se decrementa el de orden bajo y, si esto hace que pase a valer 255 (FFh), se decrementa también el de orden alto.
COMPLEMENTO:
Consiste en realizar un "complemento a 1" del acumulador, es decir, cambiar los "unos" por "ceros" y los "ceros" por "unos".NEGACIÓN:
Consiste en realizar un "complemento a 2" del acumulador, es decir, realizar un "complemento a 1" y, luego, sumarle "1". Lo que se obtiene es el "negativo" del número que teníamos en el acumulador. El efecto es el mismo que si restáramos el acumulador de "cero", es decir:
A ← 0-A
EL FLAG DE ACARREO:
Existen dos instrucciones que afectan al indicador de acarreo del registro "F", es posible ponerlo a "1" o "complementarlo" (ponerlo a "1" si era "0" y viceversa). No se ha previsto una instrucción para poner a "0" el flag de acarreo, dado que esto se puede conseguir haciendo un "AND" o un "OR" del acumulador consigo mismo.

2.-¿Instrucciones de comparacion?

Instrucciones de comparación Son usadas para comparar operandos, afectan al contenido de las banderas.

Estas instrucciones permiten la comparación de valores de datos.
Si la comparación es verdadera dará continuidad lógica y ejecutará la instrucción siguiente de la línea

Los parámetros que necesita cada instrucción en el formato general son:

Expresión: Operandos y definición de la comparación que se desea realizar.

En el formato específico para cada instrucción habría que definir los parámetros
Fuente A: Operando 1.

Fuente B: Operando 2.

Los operandos pueden ser :

ENTEROS: del tipo I, O, S, B,C,R,N,BCD o ASCII.

COMA FLOTANTE: del tipo F

CONSTANTES: Números enteros o en coma flotante

Si se utilizan palabras de los ficheros ASCII o BCD el procesador interpretará los datos como números enteros:

En una misma instrucción de comparación se pueden mezclar números enteros y en coma flotante.

(EQU)

(GEQ)

(GRT)

(LEQ)

(LES)

(MEQ)

(NEQ)


3.-¿Instrucciones de salto?

Pero es digamos que “algo pesado” calcular en que‚ dirección va a estar esa instrucción, con lo que utilizaremos etiquetas. Aquí hay un ejemplo, en el que de paso se repasa un poco:

MOV AX,0CC34h

MOV CL,22h

JMP PALANTE

VUELVE:

CMP BX,AX

JMP FIN

PALANTE: MOV BX,AX

JMP VUELVE

FIN: XOR CX,CX

Empecemos por el salto sin condiciones, con el que podremos cambiar el control a cualquier punto del programa.

Sería como el “Goto” del Basic, símplemente transferir el control a otro punto del programa. La orden es

JMP ( de Jump, salto )

Si record is a estas alturas los registros CS:IP, se podra ver que‚ es lo que hace realmente la instrucción, y no es mas que incrementar o decrementar IP para llegar a la zona del programa a la que queremos transferir el control ( IP es el Offset que indica la zona de memoria que contiene la siguiente instrucción a ejecutar, y CS el segmento )

El formato mas sencillo para el salto sería JMP 03424h, lo que saltaría a esa zona.



4.-¿Instrucciones para el stack?
“Stack” significa pila en inglés, pila en el sentido de “apilar cosas”, no de batería eléctrica. Es una zona de la memoria en donde se guardan cosas. Por ejemplo las variables locales de las subrutinas y funciones, los parámetros, algunos resultados intermedios de cálculos complejos, etc. Todo el manejo del stack lo realiza el compilador de forma automática, así que no hace falta preocuparse salvo cuando se acaba el lugar y el programa genera un error (“stack overflow”). Lo más importante de esta estructura es que en cada momento sólo se tiene acceso a la parte superior del stack (no a las cosas que están apiladas debajo). Entonces cada subrutina puede guardar sus datos en el stack, y las subrutinas a las que llame no los afectarán.La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posición especial que se denomina “la cima de la pila”. El procesador contiene dos instrucciones de su lenguaje máquina para realizar las operaciones de “apilar” y “des apilar” datos de la pila. Los datos que se pueden apilar y des apilar, en el caso del Intel Pentium son siempre de tamaño 4 bytes.



5.-¿Que son los macros y para que sirven?

Una macro (del griego μακρο; significa «grande»), abreviatura de macroinstrucción, es una serie de instrucciones que se almacenan para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecución. Dicho de otra forma, una macroinstrucción es una instrucción compleja, formada por otras instrucciones más sencillas. Esto permite la automatización de tareas repetitivas.

El término no se aplica a una serie de instrucciones escritas en la línea de comandos enlazadas unas con otras por redirección de sus resultados (piping) o para su ejecución consecutiva.

Las macros suelen almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto.

Manipulación de Macros

Tras grabar una macro, se puede ver el código de macro con el Editor de Visual Basic para corregir errores o modificar lo que hace la macro. Por ejemplo, si la macro de ajuste de texto también tiene que aplicar el formato de negrita al texto, se puede grabar otra macro para aplicar el formato de negrita a una celda y, a continuación, copiar las instrucciones de esa macro a la macro de ajuste de texto.

El Editor de Visual Basic es un programa diseñado para que los usuarios principiantes puedan escribir y editar fácilmente código de macro, y proporciona mucha Ayuda en pantalla. No es preciso saber cómo se programa o se utiliza el lenguaje de Visual Basic para realizar cambios sencillos en las macros. El Editor de Visual Basic permite modificar macros, copiarlas de un módulo a otro, copiarlas entre diferentes libros, cambiar el nombre de los módulos que almacenan las macros o cambiar el nombre de las macros.

Con el comando Macro del menú Herramientas, la misma que se vio en el tema anterior, podemos realizar varias acciones más.

Editar abre la macro o el módulo de Visual Basic para poder realizar ediciones del código que se generó. Si se grabó en el Libro de macros personal se tiene que utilizar el comando Mostrar del menú Ventana para aparecer el libro "Personal" que está oculto.

También podemos Eliminar la macro o el procedimiento seleccionado. Con las Opciones se muestra la siguiente caja de diálogo:



6.-¿Que son las interrupciones y a quienes afectan?

Interrupción (también conocida como interrupción hardware o petición de interrupción) es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.

Una interrupción supone la ejecución temporaria de un programa, para pasar a ejecutar una "subrutina de servicio de interrupción", que pertenece al BIOS (Basic Input Output System).

Las interrupciones surgen de las necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. La primera técnica que se empleó fue que el propio procesador se encargara de sondear (polling) el dispositivo cada cierto tiempo para averiguar si tenía pendiente alguna comunicación para él. Este método presentaba el inconveniente de ser muy ineficiente, ya que el procesador constantemente consumía tiempo en realizar todas las instrucciones de sondeo.

El mecanismo de interrupciones fue la solución que permitió al procesador desentenderse de esta problemática, y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitaba. El procesador, en este caso, no sondea a ningún dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de información, una condición de error).

Mecanismo de interrupciones en un PC

Un ordenador PC típico dispone en su placa base de un controlador de interrupciones 8259 de Intel o de un circuito integrado análogo. Este dispositivo electrónico dispone de hasta 16 líneas IRQ, numeradas desde el 00 hasta el 15. En las nuevas placas base este circuito está integrado junto con el resto del chipset y permite hasta 24 interrupciones

Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT.

El uso de las interrupciones nos ayuda en la creación de programas, utilizandolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño.

Este tipo de interrupciones podemos separarlas en dos categorias: las interrupciones del sistema operativo DOS y las interrupciones del BIOS.

La diferencia entre ambas es que las interrupciones del sistema operativo son más fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero tienen la desventaja que, como son parte del hardware son muy específicas y pueden variar dependiendo incluso de la marca del fabricante del circuito.

La elección del tipo de interrupción a utilizar dependerá unicamente de las caracteristicas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS).

Interrupción 21H Propósito: Llamar a diversas funciones del DOS.

Sintaxis:

Int 21H ew

Nota: Cuando trabajamos en MASM es necesario especificar que el valor que estamos utilizando es hexadecimal.

Esta interrupción tiene varias funciones, para accesar a cada una de ellas es necesario que el el registro AH se encuentre el número de función que se requiera al momento de llamar a la interrupción

No hay comentarios:

Publicar un comentario