PROGRAMACION BASICA UNIDAD 2
2.1 ENSANBLADOR (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.
VIDEO
2.2 CICLOS NUMERICOS
Como en cualquier otro lenguaje de programación, hay ocasiones en las que es necesario hacer que el programa no siga una secuencia lineal, sino que repita varias veces una misma instrucción o bloque de instrucciones antes de continuar con el resto del programa, es para esto que se utilizan los ciclos.
Existen 5 tipos de ciclos predefinidos en ensamblador, aunque también se pueden crear ciclos personalizados por medio de instrucciones de salto las cuales se verán en la sección 2.6 de este manual.
Los ciclos predefinidos de ensamblador son los siguientes:
LOOP:
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo.
Ejemplo:
- mov cx,25 : Número de veces que se repetirá el ciclo, en este caso 25.
- ciclo: Etiqueta que se utilizará como referencia para el ciclo loop.
- int 21h: Instrucción contenida dentro del ciclo (puede contener más de una instrucción).
- loop: Ciclo loop que transferirá el control a la lÃnea de la etiqueta ciclo en caso de que CX no sea cero.
LOOPE:
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero y ZF es diferente de uno ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo.
Ejemplo:
- ciclo: Etiqueta que se utilizará como referencia para el ciclo loope.
- int 21h: Instrucción contenida dentro del ciclo (puede contener más de una instrucción).
- loope: Ciclo loope que transferirá el control a la lÃnea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea igual a uno.
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero y ZF es diferente de cero ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo, esta es la operación contraria a loope.
Ejemplo:
- ciclo: Etiqueta que se utilizará como referencia para el ciclo loopne.
- int 21h: Instrucción contenida dentro del ciclo (puede contener más de una instrucción).
- loopne: Ciclo loopne que transferirá el control a la lÃnea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea igual a cero.
LOOPZ:
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero y ZF es diferente de uno ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo.
Ejemplo:
- ciclo: Etiqueta que se utilizará como referencia para el ciclo loopz.
- int 21h: Instrucción contenida dentro del ciclo (puede contener más de una instrucción).
- loopz: Ciclo loopz que transferirá el control a la lÃnea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea igual a uno.
LOOPNZ:
Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero y ZF es diferente de cero ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo, esta es la operación contraria a loopz.
Ejemplo:
- ciclo: Etiqueta que se utilizará como referencia para el ciclo loopnz.
- int 21h: Instrucción contenida dentro del ciclo.
- loopnz: Ciclo loopnz que transferirá el control a la lÃnea de la etiqueta ciclo en caso de que CX no sea cero y ZF sea igual a cero.

VIDEOS
2.3 CAPTURA BASICA DE CADENAS
Dentro del lenguaje ensamblador no existe el tipo de dato cadena (string en otros lenguajes), por lo que para utilizarla es necesario tratar a las cadenas como un conjunto de caracteres reservados bajo el nombre de una sola variable.
El lenguaje ensamblador cuenta con instrucciones que por su naturaleza sirven para el manejo de cadenas, estas son:
MOVSB:
Mueve un byte desde una localidad de memoria hasta otra.
MOVSW:
Mueve una palabra desde una localidad de memoria hasta otra.
LODSB:
Carga en la parte baja del registro acumulador (AL) el valor de la localidad de memoria determinada por DS:SI.
LODSW:
Carga en el registro acumulador (AX) el valor de la localidad de memoria determinada por DS:SI.
Ejemplo:

VIDEO
2.4 COMPARACION Y PRUEBA
La comparación y prueba son instrucciones especiales con las que cuenta el microprocesador, estas son CMP y TEST respectivamente.
Comparación (CMP):
Esta instrucción compara los dos valores que se le den como parámetros y modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF) según sea necesario.
Ejemplo:
CMP ah,10h: Compara el valor almacenado en el registro ah con el valor 10 hexadecimal.
Prueba (TEST):
Verifica que los valores que se le introduzcan como parámetros sean iguales relizando la operación lógica AND, no almacena ningún resultado pero modifica banderas según sea necesario.
Ejemplo:
TEST al, 1: Verifica que el valor almacenado en al sea 1.

Comentarios
Publicar un comentario