Arquitectura de Computadores

Informática. Programación en ensamblador. Ensambladores y compiladores. Lenguaje ensamblador. Identificadores. Directivas. Ejecución de un programa

  • Enviado por: Ponce
  • Idioma: castellano
  • País: Costa Rica Costa Rica
  • 9 páginas
publicidad
publicidad

ARQUITECTURA DE COMPUTADORES II

Resumen del Capítulo IV

ENSAMBLADORES Y COMPILADORES:

Existen dos clases de lenguajes de programación: de alto nivel y de bajo nivel.

Los programadores que escriben en un lenguaje de alto nivel codifican comandos poderosos cada uno de los cuales puede generar muchas instrucciones en lenguaje máquina. Los programadores que escriben en lenguaje ensamblador codifican instrucciones simbólicas, cada una de las cuales genera una instrucción en lenguaje máquina. Algunas de las ventajas de codificar en un lenguaje máquina son:

Proporciona más control sobre el manejo particular de los requerimientos de hardware.

Genera módulos ejecutables más pequeños y más compactos.

Con mayor probabilidad tiene una ejecución más rápida.

Un lenguaje de alto nivel utiliza un compilador para traducir el código fuente a lenguaje máquina. Mientras un lenguaje de bajo nivel utiliza un ensamblador para dicha traducción. Un programa enlazador completa la operación para ambos niveles.

COMENTARIOS EN LENGUAJE ENSAMBLADOR:

El uso de comentarios de un programa mejora su claridad, en especial en lenguaje ensamblador. Un comentario empieza con punto y coma (;) y, a su derecha el comentario que sea prudente.

PALABRAS RESERVADAS:

Existen palabras reservadas para sus propios propósitos y son usadas sólo bajo condiciones especiales. Por categorías las palabras reservadas incluyen:

Instrucciones : operaciones que la computadora puede ejecutar como ADD y MOV

Directivas: se emplean para proporcionar comandos al ensamblador (END Y SEGMENT).

Operadores: se utilizan en expresiones como FAR y SIZE.

Símbolos Predefinidos: que regresan información a su programa como @Data y @Model.

IDENTIFICADORES:

Un identificador es un nombre que se aplica a elementos del programa. Los dos tipos de identificadores que existen son los nombres, que se refiere a la dirección de un elemento de dato y las etiquetas, que se refiere a la dirección de una instrucción.

Un identificador puede utilizar letras del alfabeto, signo de interrogación, subrayado, signo de pesos, arroba, punto y dígitos; los dos últimos no pueden ser el primer dígito. La longitud máxima de un identificador es 31 caracteres.

INSTRUCCIONES:

Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados son:

Instrucciones: que el ensamblador traduce a código objeto, tal como MOV.

Directivas: que indican al ensamblador que realice una acción específica, como definir un elemento de dato.

El formato general de un enunciado, en donde los corchetes indican una entrada opcional:

Identificador:

El término nombre se aplica al nombre de un elemento o directiva definida, mientras que el término etiqueta se aplica al nombre de una instrucción.

Operación:

La operación debe ser codificada, es con mayor frecuencia usada para la definición de áreas de datos y codificación de instrucciones. Una operación como DB o DW define un campo, área de trabajo o constante. Para una instrucción, una operación como MOV o ADD indica una acción a realizar.

Operando:

El operando si existe, proporciona información para la operación que actúa sobre él. Para un elemento de datos, el operando identifica su valor inicial.

NOMBRE

OPERACIÓN

OPERANDO

COMENTARIO

COUNTER

DB

0

;Define un byte [DB] con el valor 0

Para una instrucción, un operando indica en donde realizar la acción.

OPERACIÓN

OPERANDO

COMENTARIO

OPERANDO

RET

; REGRESA

NINGUNO

INC

CX

;Incrementa el registro CX.

UNO

ADD

AX,12

;Suma el 12 al registro AX

DOS

DIRECTIVAS:

Las directivas son diferentes enunciados que permiten controlar la manera en que un programa ensambla y lista. Estos actúan sólo durante el ensamblado de un programa y no generan código ejecutable de máquina.

Directivas para listar:

Las directivas PAGE y TITLE ayudan a controlar el formato de un listado de un programa en ensamblador.

PAGE: al inicio de un programa, la directiva PAGE designa el número máximo de líneas para listar en una página y el número máximo de caracteres en una línea. Por ejemplo 60 líneas por página y 132 caracteres por línea:

PAGE 60, 132

TITLE: Se emplea al inicio de un programa para hacer un título al programa.

Se recomienda después del título poner un comentario después del título establecido.

SEGMENT: Un programa ensamblado en formato .EXE consiste en uno o más segmentos. Un segmento de datos define los elementos de datos y un segmento de código proporciona

Un segmento de pila define el almacén de la pila, un segmento de datos define los elementos de datos y un segmento de código proporciona un código ejecutable. El enunciado SEGMENT define el inicio de un segmento. El operando de un enunciado SEGEMENT puede tener tres tipos de opciones: alineación, combinar y clase.

Tipo alineación: la entrada alineación indica el límite en el que inicia el segmento.

Tipo combinar: la entrada combinar indica si se combina el segmento con otros segmentos cuando son enlazados después de ensamblar. Los tipos combinar son STACK, COMMON, PUBLIC y la expresión AT.

Se utiliza PUBLIC y COMMON en donde tenga el propósito de combinar de forma separada programas ensamblados cuando los enlaza. En otros casos, donde un programa no es combinado con otros, puede omitir la opción o codificar NONE.

Tipos Clase: La entrada clase, encerrada entre apóstrofos, es utilizada para agrupar segmentos cuando se enlazan. Generalmente se utiliza la clase `code' para el segmento de códigos, `data' por segmento de datos y `stack' para el segmento de la pila.

PROC : El segmento de código contiene el código ejecutable de un programa. También tiene uno o más procedimientos, definidos con la directiva PROC. El operando FAR que se escribe quizás después de la directiva esta relacionado con la ejecución del programa Y SU INCIO..

La directiva ENDP define el fin del procedimiento antes de un ENDS que define el final del segmento.

ASSUME: Un programa utiliza al registro SS para direccionar la pila, al registro DS para direccionar el segmento de datos y al registro CS para direccionar el segmento de código. Para este fin se debe indicar al ensamblador el propósito de cada segmento en el programa. Para ello se utiliza esta directiva de la siguiente manera:

OPERACIÓN

OPERANDO

ASSUME

SS: [Nombre de la pila], DS: NOMSEGDATOS, CS: NOMSEGCODIGO

Un programa termina su ejecución de la siguiente manera

MOV AH, 4CH ; Solicitud de terminación

MOV AL, retcode ; código de regreso (opcional)

INT 21H ; SALIR

Esta interrupción utiliza un código de función en el registro AH para especificar una acción que será realizada.

DB es el formato preferido para la definición de cadenas de caracteres, ya que permite cadenas de más de dos bytes de longitud y las convierte a la secuencia normal de izquierda a derecha.

Los elementos DB son usados para procesar la mitad de registros (AL, BL...). DW para registros completos (AX, BX...) y DD para registros extendidos (EAX, EBX...)

RESUMEN DEL CAPITULO V

EJECUCIÓN DE UN PROGRAMA:

El programa es sólo un archivo de texto realizado en un editor. Es necesario ensamblarlo y luego enlazarlo.

  • El paso de ensamble consiste en la traducción del código fuente al código objeto y la generación de un archivo intermedio .OBJ (Objeto).

  • El paso de enlace implica convertir el módulo .OBJ es un módulo de código máquina .EXE.

  • El último paso es cargar el programa para su ejecución.

  • El programa ensamblador de Microsoft es MASM.EXE, mientras que el programa de Borland es TASM.EXE o se puede utilizar el DEBUGGER del DOS.

    El enlazador (LINK o TLINK) convierte un archivo .OBJ en un archivo .EXE.

    RESUMEN DEL CAPÍTULO VI

    Los registros son conocidos por sus nombres específicos:

    AX Acumulador

    BX Registro base

    CX Registro contador

    DX Registro de datos

    DS Registro del segmento de datos

    ES Registro del segmento extra

    SS Registro del segmento de pila

    CS Registro del segmento de código

    BP Registro de apuntadores base

    SI Registro índice fuente

    DI Registro índice destino

    SP Registro del apuntador de la pila

    IP Registro de apuntador de siguiente instrucción

    F Registro de banderas

    Instrucciones de transferencia: Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar con diferentes modos de direccionamiento.

    MOV

    MOVS (MOVSB) (MOVSW)

    Instrucciones de carga: Son instrucciones específicas de los registros. Son usadas para cargar en algún registro bytes o cadenas de bytes.

    LODS (LODSB) (LODSW) Carga una cadena

    LAHF Transfiere el registro AH el contenido de las banderas

    LDS Cargar el registro de segmento de datos

    LEA Carga la dirección del operando fuente.

    LES Carga el registro de segmento extra

    Instrucciones de la pila: Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.

    POP Remueve una palabra de la pila.

    POPF

    PUSH Agrega a la pila.

    PUSHF

    Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operandos.

    AND Conjunción lógica.

    NEG

    NOT Negación lógica.

    OR Disyunción lógica.

    TEST

    XOR Disyunción exclusiva

    Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los operandos.

    ADC Adición con acarreo.

    ADD SUMA

    DIV DIVIDE SIN SIGNO

    IDIV División con signo

    MUL Multiplica sin signo.

    IMUL Multiplicación de dos operandos con signo.

    SBB Substracción con acarreo

    SUB Substracción.

    Instrucciones de salto: Son utilizadas para transferir el flujo del proceso al operando indicado.

    JMP Salta.

    JA (JNBE) Bifurca si es mayor o salta si no es menor o igual.

    JAE (JNBE) Salta si es mayor o igual o salta si no es menor.

    JB (JNAE) Salta si es mayor o igual o salta si no es menor.

    JBE (JNA) Salta si es mayor o igual o salta si no es menor.

    JE (JZ) Salta si es igual o salta si es cero.

    JNE (JNZ) Salta si es igual o salta si es cero.

    JG (JNLE) Salta si es mayor o igual o salta si no es menor.

    JGE (JNL) Salta si es mayor o igual o salta si no es menor.

    JL (JNGE) Salta si es mayor o igual o salta si no es menor.

    JLE (JNG) Salta si es mayor o igual o salta si no es menor.

    JC Salta si hay acarreo o salta si no lo hay

    JNC Salta si hay acarreo o si no lo hay

    JNO Si hay desbordamiento o si no lo hay.

    JNP (JPO) Salta si no hay paridad o salta si la paridad es impar.

    JNS Salta si el signo es positivo o si es negativo.

    JO Si hay desbordamiento o si no lo hay.

    JP (JPE) Si hay paridad o salta si la paridad es par.

    JS Salta si el signo es positivo o si es negativo.

    Instrucciones para ciclos: LOOP Transfieren el flujo del proceso, condicional o incondicionalmente, a un destino repitiéndose esta acción hasta que el contador sea cero.

    LOOP Repetir el ciclo hasta que se complete.

    LOOPE Repetir el ciclo mientras sea cero.

    LOOPNE Repetir el cclo mientras no sea cero.

    Instrucciones de conteo: Se utilizan para decrementar o incrementar el contenido de los contadores.

    DEC Decrementa.

    INC Incrementa

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

    CMP Compara cadenas.

    CMPS (CMPSB) (CMPSW)

    Instrucciones de banderas Afectan directamente al contenido de las banderas.

    CLC Limpia la bandera de acarreo.

    CLD Limpia la bandera de dirección.

    CLI Limpia la bandera de interrupción.

    CMC Complementa la bandera de acarreo.

    STC Establece la bandera de acarreo.

    STD Establece la bandera de dirección

    STI Establece la bandera de interrupción

    Instrucción MOV

    Propósito: Transferencia de datos entre celdas de memoria, registros y acumulador.

    Sintaxis:

    MOV Destino,Fuente

    Donde Destino es el lugar a donde se moverán los datos y fuente es el lugar donde se encuentran dichos datos.

    Los diferentes movimientos de datos permitidos para esta instrucción son:

    Destino: memoria. Fuente: acumulador

    Destino: acumulador. Fuente: memoria

    Destino: registro de segmento. Fuente: memoria/registro

    Destino: memoria/registro. Fuente: registro de segmento

    Destino: registro. Fuente: registro

    Destino: registro. Fuente: memoria

    Destino: memoria. Fuente: registro

    Destino: registro. Fuente: dato inmediato

    Destino: memoria. Fuente: dato inmediato

    Ejemplo:

    MOV AX,0006h

    MOV BX,AX

    MOV AX,4C00h

    INT 21H

    Este pequeño programa mueve el valor 0006H al registro AX, luego mueve el contenido de AX (0006h) al registro BX, por último mueve el valor 4C00h al registro AX para terminar la ejecución con la opción 4C de la interrupción 21h.

    Instrucción INC

    Propósito: Incrementar el operando.

    Sintaxis:

    INC destino

    La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.

    Instrucción DEC

    Propósito: Decrementar el operando

    Sintaxis:

    DEC destino

    Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo operando.

    RESUMEN DEL CAPÍTULO VII

    Un programa .COM es más compacto y pequeño que un programa .EXE contraparte.

    Este clase de extensión no define una pila o un segmento de datos ni actualiza el registro DS.

    Un programa para correr como .COM utiliza ORG 100HY inmediatamente después del enunciado SEGMENT. El enunciado establece la dirección de desplazamiento al inicio de la ejecución que sigue al PSP.

    La omisión de un solo registro .COM puede provocar que un programa falle.

    [ IDENTIFICADOR ]

    OPERACION

    [OPERANDO (S)] [;COMENTARIO]