PDF de programación - Unidad 2 Modelo de Programación del 80x86 de Intel

Imágen de pdf Unidad 2 Modelo de Programación del 80x86 de Intel

Unidad 2 Modelo de Programación del 80x86 de Intelgráfica de visualizaciones

Actualizado el 17 de Enero del 2019 (Publicado el 1 de Enero del 2019)
1.832 visualizaciones desde el 1 de Enero del 2019
677,0 KB
65 paginas
Creado hace 10a (29/11/2013)
(2)

Unidad 2

Modelo de Programación

del 80x86 de Intel

SISTEMAS BASADOS EN MICROPROCESADORES

Grado en Ingeniería Informática

EPS - UAM

(2)

Índice

2. Modelo de programación del 80x86 de Intel.

Familia 80x86 como caso particular.
Registros internos y arquitectura del 80x86.

2.1.
2.2
2.3. Acceso y organización de la memoria.
2.4. Modos de direccionamiento.
2.5. Directivas y operadores del ensamblador del 80x86.
2.6. Estructura de un programa en ensamblador.
2.7.
2.8. Mapa de memoria del sistema PC.
2.9.

Instrucciones del ensamblador.

Interrupciones: mecanismo y vectores de interrupción.

(2)

2.1. Familia 80x86 como caso particular

Microprocesadores aparecen en los 70 (1971-…) con 4 bits
y luego 8 bits (8085 con 64KB de memoria).

Inventados por Intel como circuitos integrados digitales y
programables para sustituir circuitos digitales cableados.

Familia 80x86 nace en 1978 con el 8086 (16 bits y 1 MB
memoria). Continúa con: 80186, 80286, 80386, 80486, …

En paralelo aparece 8088 (ordenador personal de IBM o
PC): 8086 de 8 bits.

Competidor inicial: Motorola 6800 (8 bits) y 68000 (16 bits).

Intel garantiza compatibilidad de sus microprocesadores
desde los inicios e introduce la segmentación de memoria
(segmentos de 64 KB)

Tecnología CISC vs. RISC (más actual)

(2)

2.2. Registros internos y arquitectura

del 80x86 (I)

AH
BH
CH
DH

AL
BL
CL
DL

SP
BP
SI
DI

REG. TEMPORALES

ALU

REG. FLAGS

REGISTROS
GENERALES

BUS DATOS ALU

(16 BITS)

UNIDAD

EJECUCIÓN

(EU)

BUS DIRECCIONES (20 BITS)

SUMADOR

BUS DATOS

(16 BITS)

CS
DS
SS
ES

IP

OTROS REG.

COLA

INSTRUCCIONES

BUS

MUX

LÓGICA
CONTROL

DEL
BUS

UNIDAD DE EJECUCIÓN

UNIDAD DE INTERFAZ CON EL BUS

(2)

2.2. Registros internos y arquitectura

del 80x86 (II)

Registros de datos

AX (AH-AL), BX (BH-BL), CX (CH-CL), DX (DH-DL)

(2)

2.2. Registros internos y arquitectura

del 80x86 (III)

Registros de datos

AX (AH-AL), BX (BH-BL), CX (CH-CL), DX (DH-DL)

Actúan como acumuladores en instrucciones de
transferencia, lógicas y aritméticas.
Cada uno de 16 bits, divisible en 2 registros de 8 bits.
Tareas específicas en algunos casos (para cualquier
uso si están libres):

AX: Multiplicar, dividir y operaciones de E/S.
BX: Registro base para direccionamiento indirecto

(apunta a la base de una tabla)

CX: Contador de bucles.
DX: Multiplicar, dividir, operaciones de E/S.

(2)

2.2. Registros internos y arquitectura

del 80x86 (IV)

Registros punteros: SP , BP , SI , DI

(2)

2.2. Registros internos y arquitectura

del 80x86 (V)

Registros punteros: SP , BP , SI , DI

Intervienen en el direccionamiento de memoria como
desplazamientos (offsets) respecto a las zonas de
memoria indicadas en registros de segmento.
SP (Stack Pointer): Usado junto al registro de segmento
de pila SS. Interviene en:
Llamadas a subrutinas
Interrupciones
Instrucciones de manejo de pila

