Está en la página 1de 17

1.

INTRODUCCION AL HARDWARE DE LA COMPUTADORA

Los lenguajes de alto nivel como: C++, C#, Visual Basic, Turbo Pascal, etc. tienen
portabilidad.

* La portabilidad permite utilizar ese lenguaje de programacin sin importar el tipo de


computadora (marca o velocidad del microprocesador, marca de la PC, etc).

Para escribir un programa en lenguaje ensamblador se requiere conocer el hardware


(arquitectura) de la computadora, su conjunto de instrucciones y sus reglas de uso.

Los bloques fundamentales de informacin de una computadora son los bits y los bytes.
Estos proporcionan los medios por los cuales la computadora puede representar datos e
instrucciones en la memoria.

Elementos del Hardware

Los elementos principales de hardware interno de la computadora son:


o Microprocesador
o Memoria
o Registros.
Los elementos de hardware externo son dispositivos de entrada / salida como:
o Teclado
o Monitor
o Disco duro, etc.
Elementos de Software

El software consta de diversos programas y archivos de datos (incluyendo al sistema


operativo) almacenados en el disco.
El microprocesador ejecuta las instrucciones del programa, y los registros manejan la
aritmtica, movimiento de datos y el direccionamiento.

Un programa en lenguaje ensamblador consiste en uno o ms segmentos para definir datos y


almacenar instrucciones de mquina y un segmento llamado stack (pila) que contiene
direcciones almacenadas.
Bits y Bytes

La unidad ms pequea de informacin en la computadora es el bit. Un bit puede


tomar el valor de cero (apagado) o uno (encendido).
A un grupo de ocho bits se le denomina byte. Un byte puede representar localidades
de almacenamiento (memoria interna, discos duros, etc.).
- Cada byte tiene 8 bits para datos (proporcionan la base para la aritmtica
binaria y para representar caracteres) y 1 bit para paridad (la paridad
requiere que el nmero de bits encendidos sea impar).

Los ocho bits de datos pueden representar valores numricos, smbolos


y/o caracteres.
Ocho bits permiten 256 combinaciones diferentes de condiciones de
encendido / apagado.

Bytes relacionados

Un programa puede conjuntar un grupo de uno o ms bytes que definen un valor


particular a los que se les denomina campo.
La computadora define ciertos tamaos:
o Palabra: Campo formado por 2 bytes (16 bits).
o Palabra doble: Campo formado por 4 bytes (32 bits).
o Palabra cudruple: Campo formado por 8 bytes (64 bits).
o Prrafo: Un campo de 16 bytes (128 bits).
o Kilobyte (kB): 210 bytes o 1024 bits, forman un kilobyte (kB).
o Megabyte (MB): 220 es igual 1,048,576.
Nmeros binarios

La computadora nicamente puede trabajar con nmeros binarios (base 2).


Una coleccin de bits puede representar cualquier valor numrico. El valor de un nmero
binario depende de las posiciones relativas de cero a uno de los bits.
Aritmtica binaria
- Los nmeros binarios positivos tienen en su ltimo bit un cero.

Nmeros negativos
- Los nmeros binarios negativos tienen un uno (en la izquierda) en su ltimo bit.
*Para representar un nmero en binario se sigue la siguiente regla: Invierta los nmeros y
sume 1.

Memoria Interna
Las computadoras tienen dos tipos de memoria:
o Memoria de acceso aleatorio (RAM)
o Memoria de slo lectura (ROM).

Los bytes de memoria se enumeran en forma consecutiva, iniciando con 00 (cada localidad
tiene un nmero de direccin nico).
ROM
- Es un chip especial de memoria que solo puede ser leida.
- Los datos e instrucciones grabados permanentemente en un chip ROM no pueden ser
alterados.
- El BIOS (Sistema Bsico de Entrada/Salida) de ROM que inicia en la direccin 768k, maneja
los dispositivos de entrada y salida.
- La ROM que inicia en 960k controla funciones bsicas de la computadora.
RAM
-

Tambin es llamada memoria de lectura escritura.


Dispone de una hoja de trabajo para almacenamiento temporal y ejecucin de
programas.
Se pierde cuando se apaga la computadora.

Direccionamiento de localidades de memoria


Un procesador, de acuerdo a su modelo, puede accesar uno o ms bytes de memoria a la
vez.
El sistema almacena los bytes mediante una secuencia inversa.
Ejemplo: En el siguiente ejemplo se desea almacenar el nmero decimal 1025 (0401H), el cual
ocupa dos bytes (una palabra) en memoria.
*Suponiendo que el microcontrolador transfiere 0401H de un registro a las localidades de
memoria 5612 y 5613.

