Documentos de Académico
Documentos de Profesional
Documentos de Cultura
I. OBJETIVO DE LA PRACTICA
III. MATERIALES.
8. Bus de datos – Líneas de comunicación para la transferencia del datos entre componentes
del sistema.
9. ALU – Unidad Aritmético – Lógica.
10. Bus de direcciones – Líneas para el envío de direcciones desde el CPU a los dispositivos
periféricos y memoria.
11. Bus de datos – Líneas para el intercambio de datos entre los componentes del
computador.
12. Bus de control – Líneas para la transmisión de señales para controlar el comportamiento
de los componentes del computador.
13. Registro de banderas – Registras las condiciones resultantes de las operaciones en el CPU
Desde el punto de vista del programador, sin embargo, no todos estos elementos son
accesibles, así por ejemplo, la cola de instrucciones es una estructura de propósito especial,
que almacena instrucciones que la unidad de pre-extracción trae de la memoria principal en
los ciclos libres del bus del sistema con el propósito de reducir el tiempo de procesamiento
de instrucciones.
Los registros de propósito general (RPG), se utilizan para el procesamiento de datos. Estos
registros son de 16 bits de extensión, pero pueden ser accedidos por bytes.
AX AH AL
BX BH BL
CX CH CL
DX DH DL
CX (Contador) - Se suele utilizar como contador en algunas operaciones, pero puede ser
utilizado para cualquier operación aritmética o lógica. Puede ser referenciado como CH y CL
Registros de propósito general que se usan frecuentemente para hacer referencia a datos en
memoria.
Source Index SI
Destination Index DI
Base Pointer BP
Stack Pointer SP
BP (Apuntador de Base) - Apuntador de uso general, se suele utilizar para hacer referencia
a una matriz de datos en una pila de memoria.
REGISTRO DE SEGMENTO
Estos registros se utilizan para definir los segmentos que contendrán código o datos de los
programas en el computador
Code Segment CS
Data Segment DS
Stack Segment SS
Extra Segment ES
APUNTADOR DE INSTRUCCIONES
Instruction Pointer IP
REGISTRO DE BANDERAS
Este registro almacena información sobre el estado de las operaciones que se ejecutan en el
procesador, también se le conoce como PSW o Processor State Word y se utiliza para tomar
decisiones de salto condicional.
(Overflow) - Este bit se activa cuando una operación, con signo, genera un resultado
cuyo valor excede la capacidad de almacenamiento de los registros.
D (Dirección) - Se utiliza para determinar la dirección de incremento (positivo o
negativo) automático para operaciones con cadenas utilizando los
registros DI o SI.
I (Interrupción) - Se activa cuando un dispositivo periférico requiere atención del
procesador.
T (Trampa) - Se utiliza para tareas de depuración de programas.
S (Signo) - Se activa o desactiva dependiendo del signo del resultado de la última
operación.
Z (Cero) - Se activa si el resultado de la última operación es igual a cero.
A (Acarreo auxiliar) - Se activa cuando ocurre un acarreo entre los bits 3 y 4 (BCD).
Por su parte, un procesador 80386, que es la base de los procesadores de Intel hasta la
actualidad, presenta la siguiente organización de registros (modelo de programación)
EAX AH AX AL
EBX BH BX BL
ECX CH CX CL
EDX DH DX DL
ESI SI
EDI DI
EBP BP
ESP SP
CS
DS
SS
ES
SI N NOMBRE ESPECI FI CO FS
SI N NOMBRE ESPECI FI CO GS
EI P IP
EFLAGS FLAGS
Las funciones de los registros son similares a las indicadas para las procesadores 8086/88
con la diferencia que los registros se amplían a 32 bits y dependiendo de la granularidad de
acceso, los registros de datos pueden ser, por ejemplo AL, AH, AX o EAX si se quiere hacer
referencia al byte menos significativo del registro AX, al byte más significativo del registro
AX, al registro AX que es la mitad menos significativa del registro EAX o a los 32 bits del
registro respectivamente. No se puede hacer referencia a los 16 bits más significativos de
estos registros.
;Nombre : sumaSimple.asm
;Proposito : suma dos enteros
;Autor : Edwin Carrasco
;FCreacion : 05/03/2008
;FModificacion : ---
;Compilacion : nasm -f elf sumaSimple.asm
;Enlace : ld -s -o sumaSimple sumaSimple.o
;Ejecucion : ./sumaSimple
;Ver resultados : echo $?
section .text
global _start
_start:
mov ax,12
add ax,5
mov bx,ax
;volver al sistema
mov ax,1 ; llamada al sistema: 1 - exit
int 80h ; llamamos al S.O. para terminar el programa
Los programas con los que trabajaremos, deben utilizar una estructura como la utilizada en el
programa anterior.
Dependiendo de la naturaleza del programa, las secciones .data y .bss pueden, como no,
estar presentes.
Como una buena práctica de programación, todos nuestros programas deben estar bien
documentados, por lo que deben incluir un encabezado como el que se muestra en el
programa de ejemplo y utilizar comentarios, donde el programa lo amerite, teniendo en
consideración que los comentarios se utilizan para hacer claro una parte del programa y que
los comentarios triviales, implícitos o superfluos no ayudan en ese aspecto.
Las instrucciones:
mov ax, 1
mov bx,0
int 80h
Tienen como propósito realizar una llamada al sistema operativo para que realice una acción
de acuerdo a los parámetros indicados a través de los registros AX y BX.
En este caso concreto, al cargar un 1 (uno) al registro AX, se hace referencia a la función
exit. Cuando se llama a la función exit, la cual se usa para indicar el fin del programa, se
utiliza el registro BX para devolver un código que sirve para indicar el estado del programa;
si un programa termina sin problemas, se carga 0 (cero) en BX. Para el ejemplo,
aprovechamos este registro para devolver el valor calculado por nuestro programa.
Las fases que se siguen para crear un programa ejecutable a partir de archivos de código
fuente en lenguaje ensamblador se muestran en el gráfico que sigue, en el cual puede verse
que uno o varios archivos con código fuente ensamblador (y con extensión .asm) se
compilan para obtener un archivo objeto correspondiente (con extensión .o). Luego se
utiliza un enlazador (linker) para enlazar los programas con extensión .o y a partir de estos
obtener un archivo ejecutable.
Assembler
Assembler
.o .o .o
Linker
Programa
ejecutable
En nuestro caso, el programa que se muestra como ejemplo, debe ser editado en un editor de
texto cualquiera. Para el ejemplo, se utilizará el editor de texto Kate de KDE. La ventaja de
este editor, es que soporta coloración de sintaxis NASM y además, como se mencionó
anteriormente, permite acceder, desde la misma interfaz, a la consola, por lo que desde este
mismo entorno, es posible también, compilar, enlazar y ejecutar el programa.
ld -s -o sumaSimple sumaSimple.o
./sumaSimple
echo $?
V. TRABAJO DE LABORATORIO.
Solución
;Nombre : restaSimple.asm
;Proposito : resta dos enteros
;Autor : Edwin Carrasco
;FCreacion : 20/03/2008
;FModificacion : ---
;compilacion : nasm -f elf restaSimple.asm
;enlace : ld -s -o restaSimple restaSimple.o
;ejecucion : ./ restaSimple
;ver resultados : echo $?
section .text
global _start
_start:
mov eax,12
sub eax,5
mov ebx,eax
;volver al sistema
mov eax,1
int 80h
Solución
;Nombre : producto.asm
;Proposito : multiplica dos enteros
;Autor : Edwin Carrasco
;FCreacion : 20/03/2008
;FModificacion : ---
;compilacion : nasm -f elf producto.asm
;enlace : ld -s -o producto producto.o
;ejecucion : ./producto
;ver resultados : echo $?
section .text
global _start
_start:
mov eax,12 ; multiplicando
mov ebx,5 ; multiplicador
mul ebx ; el producto esta en eax
mov ebx,eax
;volver al sistema
mov eax,1
int 80h
VII. EVALUACION
SESION 01
ACTIVIDAD
Procedimental
Ejecución de ejercicios de ejemplo 04
Resolución del ejercicio propuesto 01 04
Resolución del ejercicio propuesto 02 06
Resolución del ejercicio propuesto 03 06
TOTAL 20
VIII. BIBLIOGRAFIA