BP (Base Pointer): Usado junto al registro de segmento
de pila SS. Útil para acceder a los parámetros de
subrutinas pasados por pila.
SI (Source Index): Usado para indexar tablas en
memoria (lectura). Para cualquier uso si está libre.
DI (Destination Index): Usado para indexar tablas en
memoria (escritura). Para cualquier uso si está libre.

(2)

2.2. Registros internos y arquitectura

del 80x86 (VI)

Registros de segmento: CS , SS , DS , ES

(2)

2.2. Registros internos y arquitectura

del 80x86 (VII)

Registros de segmento: CS , SS , DS , ES

Intervienen en el direccionamiento de memoria indicando
zonas de 64KB de memoria (segmentos).
CS (Code Segment): Indica el segmento de código
máquina (programa). Junto con el puntero de
instrucciones IP constituye el contador de programa.
SS (Stack Segment): Indica el segmento de pila. Junto
con SP o BP indica una posición absoluta de memoria
en la pila.
DS (Data Segment): Indica el segmento principal de
datos (variables globales).
ES (Extra Segment): Indica el segmento adicional de
datos (variable globales).

(2)

2.2. Registros internos y arquitectura

del 80x86 (VIII)

Registro puntero de instrucciones: IP

(2)

2.2. Registros internos y arquitectura

del 80x86 (IX)

Registro puntero de instrucciones: IP

Indica el desplazamiento (offset) dentro del segmento
indicado por CS donde se encuentra la siguiente
instrucción de código máquina que va a ser ejecutada
(contador de programa).

(2)

2.2. Registros internos y arquitectura

del 80x86 (X)

Registro de estado (FLAGS)

(2)

2.2. Registros internos y arquitectura

del 80x86 (XI)

Registro de estado (FLAGS)

Algunos de sus 16 bits indican información de estado
del procesador y de la última operación de la ALU.

15

14

13

12

11
10
OF DF

8
9
IF TF

7
6
S Z

5

3

4
AC

2
P

1

0
C

IF: bit de interrupciones
DF: bit de dirección
OF: bit de overflow

Z: bit de cero
S: bit de signo
TF: bit de trap

C: bit de acarreo
P: bit de paridad
AC: bit de acarreo auxiliar

Las banderas (flags) C, AC, S, P, Z y OF dependen del resultado
de la última operación ejecutada por la ALU.
La bandera IF habilita o deshabilita las interrupciones hardware.
La bandera TF habilita o deshabilita la ejecución “paso a paso”.
La bandera DF incrementa o decrementa los punteros índice en
instrucciones de cadena.
Todos los bits pueden ponerse a 0 o a 1 con instrucciones
específicas.

(2)

2.3. Acceso y organización de la memoria (I)

Memoria física de un sistema basado en 8086 organizada
como 220 posiciones de 1 byte (1 MB).
Memoria física de 1 MB dividida a nivel lógico en
“segmentos” de 64 KB.
Los segmentos empiezan en direcciones múltiplo de 16.
Dos segmentos consecutivos están separados por 16 bytes.
En un programa, las instrucciones suelen estar en un
segmento, los datos en uno o varios segmentos distintos y
la pila en otro (hay casos en que esto no se cumple).
La CPU puede acceder a la vez hasta a cuatro segmentos
distintos (registros CS, DS, ES y SS con valores distintos).
Puede haber solapamiento total o parcial de segmentos
(caso extremo: CS, DS, ES y SS con mismo valor).
El programa puede cambiar en cualquier momento el valor
de los registros de segmento.

(2)

2.3. Acceso y organización de la memoria (II)

Acceso a memoria (modo real)
Hardware: 20 bits de dirección (A19-A0)
Software: 32 bits (16 bits de Segmento y 16 bits de Offset)

DIRECCIÓN FÍSICA = Segmento x 16 + Offset

Bit 19

Bit 15

Bit 0

16 x

+

SEGMENTO

SEGMENTO

0

0

00

OFFSET

DIRECCIÓN FÍSICA

(2) 2.3. Acceso y organización de la memoria (III)

1 byte

00000h

Dirección más
baja del segmento

Registro
segmento

Offset

Dirección accedida

FFFFFh

64 KB
Máximo tamaño
del segmento

(2) 2.3. Acceso y organización de la memoria (IV)

