Interprete_80x86

Páginas: 6 (1420 palabras) Publicado: 17 de octubre de 2015
Interprete de código de
16 bits 80x86

Diagrama Simplificado
8

Ducto de Datos
8

Puertos
Paralelos

8

AD0-AD7

uC
Puerto
Serie

D0-D7

A8-A15
ALE

8
2

A0-A7

8

A8-A15

8

8

Latch

CS
WR
RD

RAM
CS
WR
RD

2

Memoria
Serie

Memoria

Ducto de Direcciones

MOV AX,BX
ADD AX,DX
OUT DX,AL

1

Descripción

Interprete
Memoria
Datos
Lee y Escribe
a Memoria

Memoria
Programa
Lee
Instrucciones

3Interprete

1

2

Lee y Escribe
a Registros

Registros

2

Interprete
Memoria
Datos
Lee y Escribe
a Memoria

Memoria
Programa
Lee
Instrucciones

3
Interprete
Arreglo de Bytes

1

Arreglo de Bytes

2

Lee y Escribe
a Registros

Registros
Estructura de
Registros

Interprete
Memoria
Programa

Lee
Instrucciones

1

Memoria
Datos

Decodificación
Lee y Escribe a
Memoria

Ejecución
Arreglo de Bytes

3Interprete

BYTE Codigo[ CODE_SIZE]

2

Lee y Escribe a
Registros

Arreglo de Bytes
BYTE Memoria[ MEM_SIZE]

Registros
Estructura de
Registros
Reg_t Registro[8]
/* Flags, IP, CS, DS, ES, SS */

3

Interprete
Direcciones Lógicas
SEGMENT:OFFSET

Direcciones Físicas
Memoria
Seg*10h + Desp

x = ReadMem( Seg, Desp)

Decodificación

Ejecución

Seg*10h + Desp

WriteMem( Seg, Desp, x )

Interprete
Seg*10h +Desp

Arreglo de Bytes
BYTE Memoria[ MEM_SIZE]

Registros
Registros
Generales

AH
BH

AL

CH

CL

BL

DH
Registros
Apuntadores
y de Índice

DL

SP
BP
DI
SI
CS

Registros
de
Segmento

DS
SS
ES
IP

Registros
De Banderas

Banderas

4

Instrucciones (1 o 2 bytes)

Instrucciones (2, 3 o mas bytes)

5

Instrucciones

Instrucciones

6

Instrucciones

Ejemplo:

Campos

Código

oper

Mnemónico
reg

01000000

INC AX

41h

01000 001

INC CX

47h

01000 111



40h

INC DI

Decodificación y Ejecución
Ejemplo:
switch (codigo){



case 0x40:

AX++; /* incrementa AX */
break;

case 0x41:

CX++; /* incrementa cx */
break;

:
case 0x47:

DI++; /* incrementa cx */
break;

}

7

Decodificación y Ejecución
Ejemplo:
/* a) Tener un arreglo de registros que conforman a AX, CX etc. */
T_RegistroRegistro[8];
/* b) Tener un registro de instrucción formado por campos de bits */
/* teniendo así: Codigo.oper y Codigo.reg
/* ahora si */



*/

#define INC_R16 0x08

if ( Codigo.oper == INC_R16
0x08
Registro[ Codigo.reg ]++;

)

INC Reg16
01000 reg

Esquema de Registros

Registros
Generales
Registros
Apuntadores
y de Índice

Registros
de
Segmento

AL
BL
CL
DL

AH
BH
CH
DH
SP
BP
DI
SI

CS
DS
SS
ES
IP

8 Esquema de Registros

DIR. LÓGICA

CÓDIGO

MNEMÓNICO

136E:0100
136E:0102

FEC0
FEC4

INC
INC

AL
AH

136E:0108

FE060001

INC

BYTE PTR [0100]

136E:0104

FF060001

INC

WORD PTR [0100]

Declaración de Registros
#define WORD unsigned int
#define BYTE unsigned char
union u_reg
WORD
BYTE
BYTE

{
w;
L;
H;

/* Registro de 16 bits
/* Registros de 8 bits
/* Registros de 8 bits

};

*/
*/
*/

Ejemplo
:/* declarando a AX como:

*/

union u_reg AX;

w

Dir. X

L

Dir. X+1

H

Memoria

/* se puede accesar como
AX.w = 0x1234; /* 16 bits
/* 8 bits */
AX.L = 0x23;
AX.H = 0xef;

/* AL
/* AH

*/
*/

*/
*/

9

Declaración de Registros
#define WORD unsigned int
#define BYTE unsigned char

union u_reg
WORD
BYTE
BYTE
BYTE
};

w

{
w;
b[2];
L;
H;

Dir. X

/* Registro de 16 bits
/* Registros de 8 bitsEjemplo:

b[0]
b[1]

Dir. X+1

*/
*/

Memoria

/* declarando a AX como:
union u_reg AX;

*/

/* se puede accesar como
AX.w = 0x1234; /* 16 bits

*/
*/

/* 8 bits */
AX.b[0] = 0x23;
AX.b[1] = 0xef;

*/
*/

/* AL
/* AH

Declaración de Registros
#define WORD unsigned int
#define BYTE unsigned char
union u_reg {
WORD w;
BYTE b[2];
};

/* Registro de 16 bits
/* Registros de 8 bits

*/
*/

/* nuevo tipo dedato */
typedef union u_reg Registro;
/* Ejemplo de Acceso

*/

Registro AX;
AX.w = 0x1234;
AX.b[0]= 0xff;
AX.b[1]= 0x3f;

/* Como registro de 16 bits
/* Como registro de 8 bits (baja)
/* Como registro de 8 bits (alta)

*/
*/
*/

10

Declaración de Registros
#define WORD unsigned int
#define BYTE unsigned char

union u_reg {
WORD w;
BYTE b[2];
};

/* Registro de 16 bits
/* Registros de 8 bits...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS