ARQUITECTURA DE COMPUTADORES II Resumen del Capítulo IV ENSAMBLADORES Y COMPILADORES:

Anuncio
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.
1
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
COUNTER
OPERACIÓN
DB
OPERANDO
0
COMENTARIO
;Define un byte [DB] con el valor 0
Para una instrucción, un operando indica en donde realizar la acción.
OPERACIÓN
RET
INC
ADD
OPERANDO
CX
AX,12
COMENTARIO
; REGRESA
;Incrementa el registro CX.
;Suma el 12 al registro AX
OPERANDO
NINGUNO
UNO
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
2
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
ASSUME
OPERANDO
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.
3
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
4
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
5
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.
6
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
7
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.
8
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]
9
Descargar