Ejemplos de acceso a memoria (modo real)

(offset)

CS = A783h (segmento)
IP = 403Eh
Dirección física = A783h x 16 + 403Eh =
A783h x 10h + 403Eh =
A7830h + 403Eh = AB86Eh

ES = 54A3h (segmento)
DI = 1F2Bh
Dirección física = 54A30h + 1F2Bh = 5695Bh

(offset)

SS = 4675h
SP = A001h
Dirección física = 46750h + A001h = 50751h

(2)

2.3. Acceso y organización de la memoria (V)

Acceso a memoria desde programas

El acceso puede ser a un byte o dos consecutivos
(una palabra) según el registro que intervenga en la
instrucción.
Ejemplo: si previamente se han ejecutado las
siguientes instrucciones:

mov AX, 2000h
mov DS, AX
el resultado de las siguientes
operaciones es:
mov AX, [455h]
mov AX, [456h]
mov AH, [457h]
mov AL, [458h]

; AX = 2F32h
; AX = 952Fh
; AH = 95h
; AL = E4h

20455h

20456h

20457h

20458h

20459h

32

2F

95

E4

FB

(2)

2.4. Modos de direccionamiento (I)

Siete modos de direccionamiento:

Inmediato
Por registro
Directo
Indirecto
Relativo
Indexado
Implícito

Los modos directo e indirecto consisten en
“punteros” a memoria.

(2)

2.4. Modos de direccionamiento (II)

Direccionamiento inmediato
El operando fuente siempre es un valor y el destino un

registro.

Ejemplos:

mov CL, 3Fh
mov SI, 4567h

; 3Fh ⇒ CL
; 4567h ⇒ SI

Direccionamiento por registro
Ambos operandos son siempre registros.

Ejemplos:

mov DX, CX
mov BH, CL

; CX ⇒ DX
; CL ⇒ BH

(2)

2.4. Modos de direccionamiento (III)

Direccionamiento directo
El offset de la posición de memoria a la que se quiere

acceder se especifica en la instrucción. Por defecto, el
segmento lo indica DS.
Ejemplos si DS = 3000h:

mov DX, [678Ah] ; carga en DL el contenido de la posición

mov AL, [32h]

mov [800h], BL

; de memoria 3678Ah y en DH el
; contenido de la posición de memoria
; 3678Bh.
; carga en AL el contenido de la posición
; de memoria 30032h
; carga en la posición de memoria 30800h
; el contenido de BL.

(2)

2.4. Modos de direccionamiento (IV)

Direccionamiento indirecto por registro
La dirección efectiva del operando está contenida en uno

de los registros BX, BP, SI o DI.

Ejemplo:

mov AX, [BX]

Direccionamiento relativo a base
La dirección efectiva se obtiene sumando un

desplazamiento al registro BX o al BP.

Ejemplos equivalentes si offset de la TABLA es 4:

mov AX, [BX]+4
mov AX, 4[BX]
mov AX, TABLA[BX]
mov AX, [BX+4]

(2)

2.4. Modos de direccionamiento (V)

Direccionamiento indexado
La dirección efectiva se calcula sumando un

desplazamiento al contenido de SI o DI.

Ejemplos equivalentes si offset de la TABLA es 4:

mov AX, [SI]+4
mov AX, 4[SI]
mov AX, TABLA[SI]
mov AX, [SI+4]

Direccionamiento indexado a base
La dirección efectiva se obtiene sumando BX o BP con SI

o DI y/o un offset directo.

Ejemplos:

mov AX, TABLA[BX][SI]
mov AX, TABLA+[BX]+[SI]

(2)

2.4. Modos de direccionamiento (VI)

Direccionamiento relativo
Usado en saltos condicionales: El operando es un
desplazamiento de 8 bits con signo (-128 a 127)
que se suma al puntero de instrucciones IP.
Ejemplos:

jnc 26
jz etiqueta

; si la etiqueta está a una distancia
; mayor o igual que -128 y menor que 128

Direccionamiento implícito
No es necesario indicar el operando (es implícito).

Ejemplos:

cli
stc

; pone a 0 el flag de interrupciones
; p
  • Links de descarga
http://lwp-l.com/pdf14747

Comentarios de: Unidad 2 Modelo de Programación del 80x86 de Intel (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad