                              BBS Club 
                         (968) 201819/201262  28k8 
                    Apartado de Correos 2064, 30080 Murcia
                    FidoNet 2:346/401   SubNet 93:3468/101
                   RANet MasterNet VirNet Internet ClubNet


 LECCION 1:
 ----------

      ASM POR AESOFT. (leccin 1).
      ----------------------------

     - CONOCIENDO LA MAQUINA.
     ------------------------

    Hola a todos los seguidores del curso de ensamblador de AESOFT.

    Esta primera leccin va a ser sobre todo terica.
    No se puede programar en ensamblador sin tener un conocimiento ms o
    menos profundo acerca de las peculiaridades de la mquina que vamos a
    programar. Esto es obvio, ya que en ensamblador tenemos un control total
    del sistema, por tanto, cuanto ms sepamos acerca de l, ms provecho
    podremos sacar del mismo, y mejores resultados obtendremos.

    En primer lugar debemos saber con qu estamos trabajando, y no me refiero
    al lenguaje en s, sino al ordenador en cuestin. Tendremos que conocer
    de qu partes consta, como se comunican entre s, etc.
    Esta parte terica es casi imprescindible para poder entender ciertas
    tcnicas de programacin.

    Deciros tambin que vamos a estudiar el Pc en general, no distinguiremos
    entre distintas familias de procesadores (8086,286,386,etc) ya que vamos
    a utilizar ensamblador del 8086. En realidad es el ensamblador que yo
    utilizo. Por tanto, aunque estemos programando sobre un 80386 o un 80486,
    desarrollaremos cdigo ejecutable para la familia 80x86 en general.
    Cualquier exposicin que haga ser vlida para toda la familia Pc.


    Bueno... Despus de este prembulo, pasamos al meollo de la cuestin:

    Un Pc es un ordenador o computador, como ms os guste, compuesto
    principalmente por procesador, chips de memoria, varios chips inteligentes
    o programables, y el bus de datos y direcciones.
    Junto con todo esto, nos encontramos los perifricos como son monitor,
    disqueteras, teclado, etc, que se comunican con el procesador.
    Esto (la comunicacin del procesador con perifricos) se ver ms adelante.

--- El procesador:

    Es el chip que ejecuta los programas. El procesador o CPU,
    lleva a cabo una gran variedad de clculos, comparaciones numricas y
    transferencias de datos como respuesta a las peticiones de los programas
    que estn siendo ejecutados en memoria.

    La CPU controla las operaciones bsicas del ordenador enviando y recibiendo
    seales de control, direcciones de memoria y datos de un lugar a otro del
    ordenador a travs de un grupo de 'sendas electrnicas' llamadas BUS.
    Localizadas a lo largo de este busm estn las puertas de entrada y salida
    (E/S en castellano o I/O en ingls), las cuales conectan a la memoria y a
    los chips de apoyo al bus. Los datos pasan a travs de estas puertas de E/S
    mientras viajan desde y hasta la CPU y otras partes del ordenador.

    Como os deca antes, trataremos el procesador 8086, siendo vlido todo lo
    que digamos para el resto de procesadores de la familia PC.

    El procesador 8086 es un procesador de 16 bits.
    Esto quiere decir entre otras cosas, que el procesador va a manipular
    en una sla operacin datos de hasta 16 bits. Es decir, cuando transfiera
    datos a la memoria o los traiga desde ella, lo podr hacer de 16 bits en
    16 bits. Aqu juega un papel decisivo el BUS de datos, ya que es por l por
    donde circulan los datos en las transferencias. Ms detalles unas cuantas
    lneas ms abajo.

    El procesador cuenta con una serie de registros usados para realizar
    las operaciones de clculo, y como almacenamiento de datos.
    Para que os hagais una idea, un registro del procesador es algo as como
    una zona de memoria dentro del procesador donde se puede almacenar
    informacin, de forma que el acceso a esta informacin es instantneo,
    ya que no hay que utilizar el bus de datos que conecta el procesador con
    la memoria para obtener dichos datos.

    Estos registros se dividen en 5 grupos, segn sus funciones:

    1.- Registros de datos: AX, BX, CX y DX.

      Se usan para clculo y almacenamiento de propsito general. Son utilizados
      por los programas para realizar clculos, as como para transferir datos
      de una posicin de memoria a otra, ya que no se puede hacer de forma
      directa.
      Es decir, que no podemos transferir un dato de la posicin de memoria
      X a la posicin Y sin antes depositar ese dato temporalmente en un
      registro del procesador.

      Estos registros tienen una longitud de 16 bits, pero podemos
      descomponerlos cuando nos interese en un par de registros de 8 bits.
      Quedando de la forma siguiente:

                   AX = AH + AL
      Siendo AX el registro de 16 bits, compuesto por la conjuncin (que no la
      suma) de el registro AH de 8 bits (los 8 bits ms signiicativos o de ms
      a la izquierda) y el registro AL de 8 bits (los 8 bits menos
      significativos o de ms a la derecha).

                   BX = BH + BL
                   CX = CH + CL
                   DX = DH + DL

      Para estos tres registros se aplica lo mismo que para el registro AX.

      Cada uno de estos registros tiene funciones especiales que es interesante
      conocer. Por ejemplo el registro AX es el llamado acumulador, hace que
      muchas operaciones tengan una forma ms corta, ya que lo especifican
      implcitamente. Es decir, que hay operaciones que actan sobre el
      registro AX en particular.
      BX se suele utilizar en muchas instrucciones como registro base, sobre
      todo en transeferencias de datos entre memoria y procesador.
      CX es el registro contador, muchas instrucciones lo utilizan para hacer
      incrementos o decrementos automticos, para realizar bucles, etc.
      DX es el registro de datos, se suele utilizar para operaciones de 32 bits,
      para almacenar los 16 bits (o palabra) ms significativos.



    2.- Registros Indice: SI, DI, BP y SP.
      Se utilizan para acceder a memoria cuando se establece el modo de
      direccionamiento mediante indexacin o con punteros.
      SI y DI indican el ndice fuente y destino respectivamente.
      BP y SP indican el puntero base y el puntero de la pila respectivamenete.
      Ms adelante hablaremos de la pila (que es un tipo de datos estructurado).

      Estos 4 registros son de 16 bits, y no pueden ser utilizados como
      registros dobles de 8 bits.

    3.- Registros de Segmento: CS, DS, SS y ES.
      Estos registros apuntan al principio de un bloque de 64 ks de memoria o
      segmento, de ah lo de la 'S' con la que finalizan todos los registros:
      CS: registro segmento de cdigo. Establece al rea donde se halla el
          programa en ejecucin.
      DS: registro segmento de datos. Especifica la zona donde el programa
          lee y escribe los datos por defecto.
      SS: registro segmento de pila. Especifica el rea donde se encuentra la
          pila del sistema.
      ES: registro segmento extra. Se utiliza como una extensin del segmento
          de datos. Es decir, indica otro rea de datos aparte del especificado
          por DS.

    4.- Puntero de instruccin: IP.
      Su longitud es de 16 bits como el resto de registros.
      Indica la direccin de la siguiente instruccin a ejecutar, y su valor es
      ajustado durante la ejecucin de la instruccin en curso.
      Esta direccin est en el rea de 64 ks de direcciones especificado
      por CS.

      CS e IP en conjuncin conforman la direccin fsica real de la siguiente
      instruccin a ejecutar.
      Ms adelante detallaremos este asunto.

    5.- Registro FLAGS. O banderas de estado.

      Su longitud es de 16 bits. Cada uno de estos bits contiene cierta
      informacin booleano (verdadero o falso). Segn el valor de cada uno de
      estos bits sea 1(verdadero)  0(falso), informar del estado de alguna
      situacin en particular.

      Dentro del registro de FLAGS hay 7 bits que no se utilizan. Los nombres
      de los utilizados son: Of, Df, If, Tf, Sf, Zf, Af, Pf y Cf.

      Estos bits se clasifican en dos grupos:
      - Flags de estado (Cf, Af, Of, Zf, Pf y Sf): muestran el estado del
      procesador.
      - Flags de control ( Df, If, Tf): determinan como el procesador responder
      a determinadas situaciones. El programador manipular estos bits para
      controlar el modo de ejecucin de algunas instrucciones.

      A continuacin se muestra el significado de cada uno de los flags:

      Cf: Bit de Carry (acarreo), se activa (se pone a 1) si se produce acarreo
          en una operacin aritmtica.
      Pf: Bit de paridad, se activa si el resultado de una operacin tiene
          paridad par, es decir, si el resultado tiene un n par de unos.
      Af: Bit de carry auxiliar, se activa si una operacin aritmtica produce
          acarreo de peso 16.
      Zf: Bit de cero, se activa si una operacin produce 0 como resultado.
          Suele ser el ms utilizado(ms consultado) por los programadores,
          por lo menos por m (AESOFT). Se utiliza para comparaciones de datos
          y para otras muchas cosas como ciertos bucles,etc.
      Sf: Bit de signo, se activa si el bit ms significativo de un resultado
          es 1. Por convencin cuando se opera con nmeros negativos, se
          utiliza el bit de mayor peso para indicar el signo: si el bit es cero,
          entonces se trata de un nmero positivo, si es 1, se trata de nmero
          negativo. Ya veremos todo esto ms adelante.
      Tf: Bit trap o desvo. Si Tf=1, el procesador ejecuta las instrucciones
          una a una bajo control del usuario. Se pone a 1 este bit para realizar
          depuraciones del cdigo que se est ejecutando. De esta forma se puede
          seguir el flujo del programa.
      If: Bit de interrupcin, si vale 1, las interrupciones estn permitidas,
          y si vale 0, no.
      Df: Se usa en las instrucciones que manipulan cadenas de bytes.
          Segn coloque el programador este bit, a '0' o a '1', las cadenas
          de bytes sern tratadas en sentido de direcciones crecientes o
          decrecientes.
      Of: Bit de overflow, indica desbordamiento en una operacin aritmtica.