Segmentos y Direccionamiento
Un segmento es un rea especial en un programa que inicia en un lmite de un prrafo, esto es,
una localidad de la memoria divisible entre 16 o 10 hex.
-

Un segmento puede estar ubicado en cualquier lugar de la memoria y puede ser de


hasta 64k en modo real.
Para direccionar un segmento en particular se modifica la direccin en el registro del
segmento apropiado.

Los tres segmentos principales son:

Segmento de cdigo (CS): Contiene las instrucciones de mquina que son ejecutadas.
-

Segmento de datos (DS): contiene datos, constantes y reas de trabajo definidos por el
programa.
-

La primera instruccin ejecutable est en el inicio de este segmento.


El registro del CS direcciona el segmento de cdigo.
Si el programa requiere ms de 64k se puede definir otro CS.

El registro DS direcciona el segmento de datos.


Se puede definir otro DS en caso que el programa as lo requiera (ms de 64 k)

Segmento de Pila (SS): La pila contiene los datos y direcciones que el programador
necesita guardar temporalmente, o para uso de llamadas subrutinas.
-

El registro del segmento de pila direcciona el segmento de la pila.

Lmites de los segmentos

Los registros de segmento contienen la direccin inicial de cada segmento.

Desplazamiento

En un programa, todas las localidades de memoria estn referidas a una direccin inicial
de segmento.
La distancia en bytes desde la direccin del segmento se define como el desplazamiento
(offset).
Para referir cualquier direccin de memoria en un segmento, el procesador combina la
direccin del segmento en un registro de segmento con un valor de desplazamiento.

Ejemplo:
El registro DS contiene la direccin del segmento de datos en 045F[0] hexadecimal y una
instruccin hace referencia a un localidad de memoria con un desplazamiento de 0032H bytes
dentro del segmento de datos.
Direccin del Segmento DS:
Desplazamiento:
Direccin real:

045F0H
+0032H
04622H

Registros
Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar
direccionamiento de memoria y proporcionar capacidad aritmtica.
Registros de segmentos

Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para


direccionamiento conocido como segmento actual.
Un segmento se alinea en un lmite de prrafo y su direccin en un registro de segmento
supone cuatro bits a la derecha.

Registros CS

El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro


CS.

Direccin de una instruccin que es buscada para su ejecucin =>


Direccin del segmento + desplazamiento en el registro de apuntador de instruccin (IP).
Registros DS
El registro DS contiene la direccin de inicio del segmento de datos.
Direccin de una instruccin que es buscada para su ejecucin (genera una referencia a la
localidad de un byte especifico en el segmento de datos) =>
Direccin del DS + desplazamiento en el registro de apuntador de instruccin (IP)

Registros SS

Permite la colocacin en memoria de una pila, para almacenamiento temporal de


direcciones y datos.
El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro
SS.
Direccin de segmento + valor de desplazamiento en el registro del apuntador de la pila
(SP) => palabra actual en la pila que est siendo direccionada.

Registros ES

El registro extra de segmento (ES) se utiliza para algunas operaciones con cadenas de
caracteres.
Est asociado con el registro DI (ndice).Si se requiere el uso de del registro ES puede
inicializarse en la direccin de segmento apropiada.

Registros apuntadores
Registros de apuntador de instrucciones (IP)
Tiene 16-32 bits y contiene el desplazamiento de direccin de la siguiente instruccin que
se ejecutar.
El IP est asociado al registro CS.

Ejemplo: El registro CS contiene 25A4[0]H y el IP contiene 412H. Encontrar la siguiente


instruccin que se ejecutara.
Segmento de direccin en el registro CS:
25A40H
Desplazamiento de direccin en el registro IP: + 412H
Direccin de la siguiente instruccin:
25E52H

Registro apuntador de pila SP

Tiene 16-32 bits. Proporciona un valor de desplazamiento que se refiere a la palabra actual
que est siendo procesada en la pila.
Los registros SP (apuntador de pila) y BP (apuntador de base) estn asociados con el
registro SS.
Ejemplo: El registro SS contiene una direccin 27B3[0]H y el SP contiene un
desplazamiento 312H. Encontrar la palabra actual que est siendo procesada en la pila.
Segmento de direccin en el registro CS:
27B30H
Desplazamiento de direccin en el registro SP:
+ 312H
Direccin de la siguiente instruccin:
25E42H

Registros BP

Tiene 16-32 bits.


