ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

LENGUAJE ENSAMBLADOR PARA PC

luanocbuInforme27 de Diciembre de 2015

2.774 Palabras (12 Páginas)273 Visitas

Página 1 de 12

LENGUAJE ENSAMBLADOR PARA PC

La memoria en un computador se compone de  números. La memoria del computador almacena toda la información en números binarios, en otras palabras en base dos y no en el sistema de numeración común (decimal).

La diferencia entre un numero decimal y un número binario es que un número decimal puede tener los dígitos desde el 0 al 9 y un número binario solo del 0 al 1.

También existe la numeración hexadecimal que se pueden usar como una representación resumida de los números binarios

Dentro de la organización del computador se puede diferencia los siguientes componentes: la memoria, la cpu.

  • Memoria: La unidad básica es el byte donde se sobreentiende que si un computador cuenta con 32Megabytes de memoria podría almacenar aproximadamente 32 millones de bytes de información, donde cada byte esta etiquetado por un número único conocido como su dirección.
  • CPU: La Unidad Central de Procesamiento es el dispositivo físico que ejecuta las instrucciones, por lo general son muy simples pero a su vez pueden requerir datos que estén en un lugar especial de almacenamiento de la CPU llamados registros. La ventaja del CPU es que puede acceder a datos de los registros de manera más rápida en la memoria, pero es de manera limitada.

En general cada tipo de CPU tiene su propio y único lenguaje de máquina.

Es importante saber acerca del Lenguaje de máquina ya que cada tipo de CPU entiende su propio lenguaje de máquina. Las instrucciones en lenguaje de máquina son números almacenados como bytes en memoria. Cada instrucción tiene su propio y único código llamado código de operación u  opcode.

El lenguaje de maquina es muy difícil de programar directamente. Descifrar el significado de las instrucciones codificadas numéricamente es tedioso para los humanos.

Cabe decir lo siguiente del lenguaje ensamblador:

Un programa escrito en lenguaje ensamblador es almacenado como texto (tal como programas de alto nivel). Cada instrucción representa exactamente una instrucción de la máquina, por ejemplo la palabra add es el nemónico para la instrucción de suma.

Un ensamblador es un programa que lee un archivo de texto con instrucciones de ensamblador y convierte el ensamblador en código de máquina.

Se debe tener en claro acerca de los operandos de las instrucciones

Los códigos de las instrucciones de máquina tienen una variedad de tipos y operandos; sin embargo, en general cada instrucción en si misma tiene un número fijo de operandos (0 a 3). Los operandos pueden tener los siguientes tipos:

  • Registro: Estos operandos se refieren directamente al contenido de los registros de la CPU.

  • Memoria: Estos se refieren a los datos en la memoria. La dirección de los datos puede ser una constante fija en la instrucción o puede ser calculada usando los valores de los registros. Las direcciones son siempre desplazamientos relativos al comienzo de un segmento.
  • Inmediato: Estos son valores fijos que están listados en la instrucción en sí misma. Ellos son almacenados en la instrucción en si misma (en el segmento de código), no en el segmento de datos.
  • Implicado: Estos operandos no son mostrados explícitamente.

Se sabe que una directiva es un artificio del ensamblador no de la CPU y se utilizan generalmente para decirle al ensamblador que haga alguna cosa o informarle al ensamblador de algo. Se utilizan por lo general para definir constantes, definir memoria para almacenar datos, etc.

Como ejemplo tenemos a las directiva equ que se puede usar para definir un símbolo.

También tenemos las directivas de datos, las cuales son usadas en segmentos de datos para definir espacios de memoria.

Cabe recalcar acerca de las entradas y salidas las cuales son acciones muy dependientes del sistema. Lo cual involucra al hardware del sistema.

OPERACIONES CON BITS:

Operaciones de desplazamientos

El lenguaje ensamblador le permite al programador manipular bits individuales de los datos. Una operación común es llamada un desplazamiento, donde tenemos;

El desplazamiento lógico, es el tipo más simple de desplazamientos debido a que desplaza de una manera muy directa.                                                                            Las más comunes son las multiplicaciones y divisiones rápidas.

Actualmente, los desplazamientos lógicos se pueden usar para multiplicar y dividir valores sin signo. Ellos no funcionan para valores con signo. Considere el valor bytes FFFF (−1).

Los desplazamientos aritmeticos, estos desplazamientos están diseñados para permitir que números con signo se puedan multiplicar y dividir rápidamente por potencias de 2.

Los desplazamientos de rotación, trabajan como los desplazamientos lógicos excepto que los bits perdidos en un extremo del dato se desplazan al otro lado. Así, el dato es tratado como si fuera una estructura circular

La instrucción TEST

Realiza una operación AND, pero no almacena el resultado.

Usos de las operaciones con bits

Las operaciones con bits son muy ´utiles para manipular bits individuales sin modificar los otros bits.

Evitando saltos condicionales

Una manera de evitar este problema, es evitar usar ramificaciones condicionales cuando es posible

Las instrucciones SETxx suministran una manera para suprimir ramificaciones en ciertos casos. Esta instrucción fija el valor de un registro byte o un lugar de memoria a cero, basado en el estudio del registro FLAGS en que los bytes individuales se almacenan en memoria (no bits) de un elemento multibyte se almacena en memoria. Big endian es el método más directo. Almacena el byte más significativo primero, luego el siguiente byte en peso y así sucesivamente.

Debemos tener cuidado con con Little and Big Endian debido que para la programación típica, lo endian de la CPU no es importante. La mayoría de las veces esto es importante cuando se transfiere datos binarios entre sistemas de cómputo diferente. Esto es ocurre normalmente usando un medio de datos físico (como un disco) o una red. Ya que el código ASCII es de 1 byte la característica endian no le es importante

Contando bits

Esta sección utiliza métodos como un ejercicio de usar las operaciones de bits

Método uno:

[pic 1]

En cada iteración el bucle, se apaga un bit del dato. Cuando todos los bits se han apagado (cuando el dato es cero), el bucle finaliza. El número de iteraciones requerido para hacer el dato cero es igual al número de bits en el valor original del dato. La línea 6 es donde se apaga un bit del dato.

Método dos

Para contar bits se puede usar también la búsqueda en una tabla de una palabra doble arbitraria. La aproximación directa sería pre calcular el número de bits para cada palabra doble y almacenar esto en un arreglo.

Método tres

Hay otro método ingenioso de contar bits que están en un dato. Este método literalmente añade los unos y ceros del dato unido. Esta suma debe ser igual al número de unos en el dato

SUBPROGRAMAS:

Un subprograma es una unidad independiente de código que puede ser usada desde diferentes partes de un programa. En otras palabras, un subprograma es como una función en C.

El código que llama en subprograma y el subprograma en sí mismo deben estar de acuerdo en cómo se pasan los datos entre ellos. Estas reglas de cómo se pasarán el dato son llamadas: convenciones de llamado estándares en C.

El direccionamiento indirecto: Le permite a los registros comportarse como variables apuntador y para indicarlo se usan los paréntesis cuadrados ([]).

Una pila: es una lista LIFO (Last In Firist Out). La pila es un arca de memoria que está organizada de esta manera. La instrucción PUSH añade datos a la pila y la instrucción POP quita datos. El dato extraído siempre es el  último dato insertado (esta es la razón por la cual es llamado FIFO.

El registro de segmento SS especifica el segmento de datos que contiene la pila. (Normalmente este es el mismo segmento de datos). El registro ESP contiene la dirección del dato que sería quitado de la pila. Los datos sólo se pueden añadir en unidades de palabras dobles. Esto es, que no se puede insertar un solo byte en la pila.

El 80x86 también suministra la instrucción PSHA que empuja el valor de los registros: EAX, EBX, ECX, EDX, ESI, EOI y EBP ) ahora si se desea devolver todos estos registros a su valor anterior se usa la instrucción POPA.

El 80X86 suministra dos instrucciones que usa la pila para hacer llamados a subprogramas rápido y fácil. La instrucción CALL hace un salto incondicional a un subprograma y empuja en la pila la dirección de la próxima instrucción. La instrucción RET saca una dirección de la pila y salta a esta dirección. Cuando se usa esta instrucción, es muy importante que uno administre la pila correctamente ya que la instrucción RET debe extraer de la pila el número correcto.

...

Descargar como (para miembros actualizados) txt (17 Kb) pdf (144 Kb) docx (27 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com