Modos de direccionamiento

Anuncio
ESTRUCTURA DE
MICROPROCESADORES
8086: Instrucciones y Modos
de direccionamiento
Profesor Ing. Johan Carvajal Godínez
JCG 2010
Agenda de la clase
• Definición
• Diseño de instrucciones
8086
• Modos de direccionamiento
8086
• Set de Instrucciones 8086
JCG-2009
Definición
• Conjunto de instrucciones: es la parte
de la arquitectura del microprocesador
relacionada a la programación del
dispositivo. El conjunto de instrucciones
también describe:
– Tipos de datos que se pueden manejar
– Lista instrucciones que se pueden ejecutar
– Registros disponibles para programador
– Modos de direccionamiento
– Manejo de excepciones
– Manejo de I/O
– Códigos de operación (op-codes)
JCG-2009
Diseño del set de instrucciones
• Compilación del set de
instrucciones
–Decodificación por hardware
• Estructuras “Hard wired”
–Decodificación por tablas
• Memorias utilizadas para generar
opcodes
• Más flexible
JCG-2009
Micro arquitectura vs. ISA
• Microarquitectura es la manera en
que se implementan a nivel de
hardware el set de instrucciones.
– Un mismo set de instrucciones se
puede implementar físicamente
diferente: Diferentes microarquitecturas
puedes soportar mismo set instrucciones
• Ejemplo: X86 Intel vs. X86 AMD
JCG-2009
Densidad del código
• Es una característica que describe la forma en la instrucción se
codifica para realizar una o múltiples funciones con una sola
directriz
– CISC
• Soporta programación de “alto nivel”
• Integra modos de direccionamiento complejos
• Tamaño de memoria de código se reducía
• Arquitectura compleja de implementar en HW
– RISC
• Instrucciones simplificadas y de largo constante
• Orientada a Microarquitectura “pipelined”
• Favorece el procesamiento distribuido
– “CRISC”
• Instrucciones CISC que se convierten en secuencias RISC
• Unidades de decodificación dividen las instrucciones CISC
– MISC
• Múltiples instrucciones simples empaquetadas en un
código
• Implementaciones de hardware muy sencillas, muy difícil
compilar.
JCG-2009
Construccion del lenguaje maquina X86
• Se construye a partir de las directrices
del programa: Instrucciones
• El primer byte representa OpCode
– Cada OpCode se asocia a una operación
• Los bytes adicionales son los que
especifican fuente de datos para
operación, destino de resultado, etc
JCG-2009
Instrucciones de formato variable X86
• El significado de los bits varía de
instrucción a instrucción
• La longitud del micro código es variable
de acuerdo al tipo de instrucción
• Formato de instrucción básico para 8086
Byte bajo
Opcode
Byte alto
d w mod
reg
r/m
Parte baja desplazamiento
Parte alta desplazamiento
Parte Baja dato
Parte alta dato
JCG-2009
Códigos
digos de operación
operaci n
Opcode
d w
• Los códigos de operación para 8086
miden 6, 7, o 8 bits
– Bit de dirección – lo usan las instrucciones que
codifican un registro como uno de sus operandos.
• 1 = el registro es destino, 0 = el registro es fuente
– Bit de ancho – se usa para distinguir el largo del
operando a ser manipulado.
• Valor = 0 byte, / Valor = 1 Word
• Las operaciones de 7 bits no usan bit de
dirección
• Las operaciones de 8 bits no usan ni bit
de dirección ni bit de ancho
JCG-2009
mod/reg/r/m
mod
reg
r/m
• El segundo byte de algunas
instrucciones se divide en tres
campos
– reg+ Bit W (en el byte de OpCode):
especifica el registro a ser utilizado
• Si la operación solo especifica un registro
operando, el bit d especifica si el registro
es destino o es fuente.
• Si la operación necesita dos operandos el
campo reg especifica el registro destino.
JCG-2009
reg
reg
000
001
010
011
100
101
110
111
w=1
AX
CX
DX
BX
SP
BP
SI
DI
w=0
AL
CL
DL
BL
AH
CH
DH
BH
•reg (3 bits) contiene un
valor entre 0 y 7
•Según sea el valor de
W, se selecciona uno de
los ocho registros como
un operando usado por
las instrucción
JCG-2009
r/m
• r/m (3 bits) se interpreta según el
valor del campo mod (2 bits)
– mod = 11r/m=(mismo código que reg)
• El segundo operando es el registro
especificado
– mod = 00 r/m=110
• El segundo argumento es una dirección
especificada en los siguientes dos bytes
de instrucción: “direct near addressing”DS:offset
JCG-2009
mod/r/m
•Cualquier otra
mod r/m mode
combinación especifica
00 110 direct
direccionamiento
00 --- no disp
Indirecto.
01 all byte disp
–Target Address =
[BX/BP]+[SI/DI] +
10 all word disp
disp
11 all register
–Mod especifica el
(ver tabla adelante)
tamaño del
desplazamiento que se
codifica en los
siguientes uno-dos
bytes de la instrucción
JCG-2009
Modos de direccionamiento indirecto
r/m
000
001
010
011
100
101
110
111
seg
DS
DS
SS
SS
DS
DS
SS
DS
addr
BX+SI
BX+DI
BP+SI
BP+DI
SI
DI
BP
BX
•si mod = 01 o 10
–Se agrega
desplazamiento
•si mod = 00
–no hay
desplazamiento
•Excepción: mod = 00
y r/m = 110
–Se usa
direccionamiento
directo por medio de DS
y un offset de 16 bits
JCG-2009
Ejemplo de código
c digo de maquina
0000
0002
000A
00
0000
0002
0004
0008
000C
000E
0011
0015
0018
001A
0020
8B
8A
8B
8A
8B
A0
8A
BB
B1
C7
C6
DF
F9
1E 0000
26 0002
12
0002 R
26 0002
0003
03
06 0000
06 0002
R
R
R
R 0064
R FF
JCG-2009
a dw 10
b db ?
.code
mov bx,di
mov bh,cl
mov bx,a
mov ah,b
mov dx,[si][bp]
mov al,b
mov ah,b
mov bx,3
mov cl,3
mov a,100
mov b,255
Modos de direccionamiento
Se emplea la
instrucción MOV
para manejo en
cualquiera de los
modos de
direccionamient MOV AX , BX
o
d e s tin o
JCG-2009
o rig e n
Desarrollo de modos de direccionamiento
-Durante el inicio de la era del micro, se
consideraba que una mayor cantidad de
modos de direccionamiento era más
beneficioso para el programador
-Esto es cierto para
implementaciones totalmente
desarrolladas en ensamblador, pero no
para aquellas generadas por
compiladores
JCG-2009
Direccionamiento por registo
Tranfiere una copia de
un byte o palabra de
un registro al registro
o posición de memoria
destino
MOV AX , BX
d e s tin o
o r ig e n
Re g is tro BX
Re g is tro AX
o r ig e n
d e s tin o
JCG-2009
Direccionamiento inmediato
Transfiere un
dato inmediato
al registro o
posición de
memoria
destino
MOV CH , 3 AH
d e s tin o
o r ig e n
3 AH
Re g is t ro AX
o r ig e n
d e s tin o
JCG-2009
Direccionamiento directo
Mueve un
byte o palabra
entre una
posición de
memoria y un
registro
MOV [1 2 3 4 ], AX
d e s tin o
o r ig e n
FFFFF
DS*1 0 H+ DISP
1 0 0 0 0 H+ 1 2 3 4 H
Me m o r ia
12 34H
00 000
Re g is tro AX
o rig e n
JCG-2009
d e s t in o
Direccionamiento de registro indirecto
Mueve un byte o
palabra entre una
posición de
memoria y un
registro
[BX] , CL
MOV
d e s tin o
o r ig e n
FFFFF
Me m o r ia
Re g is tro CL
10 300 H
o r ig e n
00 000
d e s tin o
DS*1 0 H+ BX
1 0 0 0 0 H+ 3 0 0 H
Re g is tro BX=
0300H
JCG-2009
Direccionamiento de base má
ás índice
Mueve un byte
o palabra entre
registro y una
posición de
memoria
Re g is tro SP
o r ig e n
MOV [BX+ SI], SP
d e s tin o
o r ig e n
FFFFF
Re g is tro BX=
0300H
Me m o ria
10 500 H
Re g is tro SI=
0200H
00 000
DS*1 0 H
10000H
d e s tin o
Cá lc u lo d ire c c ió n
JCG-2009
Direccionamiento de registro relativo
Mueve un byte
o palabra entre
una posición de
memoria y un
registro
MOV
CL , [BX+ 4 ]
d e s tin o
o r ig e n
FFFFF
Re g is t ro CL
Me m o r ia
10 304 H
Re g is t ro BX=
0300H
00 000
O r ig e n
4
DS*1 0 H
10000H
Cá lc u lo d ire c c ió n
JCG-2009
d e s t in o
Direccionamiento base relativa+ índice
Mueve un byte
o palabra entre
un registro y
una posición de
memoria
MOV ARRAY[BX+ SI] , DX
d e s tin o
o r ig e n
FFFFF
Re g is tro DX
11 500 H
Re g is tro BX=
0300H
d e s tin o
Me m o r ia
00 000
Or ig e n
ERROR
Re g is tro SI=
0200H
ARRAY= 1 0 0 0 H
DS*1 0 H
10000H
Cá lc u lo d ire c c ió n
JCG-2009
Tipos de Instrucciones 8086
• Transferencia de Datos
–
–
–
–
Generales
mov ax, [DAT1] ;ax obtiene un valor de mem
Cadenas
cmpsb ;si DS:SI=ES:DI entonces ZF=1
Propósito especial
chg ax, bx ;intercambio de valores
Entrada-Salida
• Aritmético-Lógicas
–
–
–
–
–
Enteros
add ax, bx
;ax tendrá ax+bx
ASCII, BCD
aaa
;cambia ASCII # a entero
Punto flotante fadd DAT
;ST obtiene ST+DAT
Lógicas
and
ax, bx
;ax obtiene ax AND bx
Desplazamiento ror ax, 2
;ax tendrá shifted-2 right
• Control de Flujo
–
–
–
–
–
–
jnz
LABEL1
Saltos
Interrupción
int
21h
Subrutina
call SUB1
Modificar Banderas cli
Congelar operación hlt
No Operación nop
JCG-2009
;if ZF=1 then IP=LABEL1
;llama Interrupción 21h
;llama subrutina, SUB1
;si es zero
;congela la operación
; no hace nada
Listado de instrucciones 8086/8088
AAA, AAD, AAM, AAS, ADC, ADD, AND
CALL, CBW, CLC, CLD, CLI, CMC, CMP, CMPS, CMPXCHG
CWD, DAA, DAS, DEC, DIV, ESC, HLT, IDIV
IMUL, IN, INC, INT, INTO, IRET/IRETD
Jxx, JCXZ/JECXZ, JMP
LAHF, LDS, LEA, LES, LOCK, LODS, LOOP
MOV, MOVS, LOOPE/LOOPZ, LOOPNZ/LOOPNE
MUL, NEG, NOP, NOT, OR, OUT, POP, POPF/POPFD, PUSH
RCL, RCR, PUSHF/PUSHFD
REP, REPE/REPZ, RET/RETF, REPNE/REPNZ
ROL, ROR, SAHF, SAL/SHL, SAR, SBB, SCAS, SHL, SHR
STC, STD, STI, STOS, SUB
TEST, WAIT/FWAIT, XCHG, XLAT/XLATB, XOR
79 Instrucciones
JCG-2009
Instrucciones de transferencia de datos
–Transfieren datos
en forma de bytes,
palabras o dobles
palabras (en
arquitecturas más
modernas).
JCG-2009
Instrucciones de transferencia de datos
IN
LAHF
LEA
LDS
LES
MOV
OUT
POP
POPF
PUSH
PUSHF
SAHF
XCHG
XLAT
Mete dat os al acum ulador desde una I/O
Carga banderas en AH
Carga la dirección efectiva
Carga DS y registro de 16 bits con los datos de m em oria de 32 bits
Carga ES y registro de 16 bit s con los dat os de m em oria de 32 bits
Carga byte, palabra
Saca dat os del acum ulador a un E/S
Recupera una palabra de la pila
Recupera los indicadores de la pila
Salva las palabras en la pila
Salva banderas en la pila
Carga AH en las banderas
Intercam bia byt es y palabras
Em plea AL para entrar a una tabla de conversión
JCG-2009
Instrucciones para cadenas
FFFFF
–Se utilizan para manipular
cadenas de datos en
memoria. Estas pueden ser
de bytes o palabras, de hasta
64 kB de longitud
30 000
2 FFFF
–Utilizan los registros SI y DI
para direccionar datos, y el
CX para contar los bytes o
palabras trabajados.
20 000
1 FFFF
10 000
0 FFFF
00 000
JCG-2009
Instrucciones para cadenas
CMPS
LODS
MOVS
SCAS
STOS
Com paración entre m em oria y m em oria
Cargar el acum ulador
Mover de m em oria a m em oria
Com paración entre m em oria y acum ulador
Alm acenar en el acum ulador
FFFFF
30 000
2 FFFF
20 000
1 FFFF
10 000
0 FFFF
JCG-2009
00 000
Instrucciones aritmé
éticas y ló
ógicas
–Los 8086 pueden:
–-Sumar
–-Restar
–-Multiplicar
–-Dividir
–-AND, OR, TEST
–Datos como bits, bytes,
palabras (dobles palabras
en 386)
JCG-2009
+
Instrucciones aritmé
éticas
AAA
AAD
AAM
AAS
ADD
ADC
CBW
CMP
DAA
DAS
DEC
DIV
IDIV
IMUL
INC
MUL
NEG
SBB
SUB
Ajuste ASCII para sum a
Ajuste ASCII antes para división
Ajuste ASCII para m ultiplicación
Ajuste ASCII para rest a
Sum a dat os entre regist ros o la m em y ot ro reg
Sum a dat os con la bandera de acarreo
Conviert e byte a palabra
Com para los dat os
Ajuste decim al de AL después de la sum a de BCD
Ajuste decim al de AL después de una rest a BCD
Decrem ent ación
División sin signo
División con signo
Mult iplicación con signo
Increm enta
Mult iplicación sin signo
Cam bia el signo
Sum a con acarreo
Rest a dat os entre registros o la m em y otro reg
+
JCG-2009
Instrucciones ló
ógicas
–Se utilizan para la
manipulación de
datos al nivel de
bits. Incluyen
operaciones lógicas,
corrimientos y
rotaciones.
JCG-2009
Instrucciones ló
ógicas
AND
NOT
OR
SAR
SHL/SAL
SHR
RCL
ROL
RCR
ROR
TEST
XOR
Y lógica
Invert ir
O lógica
Corrim ient o arit m ét ico a la derecha
Corrim ient o a la izquierda
Corrim ient o lógico a la derecha
Rot ación a la izquierda con acarreo
Rot ación a la izquierda
Rot ación a la derecha con acarreo
Rot ación a la derecha con acarreo
Operación con el AND lógico, solo afect a banderas
O exclusivo
JCG-2009
Suma: modos de direccionamiento
Inst rucción
ADD AL,BL
ADD CX,DI
ADD CL,44H
ADD [ BX],AL
ADD CL,[BP]
ADD BX,[ SI+ 2]
ADD CL,TEMP
Operación
AL= AL+ BL
CX= CX+ DI
CL= CL+ 44H
La posición de m em oria direccionada
por BX contendra el valor alm acenado
ahí sum ado al valor del regist ro AL
En el registro CL se alm acenara el valor
de dicho regist ro m ás el valor de la
posición direccionada por BP
Alm acena en BX su valor m ás el valor
direccionado por el registro SI con un
desplazam ient o de 2
Alm acena en CL la sum a de su valor
m ás el valor en el segm ent o de dat os
direccionado por TEMP
En un ISA CISC, esta operación por
ser tan común, cuenta con diversos
modos de direccionamiento
JCG-2009
Efecto de operaciones aritmé
ética en FR
15
14
13
12
11
10
9
8
7
6
0
D
I
T S Z
5
4
A
3
2
P
1
0
C
Siempre que se ejecutan
instrucciones lógicas y
aritméticas, se modifica el
contenido del registro de
banderas
JCG-2009
Suma de incremento
Inst rucción
INC BL
INC BYTE PTR[ BX[
INC DATOS
Operación
BL= BL+ 1
Increm ent a en uno la posición
direccionada por la posición
direccionada por BX
Increm ent a en 1 la posición de
dat os et iquet ada com o DATOS
La operación INC suma 1 a un registro o a
una posición de memoria, pero no a un
registro de segmento.
JCG-2009
Suma con acarreo (ADC)
Instrucción Operación
ADC AL,AH AL= AL+ AH+ acarreo
ADC DH,[BH] DH= DH+ posición direccionada por BH+ acarreo
AL
AH
15
14
13
12
11
10
9
8
7
6
0
D
I
T S Z
5
Σ
4
A
3
2
P
1
0
C
La suma con acarreo suma el bit de bandera
de acarreo con los datos del operando. Se usa
para operaciones de suma de más de 16 bits
JCG-2009
Resta
Ejem plo
SUB CL,BL
SUB CL,44H
DEC BH
SBB AH,AL
Tipo
Resta registros
Resta inm ediata
Decrem ento
Resta con acarreo
(acarreo se resta)
La resta pueden utilizar igualmente cualquier
modo de direccionamiento
JCG-2009
Multiplicació
ón
Existe instrucción
específica para realizar
multiplicación con signo
(IMUL) y sin signo (MUL)
Desbordamiento (O) y
acarreo (C) pueden
modificarse en la
operación
JCG-2009
AL
*
CL
Multiplicació
ón de 8 bits
El multiplicando
siempre se encuentra
en AL, sin importar si
es hecha o n
o con signo
MUL CL
AL
El producto de doble
anchura se coloca en
AX
JCG-2009
*
CL
AX
Multiplicació
ón de 16 bits
El multiplicando
siempre se
encuentra en AX,
sin importar si es
hecha o n
o con signo
MUL BX
AX
MSB
*
El producto de
doble anchura se
coloca en DX:AX
BX
JCG-2009
DX
LSB
AX
Divisió
ón
Con signo (IDIV) o sin
signo (DIV).
El operando simpre tiene
el doble de anchura que
el divisor
Instrucción Operación
DIV CL
DIV CX
AL= AX/CL ; AH= AX MOD CL
AX= DX:AX/CX ; DX= DX:AX MOD CX
Se utilizan los registros
AX, o DX-AX como
operando
JCG-2009
Instrucciones ló
ógicas bá
ásicas
El ISA contien las
instrucciones:
-AND
-OR
-XOR
-NOT
-TEST (forma especial de
AND)
Se pueden usar los
mismos módos de
direccionamiento que las
instrucciones aritméticas
JCG-2009
Instrucció
ón de prueba de bits (TEST)
Realiza una
operación AND
pero modifica
únicamente las
banderas, no los
registros.
Típicamente
usada para
evaluaciones
inmediatas
TEST AL,4
2
JNZ L1
.
.
.
L1: ---
JCG-2009
; Evalua bit
Control de Flujo
Incluyen saltos,
procedimientos e
interrupciones y operaciones
de retorno
a d d a ,b
ca ll x
.
.
x: xo r
x,y
.
JCG-2009
Control de Flujo
INT
INT 3
INTO
IRET
JA
JAE
JB
JBE
JC
JE/JZ
JG
JGE
JL
Int errum pir
Int errupción t ipo 3
Int errupción por sobreflujo
Ret orno de int errupción
Brinca si es m ayor
Brinca si es m ayor o igual
Brinca si es m enor
Brinca si es m enor o igual
Brinca si hay acarreo
Brinca si es igual o salt ar si es cero
Brinca si es m ayor que
Brinca si es m ayor o igual
Brinca si es m enor que
JCG-2009
a d d a ,b
ca ll x
.
.
x: xo r
x,y
.
Control de Flujo
JLE
JMP
JNC
JNE/JNZ
JNO
JNP
JNS
JO
JP
JS
LOOP
LOOPE
LOOPNE
JCXZ
RET
Brinca si es m enor o igual
Brinca a ot ra part e del program a
Brinca si no hay acarreo
Brinca si no es igual o si no es cero
Brinca si no hay desbordam ient o
Brinca si no t iene paridad
Brinca si no es signo posit ivo
Brinca si hay desbordam ient o
Brinca si hay paridad (par)
Brinca si t iene signo
Repit e el ciclo CX veces
Form ar ciclo m ient ras sea igual
Form ar ciclo m ient ras no sea igual
Brinca si CX= 0
Ret orna de un procedim ient o
JCG-2009
a d d a ,b
ca ll x
.
.
x: xo r
x,y
.
Operaciones con banderas
-Habilitan y deshabilita
interrupciones
-Modifican los bits de Bandera
-Sincronizan los eventos
externos
15
14
13
12
11
10
0 D
9
8
7
6
I T S Z
JCG-2009
5
4
A
3
2
P
1
0
C
Instrucciones con banderas
ARPL
CLCL
CLD
CLI
CMC
CTS
ESC
HLT
LAR
LGDT
LIDT
LLDT
LOCK
LSL
Ajust e grado solicit ado de privilegio
Borrar bandera de acarreo
Habilit ar increm ent o aut om át ico
Deshabilit ar t erm inal INTR
Com plent a bandera de acarreo
Borra bandera de conm ut ación t area
Inst rucción para el coprocesador
Alt o hast a que se reinicialice o exist a INT
Carga derechos de acceso
Carga regist ros de t abla de descript ores globales
Carga t abla de regist ros descript ores de INT
Carga t abla de regist ros descript ores locales
Cont rola la t erm inal LOCK del 8086
Carga lím it e de segm ent o
15
14
13
12
11
10
9
0
D
I T S Z
JCG-2009
8
7
6
5
4
A
3
2
P
1
0
C
Operaciones con Banderas
LTR
NOP
SGDT
SIDT
SLDT
STC
STD
STI
STR
VERR
VERW
WAIT
15
Carga regist ro de t area
No operación
Alm acena t abla de regist ros de descript ores globales
Alm acena t abla de regist ros de descript ores int errup.
Alm acena t abla de regist ros de descript ores locales
Act iva bandera de acarreo
Seleccionar m odo de decrem ent o aut om át ico
Habilit ar int errupciones
Alm acenar regist ro de t area
Verificar acceso para lect ura
Verificar acceso para escrit ura
Espera a que la t erm inal TEST= 0
14
13
12
11
10
0 D
9
8
7
6
I T S Z
JCG-2009
5
4
A
3
2
P
1
0
C
Instrucciones de desplazamiento
Inst rucción
SHL AX,1
SHR BX,12
SAL DATOS1,CL
SAR SI,2
Función
Desplazam iento
Desplazam iento
Desplazam iento
Desplazam iento
lógico a la izquierda 1 posición
lógico a la derecha 12 posiciones
aritm ético izquierda CL posiciones
aritm ético derecho 2 posiciones
JCG-2009
Comparació
ón (CMP)
CMP AL,10H
JA ETIQUETA
Se trata de una resta que solo cambia
los bits de bandera
Usualmente se usa con los saltos
condicionales JA (salto si es mayor) o
JB (salto si es menor)
JCG-2009
Comparació
ón de cadenas SCAS
MOV
DI, OFFSET_DATA
CLD
MOV CX,100
XOR AL,AL
REPNE SCASB ; localiza un cero en el string
Esta instrucción compara AL o AX con un
bloque de bytes o palabras. El segmento
es direccionado por DI
Con cualquier prefijo de repetición
(REPNE,REPE) CX se decrementa hasta
terminar de repetir
JCG-2009
Comparació
ón de cadena a cadena CMPS
MOV SI, OFFSET_LISTA
MOV DI, OFFSET_TABLA
CLD
MOV
CX,10
REPE
CMPSB
Esta instrucción compara el bloque direccionado con
SI con un bloque direccionado por DI
Con cualquier prefijo de repetición (REPNE,REPE) CX
se decrementa hasta terminar de repetir
Ejemplo: comparar hasta que no sean iguales
JCG-2009
Operaciones típicas (1)
Las operaciones pueden ser a nivel de
BYTE (8), WORD(16) y DWORD(32)
JCG-2009
Multiplicación y división de enteros
Los operandos deben ser registros u
operandos de memoria
JCG-2009
FIN
JCG-2009
Descargar