Facilita la referencia de parmetros. Los cuales pueden ser datos y direcciones
transmitidos va pila.

Registros de propsito general

Los registros de propsito general son: AX, BX, CX y DX.


Pueden direccionarse como una palabra o como parte de un byte.
Por ejemplo, registro CX consta de:
- Una parte alta (CH)
- Una parte baja (CL)

* Los procesadores 80386 y posteriores permiten el uso de todos los registros de propsito
genera, En sus versiones ampliadas de 32 bits: EAX, EBX, ECX, EDX.
Registro AX
Acumulador principal
Es utilizado para operaciones que implican:
- Entrada/Salida
- Aritmtica (sumar, multiplicar, dividir).
Registro BX
Registro base.
Es utilizado para ser un ndice para direccionamiento indexado. Tambin se puede usar
para clculos.
Registro CX
Registro contador.
Controla el nmero de veces que se repite un ciclo o un valor de corrimiento de bits
(derecha o izquierda). Tambin se usa para clculos.
Registro DX
Registro de datos.
Se utiliza en algunas operaciones de entrada/salida y aritmticas (multiplicacin y divisin)
con cifras grandes.
Registros ndice (SI y DI)
Estn disponibles para direccionamiento indexado y para sumas y restas.
Registro SI
Registro ndice fuente de 16 bits. Se usa en operaciones con cadenas de caracteres.

Est asociado con el registro DS.


Microprocesadores 80386 y posteriores permiten un SI ampliado de 32 bits, ESI.

Registro DI
Registro ndice destino de 16 bits. Se usa en operaciones con cadena de caracteres.
Est asociado con el registro ES.
Microprocesadores 80386 y posteriores permiten un DI ampliado de 32 bits, EDI.
4. LA PILA (STACK)

Proporciona un espacio para el almacenamiento temporal de direcciones y datos.


Cada elemento de dato en la pila es una palabra (2 bytes).
El registro SS => contiene la direccin del inicio de la pila (es inicializado por el DOS).
Inicialmente SP => contiene el tamao de la pila, un valor que apunta al byte que est
pasando el final de la pila.

La pila difiere de otros segmentos en su mtodo de almacenar los datos:


- Empieza en la localidad ms alta
- Almacena los datos hacia abajo por la memoria.

Instruccin PUSH
- Disminuye el SP en 2 hacia abajo, hacia la siguiente palabra almacenada en la pila y coloca
(almacena) un valor ah.
* La operacin invierte la secuencia de bytes almacenados, de tal forma que 015A
5A01:
Instruccin POP
- Incrementa el SP en 2 hacia arriba (regresa el valor de la pila), hacia la siguiente palabra
almacenada.

Los valores de la pila permanecen ah aunque SP no apunta a ellos.

Direccionamiento de Programas

Cada instruccin contiene al menos una operacin, como mover, sumar o regresar.
Dependiendo de la operacin, una instruccin puede tener uno o ms operandos que
referencian los datos que la operacin procesa.

* El registro IP indica la direccin actual del desplazamiento de la instruccin actual, en el


segmento de cdigo que es ejecutada.
Referencias a memorias y registros
WORDA DW
MOV AX,BX
MOV AX,[BX]

; Define una palabra

; Mueve los contenidos de BX a AX


; Mueve los contenidos de la localidad especificada por BX

*los corchetes definen un operador de ndice (utilizan una direccin del desplazamiento en el BX)
5. INSTRUCCIONES Y DIRECCIONAMIENTO DEL PROCESADOR
Operandos
Un operando es una fuente de datos para una instruccin.
Algunas instrucciones no necesitan operandos (RET y CLC), otras necesitan uno o dos
operandos.
Donde existen dos operandos, el primero es el destino y el segundo es el fuente.

1. Operandos registro
- El operando de registro proporciona el nombre de alguno de los registros de 8, 16 o 32
bits. Ejemplo:
MOV CX,WORDX
; Registro en el 1er operando
MOV WORDX,BX
; Registro en el 2do operando
MOV CL,AH
; Registro en ambos operandos
- Es el tipo de operacin ms rpida.
2. Operandos inmediatos
- contiene un valor constante o una expresin constante. Ejemplo:
SAVE DB ?

ADD CX, 12
; Suma 12 al CX
MOV SAVE, 25
; Suma 25 a SAVE
3. Operandos de memoria directa
- Uno de los operandos hace referencia a una localidad de memoria y el otro a un registro.

WORD1 DW 0
BYTE1 DB 0
MOV AX, WORD1
; Carga WORD1 en AX
ADD BYTE1, CL
; Suma CL en BYTE1
MOV BX, DS:[38B0H]; Mueve una palabra desde la memoria al
; desplazamiento 38B0H
Instruccin MOV

Copia el segundo operando (fuente) al primer operando (destino).


El segundo operador puede ser un valor inmediato, un registro de propsito general o
una localizacin en memoria.
El registro destino puede ser un registro de propsito general o una localidad de
memoria.
Ambos operando deben tener el mismo tamao, puede ser un byte o una palabra.

Ejemplos:
ORG 100h ; inicio del programa
MOV AX, B800h ; Mueve el valor de B800H a AX
MOV DS, AX ; Copia el valor de AX en DS
MOV CL, 'A' ; Coloca en CL el cdigo ASCII de 'A', (41H)
MOV CH, 11011111b ; Copia en CH un valor binario
MOV BX, 15Eh ; Copia 15EH en BX.
RET

; regresa al sistema operativo

6. VARIABLES, ARREGLOS E INTERRUPCIONES


Variables
Una variable es una localidad de memoria.
Esta asociada un identificador vlido, en lugar de una direccin de memoria fsica.
Los dos tipos de variables ms comunes son:
BYTE
WORD
Sintaxis de una declaracin de variable:
Nombre_id DB value
Nombre_id DW value
DB => Define un byte
DW => Define una palabra
Arreglos
Un arreglo es una cadena de variables.

Una cadena de texto (string) es un ejemplo de una cadena de byte, cada carcter es
mostrado como un valor del cdigo ASCII (0...255).
Se puede accesar al valor de cualquier elemento en el arreglo usando corchetes.
Ejemplo:
Mov AL, A[2] ; mueve el contenido del arreglo A
; en la posicin 2 hacia AL
Mov AH, B[0] ; mueve el contenido del arreglo B
; en la posicin 0 hacia AH
Interrupciones
Las interrupciones pueden ser vistas como un nmero de funciones.
Por ejemplo, si se desea imprimir un carcter, simplemente se llama a la interrupcin que realiza
esa funcin.
Existen interrupciones de hardware, disparadas por los diferentes hardware.
Pero, las interrupciones que se van a analizar son las interrupciones de software.
Para realizar las interrupciones de software se utiliza la instruccin INT, con la siguiente
sintaxis:
INT value
*Donde value es un nmero entre 0 y 255 en decimal; o bien entre 00H y FFH para nmeros
hexadecimales.

Cada una de esas 256 funciones posee otras 256 subfunciones; Por lo tanto, pueden existir
hasta 65,536 funciones en total.
Para especificar una subfuncin, se debe declarar en el registro AH antes de llamar a la
interrupcin.

7. BANDERAS E INSTRUCCIONES
Registro de banderas
La mayora de las instrucciones afectan el estado de los registros del procesador (registro
de banderas).

En la figura se pueden apreciar los 16 bits de este registro, cada bit es llamado bandera y
pueden tomar el valor de 1 o 0.

Acarreo (Carry Flag, CF) Se activa en 1 cuando hay un desbordamiento sin signo. Si
no existe desbordamiento CF se coloca en 0.
Cero (Zero Flag, ZF) Se activa en 1 cuando un resultado es cero. Cuando un resultado
es diferente de cero el resultado de esta bandera ser 0.
Signo (Sign Flag, SF) Se activa en 1 cuando el resultado es negativo. Cuando el
resultado es positivo es activado a 0. Esta bandera toma el valor del bit ms
significativo.
Desbordamiento (Overflow Flag, OF) Se activa a 1 cuando hay un desbordamiento
de signo. Por ejemplo, cuando se suma 100 + 50 (el resultado no est en el rango de 128...127).
Paridad (Parity Flag, PF) Esta bandera es activada a 1 cuando el nmero de bits es
par, y 0 cuando el nmero de bits sea impar. Solo analiza ocho bits menos
significativos.
Acarreo Auxiliar (Auxiliary Flag, AF) Se pone a 1 cuando hay un desbordamiento sin
signo para el nibble (4 bits) ms bajo.
Interrupcin (Interrupt enable Flag, IF) Cuando esta bandera se activa a 1, el CPU
reacciona a las interrupciones de los dispositivos externos.
Direccin (Direction Flag, DF) Esta bandera es utilizada por algunas instrucciones
para procesar cadenas de datos, cuando esta bandera es puesta en 1, el
procesamiento es realizado hacia delante; y cuando es puesta a 0, el procesamiento es
hecho hacia atrs.

Primer Grupo de Instrucciones


ADD, SUB,CMP, AND, TEST, OR, XOR
-

Despus de la operacin entre esos operandos, el resultado es siempre almacenado en el


primer operador. Las instrucciones CMP y TEST slo afectan las banderas y no almacenan
un resultado. Estas instrucciones solo afectan a las banderas: CF, ZF, SF, OF, PF, AF.

ADD Suma el segundo operador al primero, y ah guarda el resultado.


SUB Resta el segundo operador al primero y ah guarda el resultado.
CMP Compara dos operandos, de los cuales uno o ambos estn contenidos en un
registro.
AND Realiza la operacin lgica AND entre todos los bits de dos operandos. Aplica las
siguientes reglas:
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
Se aprecia que slo es 1 cuando ambos bits son 1.

TEST Es igual a la instruccin AND pero slo para banderas nicamente.


OR Operacin lgica OR entre todos los bits de dos operandos. Aplican estas reglas:
1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
Cuando al menos un operando es 1, el resultado siempre es 1.
XOR Operacin lgica XOR entre todos los bits de dos operandos. Aplican estas reglas:
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
El resultado siempre es 1, cuando los bits son diferentes.
Segundo Grupo de Instrucciones
MUL, IMUL, DIV, IDIV
Las instrucciones MUL e IMUL afectan solo a las banderas: CF y OF. Cuando el
resultado es mayor al tamao del operando, esas banderas son puestas a 1.
Cuando el resultado se ajusta al tamao del operando, esas banderas son puestas a
0.

MUL Multiplicacin sin signo:


Cuando el operando es un byte:
AX = AL * operando

Cuando el operando es una palabra:


(DX AX) = AX * operando
*La parte baja del producto se guarda en AX y la parte alta en DX.
IMUL Multiplicacin con signo
DIV Divisin sin signo:

Cuando el operando es un byte:


AL = AX / operando
AH = Residuo (modulo)

Cuando el operando es una palabra:


AX = (DX AX) / operando

DX = Residuo (modulo)
IDIV Divisin con signo:
Tercer Grupo de Instrucciones

INC, DEC, NOT, NEG


Las instrucciones INC y DEC afectan a la banderas: ZF,SF, OF, PF y AF
Las instruccin NOT no afecta a ninguna bandera.
La instruccin NEG afecta las banderas: CF, ZF, SF, OF, PF y AF.
La instruccin NOT invierte los bits de cada operador.
La instruccin NEG realiza el complemento a dos (a operadores negativos).
Invierte cada bit del operador y le suma 1.

9. INSTRUCCIONES

Control de Flujo de un Programa: El control de flujo permite que un programa realice


decisiones de acuerdo a ciertas condiciones.

Salto incondicional

instruccin JMP => instruccin bsica que transfiere el control a otro punto en el programa.
La sintaxis es la siguiente:
JMP etiqueta
Para declarar una etiqueta es necesario un identificador y dos puntos : al final.

Salto condicional corto

Existen tambin instrucciones que realizan saltos condicionales. Existen tres grupos.
El primero solo analiza una bandera.
El segundo compara nmero con signo.
El tercero compara nmeros sin signo.

1. Instrucciones que verifican una bandera

2. Instrucciones para nmeros con signo

3. Instrucciones para nmeros sin signo

Instruccin LOOP

Permite que una rutina realice un ciclo un determinado nmero de veces o hasta que se
alcance una condicin particular.
Se requiere un valor inicial en el registro CX.
En cada iteracin, LOOP de forma automtica disminuye en 1 a CX.
Corrimiento de Bits

Estas instrucciones realizan las siguientes acciones:


Hace referencia a un registro o direccin de memoria.
Recorre bits a la izquierda o a la derecha.
Corrimiento lgico (sin signo) o aritmtico (con signo).

Procedimientos

Son un conjunto de instrucciones que pueden ser llamadas desde el programa.


Realizan tareas especficas.
Permiten que los programas sean ms estructurados y fciles de entender.
Generalmente regresan al punto en donde fueron llamados.
Un procedimiento tienen un nombre, el cual debe escribir en la parte superior e inferior
del mismo.

Sintaxis:
Nombre PROC
; aqu va el cdigo

; del procedimiento
RET
Nombre ENDP
*Nombre: Es el nombre del procedimiento, debe ir al inicio y al final para cerrar
correctamente al mismo.
*RET: Esta instruccin en este caso permite regresar del procedimiento, para ejecutar la
siguiente instruccin.

La instruccin CALL permite llamar a un procedimiento.