CONTENIDO: I. INTRODUCCION 1.1. Importancia del lenguaje
ensamblador 1.2. Descripción y características del
lenguaje ensamblador 1.3. Modelos de arquitectura de computadoras
1.4. Características de los microprocesadores de la
familia x86 II. EL MICROPROCESADOR Y SU ARQUITECTURA 2.1.
Descripción de la unidad procesadora de una
microprocesador de la familia x86 2.2. Registros del
microprocesador 2.3. Modo Real y Modo Protegido del
Microprocesador 2.4 Segmentación 2.5. Modos de
direccionamiento de datos III. PROGRAMACION EN ENSAMBLADOR 3.1.
Requerimientos para la programación en ensamblador 3.2.
Formato de un programa en ensamblador 3.3. Software TASM y MASM
3.4. Creación de un programa en ensamblador
CONTENIDO: IV. CONJUNTO DE INSTRUCCIONES EN ENSAMBLADOR 4.1.
Instrucciones para movimiento de datos 4.2. Instrucciones
aritméticas y lógicas 4.3. Instrucciones de
entrada/salida 4.4. Instrucciones control de programa V. MACROS Y
PROCEDIMIENTOS 5.1. Definición de procedimiento 5.2.
Sintaxis de un procedimient0 5.3. Definición de una macro
5.4. Sintaxis de una macro 5.5. Bibliotecas de macros 6.
INTERRUPCIONES 6.1. Definición de interrupción 6.2.
Clasificación 6.3. Funcionamiento del mecanismo de
interrupciones 6.4. Interrupciones más comunes
CONTENIDO: VII. MANEJO DE ARCHIVOS 7.1. Manejando archivos con el
método FCB 7.2. Manejando archivos con canales de
comunicación VIII. PROGRAMACION DE PERIFERICOS 8.1. Puerto
Paralelo 8.2. Puerto Serial 8.3. TIMER 8.4. Controlador de
Interrupciones 8.5. Coprocesador matemático 8.6. Modo
gráfico y ratón IX. PROGRAMACION AVANZADA 9.1.
Interfaz del lenguaje “C” con ensamblador 9.2.
Programación de ensamblador en Windows
I. INTRODUCCION : 1.1. Importancia del lenguaje ensamblador 1.2.
Descripción y características del lenguaje
ensamblador 1.3. Modelos de arquitectura de computadoras 1.4.
Características de los microproc. de la familia x86
1.1, 1.2 El ensamblador Existen varias razones que justifican el
uso del ensamblador en lugar de otros lenguajes: El ensamblador
brinda la oportunidad de conocer más a fondo la
operación de su PC. Se conserva el control total las
tareas que realiza la PC, siempre y cuando ésta sea
físicamente capaz de hacerlo. Los programas en ensamblador
son más rápidos, más compactos y tienen
mayor capacidad que los creados en otros lenguajes. Permite
optimizar al máximo los programas.
1.3 Arquitecturas de computadoras RISC vs. CISC RISC. CISC.
Hardvard vs. Princeton (Von Neuman): Hardvard. Von Neuman. Otras
clasificación, (Flynn): MIMD, MISD, SIMD y SISD.
1.3 Arquitecturas de computadoras La arquitectura Harvard, separa
la memoria de datos y la memoria de programa, y se accede a ellas
mediante buses distintos. La arquitectura Von Neuman trata de la
misma forma los datos que las instrucciones.
1.4 Características micros x86
1.4 Características micros x86
II. EL MICROPROCESADOR Y SU ARQUITECTURA 2.1. Descripción
de la unidad procesadora de una microprocesador de la familia x86
2.2. Registros del microprocesador 2.3. Modo Real y Modo
Protegido del Microprocesador 2.4. Segmentación 2.5 Modos
de direccionamiento de datos
2.1. El Microp. 80X86 y su Arquitectura (Gp:) CPU 80X86 (Gp:)
Memoria RAM (Gp:) Puertos E/S (Gp:) Bus de Direcciones (Gp:) Bus
de Datos (Gp:) Bus de Control
2.2 Registros (Gp:) -Registros: Propósito general,
propósito específico y de segmento. -Los registros
sombredos existen despues del 80386. -FS y GS no tienen nombres
asociados.
2.2 Registros Registro: Conjunto de flip-flops capaz de
almacenar, y en algunos casos modificar, información
binaria. Dentro de todo CPU existe un conjunto de registros.
Algunos tienen un uso específico, otros son de uso
general. Los registros de uso general normalmente se utilizan
para guardar datos y resultados intermedios.
2.2 Registros Desde el punto de vista del programador, es muy
importante conocer el conjunto de registros internos de un
procesador y su uso, cuando se programa en bajo nivel. Esto se
debe a que muchas de las instrucciones de lenguaje máquina
suponen que los datos están en alguno de los registros o
almacenan el resultado en alguno de los registros internos.
2.2 Registros de los procesadores 80X86 Registros de Uso General:
EAX: Acumulador EBX: Base ECX: Contador EDX: Datos. Estos
registros pueden guardar datos de 32, 16 u 8 bits. (Gp:) 32 bits
(Gp:) 16 bits (Gp:) EAX (Gp:) AX (Gp:) AH (Gp:) AL
2.2 Registros de los procesadores 80X86 ESP: Stack Pointer
(Apuntador de Pila) EBP: Base Pointer (Apuntador Base) ESI:
Source Index (Indice Fuente u Origen) EDI: Destination Index
(Indice Destino) Estos registros pueden almacenar datos de 32 o
16 bits. (Gp:) 32 bits (Gp:) 16 bits (Gp:) ESP (Gp:) SP
2.2 Registro de Banderas Conjunto de bits que nos dan
información sobre el estado del procesador y sobre el
resultado de la última operación efectuada. Es el
único registro accesible a nivel de bits. Algunos de estos
bits son: CF: Carry flag – ZF: Zero flag SF: Sign flag – OF:
Overflow flag IF: Interrupt flag – DF: Direction flag (Gp:) . . .
. . . . . OF DF IF SF ZF CF
2.2 Registros de los procesadores Registros de Segmento CS: Code
Segment (Segmento de Código) DS: Data Segment (Segmento de
Datos) SS: Stack Segment (Segmento de Pila) ES: Extra Segment
(Segmento Extra) FS: Extra Segment (Segmento Extra) GS: Extra
Segment (Segmento Extra) Son registros de 16 bits. Se utilizan
para generar las direcciones que el procesador envía por
el bus de direcciones.
2.3 Modo real y protegido Los microprocesadores 80286 y
posteriores operan tanto en modo real como en modo protegido.
Sólo el 8086 y 8088 operan en modo real. La
operación en modo real permite direccionar a segmentos de
64 KB de memoria . En el modo real de operación, el
direccionamiento a memoria se hace en forma segmentada. Una
dirección segmentada tiene 2 partes: Segmento :
Desplazamiento El registro CS trabaja en conjunto con el registro
IP (Apuntador de Instrucción) para generar las direcciones
hacia el programa.
2.4 Segmentación Técnica utilizada en los
procesadores Intel 8086/8088 para generar direcciones de 20 bits
usando registros de 16 bits. Para ilustrar esta técnica,
suponga que se desea ubicar la posición de una persona a
partir de un punto de referencia, pero utilizando solamente
números de 2 dígitos decimales. (Gp:) 100 (Gp:) 200
(Gp:) 300 (Gp:) 400 (Gp:) 500 (Gp:) mts
2.4 Segmentación Esto se puede realizar si se hace lo
siguiente: Se divide la recta en bloques de 100 metros cada uno.
Se utilizan dos números: Uno para indicar en cuál
bloque está la persona Otro para especificar su
posición dentro del bloque. Posición =
Bloque:Posición (Gp:) 100 (Gp:) 200 (Gp:) 300 (Gp:) 400
(Gp:) 500 (Gp:) mts 0:50 3:45
2.4 Segmentación Para obtener la ubicación real
debe realizarse la siguiente operación: Ubicación =
Bloque*100 + Posición Posición1 = 0*100 + 50 = 50
Posición2 = 3*100 + 45 = 345 (Gp:) 100 (Gp:) 200 (Gp:) 300
(Gp:) 400 (Gp:) 500 (Gp:) mts (Gp:) 0:50 (Gp:) 3:45 (Gp:)
Posición 1 (Gp:) Posición 2
2.4 Segmentación En el caso de los procesadores 80X86, los
bloques se llaman SEGMENTOS y la posición se llama
DESPLAZAMIENTO En modo real, cada una se describe con un
número de 16 bits. Operando en modo real Dirección
Real = Segmento*16 + Desplazamiento. La Dirección Real ya
es una cantidad de 20 bits. Esto significa que toda
dirección tiene 2 partes: Un Segmento y un
desplazamiento.
2.4 Segmentación en Modo Protegido Es importante recalcar
que cuando los procesadores 80386 o posteriores operan en modo
protegido, la segmentación funciona de manera muy
diferente. Cada segmento puede ser de hasta 4 Gbytes. Maneja
memoria virtual, lo que implica un esquema de paginación.
Maneja también multitarea y un esquema de
protección de memoria.
2.5 Modos de direccionamientos Modos de direccionamiento de datos
Direccionamiento de registro Direccionamiento inmediato
Direccionamiento directo Direccionamiento indirecto por registro
Direccionamiento base-más-índice Direccionamiento
relativo al registro Direccionamiento relativo a
base-más-índice Direccionamiento índice
escalado (x386 ..) Modos de direccionamiento de memoria del
programa Direccionamiento relativo al programa Direccionamiento
directo Direccionamiento indirecto Observe la gran cantidad de
modos de direccionamiento de datos.
2.5 Modos de direccionamientos No se permite la
instrucción MOV de segmento a segmento. No se permite que
el registro destino sea el segmento de código CS. No son
peremidos tamaños mezclados de registros.
2.5.1 Direccionamiento de registro Transfiere una copia de un
byte o palabra desde el registro o localidad de memoria fuente
hacia el registro o localidad de memoria destino. Ejemplo: MOV
AX,BX Copia el contenido del reg. DX al reg. CX. MOV AX,BX Reg.
BX Reg. AX Generación de la dirección Fuente
Destino En los 386 y posteriores es posible transferir una
palabra doble
2.5.1 Direccionamiento de registro Ejemplos: MOV AL,BL Copia BL
en AL. MOV AX,CX Copia CX en AX. MOV SI,DI Copia DI en SI. MOV
BX,ES Copia ES en BX MOV ES,DS No es permitido MOV BL,DX No es
permitido MOV CS,AX No es permitido
2.5.2 Direccionamiento inmediato Transfiere el dato (byte o
palabra) inmediatamente al registro o localidad de memoria
destino. Ejemplo: MOV CH,3AH Copia el contenido del reg. DX al
reg. CX. MOV CH,3AH 3AH Reg. CH Generación de la
dirección Fuente Destino En los 386 y posteriores es
posible transferir una palabra doble
2.5.2 Direccionamiento inmediato Ejemplos: MOV BL,44 Copia 44
dec. en BL MOV AX,44H Copia 0044H en AX MOV SI,0 Copia 0000H en
SI MOV AL,’A’ Copia A ASCII en AL MOV
AX,’AB’ Copia BA ASCII en AX
2.5.3 Direccionamiento directo Se aplica a una istrucción
MOV entre una localidad de memoria y AL, Ax o EAX. La
dirección está formada por la suma del
desplazamiento más la dirección dada por defecto en
el segmento de datos. Ejemplo: MOV AL,[1234H] Copia el contenido
de la localidad de mem. 11234H a AL. MOV [1234H],AX Reg. AX
Dirección [11234H] Generación de la
dirección Fuente Destino Cuando DS=1000 DS x 10H +
Desplazamiento 10000H + 1234H
2.5.4 Direccionamiento indirecto por registro Permite direccionar
cualquier localidad de memoria mediante una dirección de
desplazamiento contenida en: BP, BX, DI y SI. Ejemplo: MOV
[BX],CL Copia el contenido del reg. CL a la localidad de memoria
direccionada por BX, en DS. MOV [BX],CL Reg. CL Dirección
[10300H] Generación de la dirección Fuente Destino
Cuando DS=1000 DS x 10H + BX 10000H + 0300H
2.5.5 Direccionamiento base-más-índice Se utiliza
un reg. base (BP o BX) y un reg. índice (DI o SI) para
direccionar indirectamente la memoria. Ejemplo: MOV [BX+SI],BP
Copia el contenido del reg. BP a la dirección de mem.
direccionada por BX + SI en el seg. de datos. MOV [BX+SI],BP Reg.
BP Dirección [10500H] Generación de la
dirección Fuente Destino Cuando DS=1000 DS x 10H + BX + SI
10000H + 0300H + 0200H
2.5.6 Direccionamiento relativo a registro Los datos de un
segmento de memoria son direccionados sumando el desplazamiento
al contenido de un registro base o índice (BP, BX, DI o
SI). Ejemplo: MOV CL,[BX+4] Copia el contenido de la localidad de
mem. del DS direccionada por BX más 4 en CL. MOV CL,[BX+4]
Reg. CL Dirección [10304H] Generación de la
dirección Fuente Destino Cuando DS=1000 DS x 10H + BX + 4
10000H + 0300H + 4
2.5.7 Direccionamiento relativo a base-más-índice
Se utiliza un reg. base (BP o BX) y un reg. índice (DI o
SI) más un desplazamiento para formar la dirección
de memoria. Es utilizado a menudo para direccionar un arreglo
bidimensional de datos de memoria. Ejemplo: MOV ARRAY[BX+SI],DX
Copia DX a la localidad de mem del DS direccionada por la suma de
ARRAY, BX y SI. MOV ARRAY[BX+SI],DX Reg. DX Dirección
[11500H] Generación de la dirección Fuente Destino
Cuando DS=1000, ARRAY=1000H DS x 10H + ARRAY + BX + SI 10000H +
1000H + 0300H + 0200H
2.5.8 Direccionamiento índice escalado Exclusivo para
procesadores x386 y posteriores. Utiliza dos registros de 32 bits
(uno base y otro ídice). El reg. índice es
multiplicado por un factor de escalamiento 1X, 2X, 4X u 8X. El
factor 1X está implicito. 2X es empleado para direccionar
arreglos de mem. de palabras de 16 bits. 4X para palabras dobles
y 8X para areglos de mem. de palabra cuádruple. Ejemplo:
MOV [EBX+2x ESI],AX Copia AX en la loc. De mem. Del DS
direccionada pro la suma EBX más dos veces ESI. MOV
[EBX+2x ESI],AX Reg. AX Dirección [10700H]
Generación de la dirección Fuente Destino Cuando
DS=1000, EBX=300H, ESI=200H DS x 10H + EBX + 2 x ESI 10000H +
00000300H + 00000400H