--- La Memoria:
    Los chips de memoria se dedican meramente a almacenar la informacin
    hasta que se necesita.
    El nmero y la capacidad de almacenamiento de estos chips que hay dentro
    del ordenador determinan la cantidad de memoria que podremos utilizar
    para los programas y los datos.
    Normalmente la memoria siempre se ha dividido en dos tipos principales,
    como son la RAM y la ROM.
    De todos ser conocida esta distincin y sus caratersticas, as que no
    entro en el tema. Si alguien tiene alguna duda, que lo diga.
    Pues bien, en principio, nosotros vamos a trabajar con el rango de memoria
    0 - 1048576, es decir, vamos a trabajar con el primer Mb(megabyte).
    Existen tcnicas para tratar la memoria que hay en direcciones superiores
    a stas, pero eso ya se ver en otro momento.

    Pues bien, en ese Megabyte inicial, tenemos tanto RAM como ROM.
    La memoria RAM que es la que usamos para almacenar tanto programas como
    datos empieza en las direcciones bajas y llega hasta el inicio de la ROM.
    La ROM, evidentemente est situada en las posiciones altas de memoria, y
    es ah donde se almacenan las rutinas ms bsicas del ordenador, como
    las rutinas de acceso a discos, pantalla, etc.

    Un tema muy importante en el mundo del PC es la denominada barrera de los
    640 Ks que seguro habreis oido hablar.
    Esto quiere decir que aunque tengamos instalados 8 Megabytes en unuestro
    ordenador, slo podremos ejecutar nuestro programa en las primeras 640 ks.

    Para poder acceder a los 7 Megabytes restantes debemos utilizar funciones
    especiales de manejo de memoria extendida, expandida, etc.
    Pero bueno, eso no nos interesa ahora en absoluto.
    Os remito al fichero MEMO.ZIP que podreis encontrar en el BBS, en el cual,
    un usuario (Pc-adicto) nos ofrece una exposicin ms amplia acerca de la
    memoria del Pc.


--- Chips inteligentes:
    Se trata de chips de apoyo, de los que se sirve el procesador o el usuario.
    Estos chips existen debido a que el procesador no puede controlar todo el
    ordenador sin ayuda. Al delegar ciertas funciones de control a otros chips,
    le queda ms tiempo libre para atender a su propio trabajo.
    Estos chips de apoyo pueden ser responsables de procesos tales como el
    flujo de informacin a travs de la circuitera interna(como el controlador
    de interrupciones y el controlador DMA) y controlar el flujo de informacin
    de uno a otro dispositivo(como un monitor o una unidad de disco) concectado
    al ordenador.
    En resumen, estos chips estn ah para librar de trabajo al procesador.


--- Bus de direcciones:
    El bus de direcciones del Pc utiliza 20 lneas de seal para transmitir
    las direcciones de memoria y de los dispositivos conectados al bus.
    Como a travs de cada una de esas 20 lineas pueden viajar dos posibles
    valores(0  1, es decir tenson alta o tensin baja), el ordenador puede
    especificar 2^20 (2 elevado a 20) direcciones. Es decir puede direccionar
    1 Megabyte. Estamos hablando del 8086 con un bus de direcciones de 20 bits.
    Modelos superiores como el 80386 o el pentium direccionan muchsimo ms,
    tanto como les permite su bus: 32 bits en el caso del 386 y 64 bits en el
    caso del pentium. Es decir, 2^32 y 2^64 direcciones respectivamente.


--- Bus de datos:
    El bus de datos trabaja con el bus de direcciones para transportar los datos
    a travs del ordenador. Este bus de datos es de 16 bits, al igual que el
    tamao de registro.  Aunque no tiene que coincidir, como sucede con el
    procesador 8088, el cual tiene un tamao de registro de 16 bits y un bus
    de datos de 8 bits. Esto es as por simple economa. Por ahorrar costes.
    Claro que tiene su parte mala, y es que es ms lento al realizar
    transferencias de datos.

---------------

    Bueno, bueno, bueno... Todo esto que parece muy rollero es muy importante.
    No es lo mismo programar sabiendo con qu se trabaja que programar a ciegas.
    Muchas veces es imprescindible recrear grficamente ciertas instrucciones,
    para darse cuenta de un fallo en el programa.

    Venga, ahora quiero que me conteis dudas que teneis, aclaraciones, etc.
    Que la prxima leccin ya es ms prctica. Pero hasta que no se tenga
    claro cmo funciona el ordenador, no se puede hacer que funcione
    correctamente.

    Lo dicho, espero mensajes vuestros antes de la siguiente leccin.
    Un saludo de AESOFT.
