Microprocessadores Intel Enfim, a dura realidade (ou: que saudades dos simuladores….)

Download Report

Transcript Microprocessadores Intel Enfim, a dura realidade (ou: que saudades dos simuladores….)

Microprocessadores Intel
Enfim, a dura realidade
(ou: que saudades dos simuladores….)
Chip
8088(6)
80186
80286
ALU
16
16
16
reg
16
16
16
dado
8 (16)
16
16
End.
20
20
24
386SX
80386
486SX
80486
486DX2
32
32
32
32
32
32
32
32
32
32
16
32
32
32
32
32
32
32
32
32
DX4
32
32
32
32
Pentium
32
32
64
32
Pentium Pro
32
32
64
36
Pentium MMX
32
32
64
32
Pentium II
32
32
64
36
Cache
-
Características
micro de 16 bits
8086 & circuitos de apoio
memória virtual segmentada e modo
protegido
80386 simplificado
MMU, 32 bits e modo virtual
8K
80486 sem FPU
8K
80386 com FPU
8K
486 com frequência interna de clock
dupla
8K instr.
486 com frequência interna de clock
8K dado
tripla
8K instr.
2 pipelines inteiros, FPU de 64 bits,
8K dado
lógica de previsão de desvios
8K instr.
Pentium, mais renomeação de
8K dado
registradores e execução fora de
256Knível2 sequência
16K instr. Pentium, com instruções extras para
16K dado paralelismo (SIMD)
16K instr. Pentium Pro com MMX
16K dado
512Knível2
Chip
Pentium
ALU reg dado
32
32 64
Pentium Pro
32
32
64
Pentium MMX
32
32
64
Pentium II
32
32
64
Pentium
Celeron
II 32
32
64
Pentium
Celeron A
II 32
32
64
Pentium II Xeon 32
32
64
Pentium III
32
32
64
Pentium 4
32
32
64
End. Cache
32
8K instr.
8K dado
36
8K instr.
8K dado
256Knível2
32
16K instr.
16K dado
36
16K instr.
16K dado
512Knível2
36
16K instr.
16K dado
0K nível 2
36
16K instr.
16K dado
128Knível2
36
16K instr.
16K dado
cache nív.2
36
16K instr.
16K dado
cache nív.2
36
12K instr.
8K dado
cache nív.2
Características
2 pipelines inteiros, FPU de 64 bits,
lógica de previsão de desvios
Pentium, mais renomeação de
registradores e execução fora de
sequência
Pentium, com instruções extras para
paralelismo (SIMD)
Pentium Pro com MMX
Pentium II sem cache de nível 2
Pentium II com cache na mesma
frequência da CPU
Pentium II com 512K/1M/2M de cache
na mesma frequência da CPU
Pentium II com instruções extras para
paralelismo de ponto flutuante
Pentium III com mais instruções extras
para paralelismo de ponto flutuante
(SSE2)
Características tecnológicas
Processador
8088(6)
80286
80386
486SX
486DX
486DX2
DX4
Pentium 60/66
Pentium 75/200
Pentium Pro
Pentium MMX
Pentium II
Celeron
Celeron A
Xeon
Pentium III
Pentium III E
Pentium 4
Cache
8K
8K
8K
16K
2x8K
2x8K
2x8K
2x16K
2x16K
2x16K
2x16K
2x16K
2x16K
2x16K
8K
tipo
WT
WT
WT
WT
WB
WB
WB
WB
WB
WB
WB
WB
WB
WB
WB
nível 2
256K
512K
0K
128K
512K-2M
512K
256K
256K
frequência
1
1/2
1
1
1/2
1
1
mult.
1x
1x
1x
1x
1x
2x
2-3x
1x
1,5-3x
2-3x
1,5-3x
3,5-5x
3,5-5x
3,5-5x
3,5-5x
3,5-5x
4,0-9x
3,0-4x
Tensão
5V
5V
5V
5V
5V
5V
3,3 V
5V
3,3 V
3,3 V
1,8-2,8 V
1,8-2,8 V
1,8-2,8 V
1,8-2,8 V
1,8-2,8 V
1,8-2,8 V
1,3-1,7 V
1,3-1,7 V
Transistor
29.000
134.000
275.000
1.185.000
1.200.000
1.100.000
1.600.000
3.100.000
3.300.000
5.500.000
4.100.000
7.500.000
7.500.000
7.500.000
7.500.000
9.500.000
28.100.000
42.000.000
Computadores Pessoais tipo PC
tipos
microprocessador
FPU
barramento de dados
barramento de
endereços
PC XT PC AT PC AT PC AT
386
486
8088
80286 80386 80486
8087
8 bits
80287 80387
16 bits 32 bits
20 bits 24 bits 30 bits
Pentium
P5
Pentium,
MMX
interna interna
32 bits 64 bits
Pentium
P6
Pentium Pro,
II, III, 4
Interna
64 bits
30 bits
33 bits
30 bits
• versão PC 99 disponível em
http://developer.intel.com/design/desguide ou
http://www.microsoft.com/hwdev/pc99.htm.
• Usos distintos (servidores, portáteis, domésticos, estações
de trabalho, etc)
• Configuração básica:
–
–
–
–
–
–
–
–
Pentium II 300 MHz
32 a 64 MBytes de memória
barramento PCI (sem conectores ISA)
duas portas USB
resolução de vídeo de 800 x 600 com 64K cores
suporte a CD ou DVD
modem de 56 Kbps ou placa de rede
opcionais: placas de som, placas aceleradoras 3D, suporte a
infravermelho (IrDA) e IEEE 1394 (barramento serial rápido)
• versão PC 2001 disponível em
http://www.pcdesguide.org.
• Usos distintos (servidores, portáteis, domésticos, estações
de trabalho, etc)
• Configuração básica:
–
–
–
–
–
–
–
–
–
Pentium II 667 MHz (desktop) ou 400 MHz (laptop)
64 a 128 MBytes de memória
barramento PCI (proibição de conectores ISA)
duas portas USB (substituição de portas seriais e paralela)
resolução de vídeo de 1024 x 768 com 32 bits por pixel
suporte a CD ou DVD
modem de 56 Kbps ou placa de rede
placa aceleradora 3D em modelos desktop
opcionais: placas de som, suporte a infravermelho (IrDA) e IEEE
1394 (barramento serial rápido)
Microprocessador Intel 8086
•
•
•
•
Arquitetura de 16 bits
Comunicação com a memória em 16 (8086) ou 8 (8088) bits
Capacidade máxima de memória de 1 MByte
14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
Microprocessador Intel 8086/8088
15
AX
BX
CX
DX
SP
BP
SI
DI
IP
FLAGS
CS
DS
SS
ES
8
AH
BH
CH
DH
7
0
AL
BL
CL
DL
acumulador
base
contador
dado
ponteiro para pilha
ponteiro base
índice fonte
índice destino
apontador de instruções
flags
segmento de código
segmento de dados
segmento de pilha
segmento extra
Microprocessador Intel 8086
•
•
•
•
Arquitetura de 16 bits
Comunicação com a memória em 16 (8086) ou 8 (8088) bits
Capacidade máxima de memória de 1 MByte
14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
8086 - Formação de endereço
15
0
Offset (deslocamento)
CS
DS
SS
ES
15
0
0000
0000
0000
0000
19
0
Endereço Físico
Uso padrão de registradores de segmento
tipo de referência
memória
busca de instrução
pilha
variável
à
segmento
default
CS
SS
DS
segmento
alternativo
BP como base
SS
CS,ES,DS
string fonte
string destino
DS
ES
CS,ES,SS
CS,ES,SS
deslocamento
IP
SP
endereço de
operando
endereço de
operando
SI
DI
Uso padrão de registradores de segmento
Modos de endereçamento (cálculo do deslocamento)
Modo
Imediato
Registrador
Direto
Significado
operando na instrução
operando em registrador
operando na memória, endereçado por deslocamento contido na
instrução
Registrador indireto operando na memória, endereçado por deslocamento contido em
registrador
Indexado (ou base)
operando na memória, endereçado pela soma do conteúdo do
registrador de índice (ou base) com o deslocamento contido na
instrução
Base e indexado com operando na memória, endereçado pela soma do conteúdo do
deslocamento
registrador de índice com o conteúdo do registrador base e com o
deslocamento contido na instrução
Exemplos de modos de endereçamento
(ADD destino, fonte)
Imediato:
ADD CH,5FH
Registrador:
ADD BX,DX
Direto:
ADD WVAR,BX (WVAR é uma referência à memória)
Registrador indireto:
ADD CX,[BX]
Indexado (ou base):
ADD [SI+6],AL
Base e indexado com deslocamento: ADD [BX+DI+5],DX
Microprocessador Intel 8086
•
•
•
•
Arquitetura de 16 bits
Comunicação com a memória em 16 (8086) ou 8 (8088) bits
Capacidade máxima de memória de 1 MByte
14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
• 85 instruções básicas
AAA
AAM
ADC
AND
CBW
CLD
CMC
CMPSB/W
DAA
DEC
ESC
IDIV
IN
INT
IRET
JA,JNBE
JB,JNAE
JC
JE,JZ
JGE,JNL
JLE,JNG
JNC
JNP,JPO
JP,JPE
LAHF
LEA
LODSB/W
LOOPE/Z
MOV
MUL
NOP
OR
POP
PUSH
RCL
REP
REPNE/Z
ROL
SAHF
SAR
SCASB/W
SHR
STD
STOS/W
TEST
XCHG
XOR
ASCII Adjust After Adition
ASCII Adjust After Multiply
Add with Carry
Logical And
Convert Byte to Word
Clear Direction Flag
Complement Carry Flag
Compare strings (Byte, Word)
Decimal Adjust After Division
Decrement
Escape (for FPU)
Signed Divide
Input from Port
Software Interrupt
Interrupt Return (16 bits)
Jump if Above
Jump if bellow
Junp on Carry
Jump if Equal (Zero)
Jump if Greater or Equal
Jump if Less or Equal
Jump if not Carry
Jump if Parity Odd
Jump if Parity Even
Load Flags into AH
Load Effective Address
Load String (Byte, Word)
Loop while Equal
Move Data
Unsigned Multiply
No Operation
Inclusive Or
Pop from Stack
Push into Stack
Rotate with Carry Left
Repeat String
Repeat while not Equal (Zero)
Rotate Left
Store AH into Flags
Shift Arithmetic Right
Scan String (Byte, Word)
Shift Right
Set Direction Flag
Store String (Byte, Word)
Logica Compare
Exchange
Exclusive Or
AAD
AAS
ADD
CALL
CLC
CLI
CMP
CWD
DAS
DIV
HLT
IMUL
INC
INTO
IRETD
JAE,JNB
JBE,JNA
JCXZ
JG,JNLE
JL,JNGE
JMP
JNE,JNZ
JO,JNO
JS,JNS
LDS,LES
LOCK
LOOP
LOOPNE/Z
MOVSB/W
NEG
NOT
OUT
POPF
PUSHF
RCR
REPE/Z
RET,RETF
ROR
SAL
SBB
SHL
STC
STI
SUB
WAIT
XLAT
ASCII Adjust Before Division
ASCII Adjust After Subtract
Add
Call Procedure
Clear Carry Flag
Clear Interrupt Flag
Compare
Convert Word to Double
Decimal Adjust after Subtract
Unsigned Divide
Halt
Signed Multiply
Increment
Interrupt on Overflow
Interrupt Return (32 bits)
Jump if Above or Equal
Jump if Bellow or Equal
Jump if CX is Zero
Jump if Greater
Jump if Less
Jump inconditionally
Jump if not Equal
Jump on Overflow, not Overf.
Jump on Sign, not Sign
Load Far Pointer (DS, ES)
Lock the Bus
Loop
Loop while not Equal
Move String (Byte,Word)
Two’s Complement Negation
One’s Complement Negation
Output to Port
Pop Flags
Push Flags
Rotate with Carry Right
Repeat while Equal (Zero)
Return from Procedure
Rotate Right
Shift Arithmetic Left
Subtract with Borrow
Shift Left
Set Carry Flag
Set Interrupt Flag
Subtract
Wait (coprocessor)
Translate
Microprocessador Intel 8086
•
•
•
•
Arquitetura de 16 bits
Comunicação com a memória em 16 (8086) ou 8 (8088) bits
Capacidade máxima de memória de 1 MByte
14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
• 85 instruções básicas
• co-processador: 8087 (67 instruções básicas)
F2XM1
FADD
FBLD
FCHS
FCOM
FCOMPP
F(N)DISI (*)
FDIVP
FDIVRP
FFREE
FICOM
FIDIV
FILD
FINCSTP
FIST
FISUB
FLD
FLDCW
FLDL2E
FLDLG2
FLDPI
FMUL
FNOP
FPREM
FRNDINT
F(N)SAVE
FSQRT
F(N)STCW
FSTP
FSUB
FSUBPR
FTST
FXAM
FXTRACT
FYL2XP1
Calculates 2^x-1
Add Real
Load BCD
Change Sign
Compare Real
Compare Real and Pop Twice
Disable Interrupts
Divide Real and Pop
Divide Real Reversed and Pop
Free Register
Compare Integer
Integer Divide
Load Integer
Increment Stack
Store Integer
Integer Subtract
Load Real
Load Control Word
Load Value of Log2(e)
Load Value of Log10(2)
Load Value of Pi
Real Multiply
No Operation
Partial Remainder
Round to Integer
Save Coprocessor State
Square Root
Store Control Word
Store Real and Pop
Real Subtract
Real Subtract Reversed and Pop
Test for Zero
Examine
Extract Exponent and Mantissa
Calculates y . log2(x+1)
FABS
FADDP
FBSTP
F(N)CLEX
FCOMP
FDECSTP
FDIV
FDIVR
F(N)ENI (*)
FIADD
FICOMP
FIDIVR
FIMUL
F(N)INIT
FISTP
FISUBR
FLD1
FLDENV
FLDL2T
FLDLN2
FLDZ
FMULP
FPATAN
FPTAN
FRSTOR
FSCALE
FST
F(N)STENV
F(N)STSW
FSUBP
FSUBR
FWAIT
FXCH
FYL2X
(*) – eliminadas a partir do 80287
Absolute Value
Add Real and Pop
Store BCD and Pop
Clear exceptions
Compare Real And Pop
Decrement Stack
Divide Real
Divide Real Reversed
Enable Interrupts
Integer Add
Compare Integer and Pop
Integer Divide Reversed
Integer Multiply
Initialize Coprocessor
Store Integer and Pop
Integer Subtract Reversed
Load Value of 1.0
Load Environment State
Load Value of Log2(10)
Load Value of Loge(2)
Load Value of 0.0
Real Multiply and Pop
Partial Arctangent
Partial Tangent
Restore Saved State
Scale with powers of 2
Store Real
Store Environment State
Store Status Word
Real Subtract and Pop
Real Subtract Reversed
CPU Wait (until FPU ready)
Exchange Registers
Calculates y . log2(x)
Microprocessador Intel 8086
•
•
•
•
•
•
•
•
•
Arquitetura de 16 bits
Comunicação com a memória em 16 (8086) ou 8 (8088) bits
Capacidade máxima de memória de 1 MByte
14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
endereço físico = segmento * 16 + deslocamento
85 instruções básicas
co-processador: 8087 (67 instruções básicas)
sem cache, sem memória virtual
somente opera no modo real
Microprocessador Intel 80186
•
•
•
•
•
•
•
•
Idêntico ao 8086
Comunicação com a memória em 16 bits
Capacidade máxima de memória de 1 MByte
14 registradores
Endereço físico = segmento * 16 + deslocamento
Sete instruções extras (85 + 7 = 92 instruções básicas)
Co-processador: 80187 (idêntico ao 8087)
Sem cache, sem memória virtual
Microprocessador Intel 80286
•
•
•
•
•
•
•
•
•
Modos real (8086) e virtual (modo protegido)
Comunicação com a memória em 16 bits
Capacidade máxima de memória de 16 MByte
14 registradores (os do 8086)
Endereço físico ou virtual
15 instruções extras (92 + 15 = 107 instruções básicas)
Co-processador: 80287
Sem cache
Memória virtual segmentada
Microprocessador Intel 80386
•
•
•
•
Modos real (8086), virtual (protegido) e virtual86
Comunicação com a memória em 16 (SX) ou 32 bits (DX)
Capacidade máxima de memória de 4 GByte
14 registradores (os do 8086, estendidos para 32 bits) e mais
2 registradores de segmento
31
16
15
EAX
EBX
ECX
EDX
AH
BH
CH
DH
ESP
EBP
ESI
EDI
acumulador
base
contador
dado
SP
BP
SI
DI
31
EIP
EF
AL
BL
CL
DL
16
15
ponteiro para pilha
ponteiro base
índice fonte
índice destino
0
IP
FLAGS
apontador de instruções
flags
Registrador de flags (F ou EF)
Flags de status:
CF
Bit 0
vai-um (carry)
PF
Bit 2
paridade (parity)
AF
Bit 4
vai-um auxiliar (auxiliary carry)
ZF
Bit 6
zero
SF
Bit 7
sinal (sign)
OF
Bit 11
overflow
Flags de controle:
TF
Bit 8
trap
IF
Bit 9
interrupt enable
DF
Bit 10
direção (direction)
Flags específicos do 80386:
IOPL
Bits 12 e 13 nível de privilégio de E/S
NT
Bit 14
tarefa aninhada
RF
Bit 16
flag resume
VM
Bit 17
modo virtual
Registradores de segmento
CS
SS
DS
ES
FS
GS
segmento de código
segmento de pilha
segmento de dados
segmento de dados
segmento de dados
segmento de dados
(code segment)
(stack segment)
(data segment)
• Formam endereço físico (modo real)
• Selecionam descritor de segmento (modo protegido)
Microprocessador Intel 80386
•
•
•
•
Modos real (8086), virtual (protegido) e virtual86
Comunicação com a memória em 16 (SX) ou 32 bits (DX)
Capacidade máxima de memória de 4 GByte
14 registradores (os do 8086, estendidos para 32 bits) e mais
2 registradores de segmento
• Endereço físico ou virtual
• 44 instruções extras (107 + 44 = 151 instruções básicas)
• Memória virtual segmentada e paginada (opcional)
Gerência de memória virtual
Questões de memória virtual
• Quando mover um bloco da memória secundária para a
memória primária (real) ?
por demanda
• Quando mover um bloco da memória real para a memória
secundária?
quando faltar espaço na memória real
• qual o tamanho ideal de um bloco?
constante (paginação) ou variável (segmentação)
 onde colocar um novo bloco transferido para a memória
principal?
onde houver área livre (paginação) ou no “melhor” lugar (segmentação)
Microprocessador Intel 80386
•
•
•
•
•
•
•
•
•
Modos real (8086), virtual e virtual86
Comunicação com a memória em 16 (SX) ou 32 bits (DX)
Capacidade máxima de memória de 4 GByte
14 registradores (os do 8086, estendidos para 32 bits) e mais
2 registradores de segmento
Endereço físico ou virtual
44 instruções extras (107 + 44 = 151 instruções básicas)
Memória virtual segmentada e paginada (opcional)
Co-processador: 80387 (67 + 7 -1 = 73 instruções básicas)
Sem cache
Microprocessador Intel 80486
•
•
•
•
•
•
•
•
•
Idêntico ao 386
Modos real (8086), virtual e virtual86
Comunicação com a memória em 32 bits
Capacidade máxima de memória de 4 GByte
16 registradores (os do 80386, também em 32 bits)
Endereço físico ou virtual
6 instruções extras (151 + 6 = 157 instruções básicas)
Memória virtual segmentada e paginada (opcional)
Co-processador: 80487 para 80486SX
integrado no 80486DX
• Com cache de 8 KByte
Microprocessador Intel Pentium
•
•
•
•
•
•
•
•
•
•
Re-estruturação do 486
Modos real (8086), virtual e virtual86
Comunicação com a memória em 64 bits
Capacidade máxima de memória de 4 GByte
16 registradores (os do 80386, também em 32 bits)
Endereço físico ou virtual
5 instruções extras (157 + 5 = 162 instruções básicas)
Memória virtual segmentada (sempre) e paginada (opcional)
Co-processador: integrado
Com cache de 16 KByte (2 x 8 KByte)
Microprocessador Intel Pentium
 2 pipelines para de inteiros, operando em paralelo
 cada pipeline inteiro consta de 5 estágios:
busca de instrução (a partir da cache de instruções),
decodificação de instrução,
geração de endereço,
execução,
escrita (write back).
 FPU também em pipeline (mas não em paralelo)
 Operação super-escalar: mais de uma instrução pronta em um
ciclo de relógio
Instruções paralelizáveis no Pentium
ADD
AND
CALL (immediate)
CMP
DEC
INC
Jcc
JMP (immediate only)
LEA
MOV (general register and memory only)
NOP
OR
POP (register only)
PUSH (register only)
RCL, RCR (one bit and immediate only)
ROL, ROR (one bit and immediate only)
SAR,SHL,SHR (one bit and immediate only)
SUB
TEST (reg-reg, mem-reg and immediate-EAX only)
XOR
U+V
U+V
V
U+V
U+V
U+V
V
V
U+V
U+V
U+V
U+V
U+V
U+V
U
U
U
U+V
U+V
U+V
Microprocessador Intel Pentium Pro (P6)
• Re-estruturação do Pentium (P5)
• Mesmas características de 80386 (mem. virtual) e do Pentium
(largura de dados de 64 bits)
• 5 instruções extras (162 + 3 = 165 instruções básicas)
• Co-processador: integrado
• Com cache de 16 KByte (2 x 8 KByte)
• Operação super-escalar
• Cinco unidades internas
 Execução fora de sequência
 Execução especulativa
Microprocessador Intel Pentium MMX
•
•
•
•
•
•
Arquitetura do Pentium (P5)
Novo tipo de dado: “packed”
57 instruções extras (além das 165 instruções básicas)
Com cache de 32 KByte (2 x 16 KByte)
Operação super-escalar
Não possui as características do Pentium Pro (execução fora
de sequência, execução especulativa)
• Instruções para processamento de vetores (8 bytes, 4 palavras
ou 2 palavras duplas)
• 8 novos registradores lógicos (MMX0 a MMX7)
Microprocessador Intel Pentium MMX
• 57 Instruções para processamento de vetores (8 bytes, 4
palavras ou 2 palavras duplas)
• 8 novos registradores lógicos (MMX0 a MMX7)
• Aritmética de saturação
Tipo de
dado
Com sinal
Byte
Palavra
Sem sinal
Byte
Palavra
Limite
Inferior
Limite
Superior
-128
-32.768
127
32.767
0
0
255
65.535
Microprocessador Intel Pentium II (P6)
•
•
•
•


Pentium Pro com MMX
Mesmas características do Pentium Pro
Instruções MMX
Cinco unidades internas
Execução fora de sequência
Execução especulativa
Microprocessador Intel Pentium III
•
•
•
•
Arquitetura do Pentium II (P6)
Novo tipo de dado: “floating packed”
70 instruções extras (além das 167 básicas e 57 MMX)
Instruções para processamento de vetores inteiros (MMX) ou
de ponto flutuante (SSE)
• 8 novos registradores físicos (XMM0 a XMM7), de 128 bits,
para as instruções SSE
127
96 95
64 63
32 31
0
Single FP
Single FP
Single FP
Single FP
Packed Single FP
127
96 95
64 63
32 31
0
Não alterado Não alterado
Não alterado
Single FP
Scalar Single FP
Pentium: instrução CPUID e número de série
Parâmetro Valores após execução de CPUID
EAX=0
EAX: Maior valor aceito para EAX
EBX:ECX:EDX: String de identificação
EAX=1
EAX: Identificador do processador (32 bits superiores do número de
série)
EBX:ECX: Indefinidos
EDX: Feature Flags
EAX=2
EAX:EBX:ECX:EDX: valores de configuração do Processador
EAX=3
EDX:ECX: 64 bits inferiores do número de série
EAX>3
EAX:EBX:ECX:EDX: Indefinidos
Desabilitar o número de série
MOV ECX, 119H
RDMSR
OR EAX, 0020 0000h
WRMSR
;loads EDX:EAX
Codificação de Instruções (exemplo: MOV)
Tipo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Código (hexa)
88 reg rm
89 reg rm
89 reg rm
8A reg rm
8B reg rm
8B reg rm
8C reg rm
8E reg rm
A0
A1
A1
A2
A3
A3
B0 reg imed
B8 reg imed
B8 reg imed
C6 rm imed
C7 rm imed
C7 rm imed
Instrução
MOV rm8, r8
MOV rm16, r16
MOV rm32, r32
MOV r8, rm8
MOV r16, rm16
MOV r32, rm32
MOV rm16, sreg
MOV sreg, rm16
MOV AL, m8
MOV AX, m16
MOV EAX, m32
MOV m8, AL
MOV m16, AX
MOV m32, EAX
MOV r8, im8
MOV r16, im16
MOV r32, im32
MOV rm8, im8
MOV rm16, im16
MOV rm32, im32
Descrição
Move de registradores de 8 bits
Move de registradores de 16 bits
Move de registradores de 32 bits
Move para registradores de 8 bits
Move para registradores de 16 bits
Move para registradores de 32 bits
Move de registrador de segmento
Move para registrador de segmento
Move byte para AL
Move palavra (16 bits) para AX
Move palavra dupla (32 bits) para EAX
Move AL para memória (byte)
Move AX para memória (palavra)
Move EAX para memória (palavra dupla)
Move dado imediato (byte) para reg. 8 bits
Move dado imediato para reg. 16 bits
Move dado imediato para reg. 32 bits
Move dado imediato para reg/mem (8 bits)
Move dado imediato para reg/mem (16 bits)
Move dado imediato para reg/mem (32 bits)
Instruções de transferência de dados
•
•
•
•
•
•
MOV
PUSH
POP
XCHG
BSWAP
Restrições:





destino, fonte
fonte
destino
op1, op2
reg32
move fonte para destino (B,W,D)
coloca fonte na pilha (W,D)
retira da pilha para destino (W,D)
troca (exchange) operandos
inverte a ordem dos 4 bytes
apenas MOV, PUSH e POP podem acessar registradores de segmento
não é possível mover um dado imediato para um registrador de segmento
CS não pode ser usado como destino (nem IP)
operandos de PUSH e POP devem ser de 16 ou 32 bits
op1 e op2 em XCHG podem ser registradores, ou apenas um pode ser
operando na memória
Instruções de transferência de dados
•
•
•
•
•
•
•
•
•
•
•
•
MOV reg, reg
mesmo tamanho (8, 16 ou 32 bits)
MOV mem, reg
mesmo tamanho (8, 16 ou 32 bits)
MOV reg, mem
mesmo tamanho (8, 16 ou 32 bits)
MOV reg, imed
mesmo tamanho (8, 16 ou 32 bits)
MOV mem, imed
mesmo tamanho (8, 16 ou 32 bits)
MOV reg, segreg
operandos de 16 bits
MOV segreg, reg (exceto CS)
operandos de 16 bits
MOV segreg, mem (exceto CS)
operandos de 16 bits
MOV mem, segreg
operandos de 16 bits
XCHG reg, reg
mesmo tamanho (8, 16 ou 32 bits)
XCHG reg, mem
mesmo tamanho (8, 16 ou 32 bits)
XCHG mem, reg
mesmo tamanho (8, 16 ou 32 bits)
Instruções de transferência de dados
•
•
•
•
•
•
•
•
•
•
•
PUSH r16/r32
Empilha um registrador de 16 ou 32 bits
PUSH m16/m32
Empilha um operando de memória de 16 ou 32 bits
PUSH im16/im32
Empilha um dado imediato de 16 ou 32 bits
PUSH segreg
Empilha um registrador de segmento (16 bits)
PUSHA
Empilha AX, CX, DX, BX, SP (original), BP, SI e DI
PUSHAD
Empilha EAX,ECX,EDX,EBX,ESP(original),EBP,ESI,EDI
POP r16/r32
Desempilha um registrador de 16 ou 32 bits
POP m16/m32
Desempilha um operando de 16 ou 32 bits
POP segreg (exceto CS) Desempilha um registrador de segmento (exceto CS)
POPA
Desempilha DI, SI, BP, SP, BX, DX, CX e AX
POPAD
Desempliha EDI, ESI, EBP, ESP, EBX, EDX, ECX e EAX
Instruções de transferência de flags
• PUSHF/PUSHFD
coloca registrador de flags na pilha (16 bits para F ou 32 bits para EF)
• POPF/POPFD
retira registrador de flags da pilha (16 bits para F e 32 bits para EF)
• LAHF
carrega AH com flags (8 bits menos significativos do registrador F)
• SAHF
carrega flags com AH (8 bits menos significativos do registrador F)
Instruções de transferência sobre endereços
• LEA r16/r32, mem
carrega endereço efetivo do operando mem para reg (16 ou 32 bits)
• LDS r16/32, mem
carrega endereço de mem para reg (16 ou 32 bits) e DS (16 bits)
• LESr16/32, mem
carrega endereço de mem para reg (16 ou 32 bits) e ES (16 bits)
• LFS r16/32, mem
carrega endereço de mem para reg (16 ou 32 bits) e FS (16 bits)
• LGS r16/32, mem
carrega endereço de mem para reg (16 ou 32 bits) e GS (16 bits)
Instrução de tradução
• XLAT
converte AL (translate byte)
• Substitui um byte em AL por um byte de uma tabela,
indicada em BX
• Conteúdo de AL fornece o deslocamento na tabela
• Instrução substitui o conteúdo de AL pelo byte em
[BX+AL]
Instruções de entrada e saída
• IN acumulador, porta
leitura de byte, word ou dobleword para AL, AX ou EAX
• OUT porta, acumulador
transfere byte, word ou doubleword de AL, AX ou EAX para a porta
• IN e OUT podem referenciar até 65536 portas de E/S
Cada porta pode receber ou fornecer um byte apenas
• Aparecem em dois tipos: direto e indireto
No tipo direto a instrução fornece um endereço de porta de 1 byte
(sob a forma de constante imediata, entre 0 e 255)
No tipo indireto, o registrador DX fornece o endereço de porta,
permitindo assim referenciar até 65536 portas
Instruções de entrada e saída
• Formatos possíveis
IN
IN
IN
IN
IN
IN
AL, im8
AL, DX
AX, im8
AX, DX
EAX, im8
EAX, DX
OUT
OUT
OUT
OUT
OUT
OUT
im8, AL
DX, AL
im8, AX
DX, AX
im8, EAX
DX, EAX
Instruções aritméticas sobre dois operandos
• ADD destino, fonte
soma (destino = destino + fonte)
• ADC destino, fonte
soma com carry (destino = destino + fonte + carry)
• SUB destino, fonte
subtrai fonte do destino (destino = destino - fonte)
• SBB destino, fonte
subtrai com borrow (destino = destino - fonte - borrow)
• CMP destino, fonte
compara destino - fonte (sem armazenar o resultado)
• combinações “reg, reg”, “reg, mem”, “mem, reg”,
“reg, imed” e “mem, imed”, em 8, 16 ou 32 bits
Instruções aritméticas sobre um operando
• INC destino
• DEC destino
• NEG destino
incrementa de 1
decrementa de 1
troca sinal (complemento de dois)
• “destino” pode ser um registrador ou uma referência a
memória, de 8, 16 ou 32 bits
Instruções de multiplicação e divisão
• MUL fonte
multiplica como inteiro sem sinal
• IMUL fonte
multiplica como inteiro com sinal
• DIVfonte
divide como inteiro sem sinal
• IDIV fonte
divide como inteiro com sinal
Instruções de multiplicação e divisão
• Três formas possíveis para a multiplicação
• AL x fonte = AX
(multiplicação de bytes, resultado em uma palavra)
• AX x fonte = DX:AX
(multiplicação de palavras, resultado em palavra dupla)
• EAX x fonte = EDX:EAX
(multiplicação de palavras duplas, resultado em 64 bits)
• CF e OF são ligados se a metade mais significativa do
resultado não for apenas extensão do sinal; demais flags
indefinidos
Instruções de multiplicação e divisão
• Três formas possíveis para divisão
• AX / fonte =AL e resto em AH
(divisão por byte)
• DX:AX / fonte = AX e resto em DX
(divisão por palavra)
• EDX:EAX / fonte = EAX e resto em EDX
(divisão por palavra dupla)
• Todos os flags são indefinidos
• Se o resultado tiver mais bits do que pode ser armazenado
no quociente é gerada uma interrupção do tipo 0 (erro de
divisão)
Instruções de multiplicação e divisão
• IMUL: 2 novos formatos no 80186 e 1 novo no 486:
 Com um operando (IMUL fonte)
 Com dois operandos (IMUL destino, fonte)
o operando destino (registrador) é multiplicado pelo operando fonte
(registrador, operando em memória ou dado imediato). O resultado é
armazenado no registrador destino, truncado para o seu tamanho (16
ou 32 bits). CF e OV indicam então se ocorreu estouro
 Com três operandos (IMUL destino, fonte, constante)
o operando destino (registrador) recebe o produto do operando fonte
(registrador ou operando em memória) pela constante (dado
imediato). Os operandos fonte e destino devem ser de 16 ou 32 bits e
ter o mesmo comprimento; o resultado é armazenado com truncagem
dos bits mais significativos. CF e OV indicam se houve estouro
devido a esta truncagem
Instruções de conversão e ajuste
•
•
•
•
•
•
•
•
•
•
CBW
CWD
CWDE
CDQ
DAA
DAS
AAA
AAS
AAM
AAD
converte AL para AX
converte AX para DX:AX
converte AX para EAX
converte EAX para EDX:EAX
decimal adjust after addition (sobre AL)
decimal adjust after subtraction (sobre AL)
ASCII adjust after addition (sobre AL)
ASCII adjust after subtraction (sobre AL)
ASCII adjust after multiplication (sobre AX)
ASCII adjust before division (sobre AX)
Instruções de transferência e ajuste
• MOVSX
destino, fonte
move fonte para destino com extensão do sinal
• MOVZX
destino, fonte
move fonte para destino com extensão de zeros
• Instruções foram acrescentadas a partir do 80386
MOVSX
MOVSX
MOVSX
MOVZX
MOVZX
MOVZX
r16, rm8
r32, rm8
r32, rm16
r16, rm8
r32, rm8
r32, rm16
Instruções lógicas convencionais
•
•
•
•
•
NOT
AND
OR
XOR
TEST
destino
destino, fonte
destino, fonte
destino, fonte
destino, fonte
(idêntico a AND, sem armazenar resultado)
Instruções de deslocamento
• ROR destino, contador
rotate right
msb recebe lsb, lsb vai também para CF
• RCR destino, contador
rotate with carry right
msb recebe CF, lsb vai para CF
• ROL destino, contador
rotate left
lsb recebe msb, msb vai também para CF
• RCL destino, contador
rotate with carry left
lsb recebe CF, msb vai para CF
Instruções de deslocamento
• SHR destino, contador
shift logical right
msb recebe 0, lsb vai para CF
• SAR destino, contador
shift arithmetic right
msb recebe sinal, lsb vai para CF
• SHL destino, contador
shift left
lsb recebe 0, msb vai para CF
• SAL destino, contador
shift left
lsb recebe 0, msb vai para CF (como SHL)
Instruções de deslocamento
• Codificações possíveis
operação
operação
operação
operação
operação
operação
reg,1
reg, CL
reg, im8
mem,1
mem, CL
mem, im8
Instruções sobre bits de um operando
• BSF bit_index, operando Bit Scan Forward
• BSR bit_index, operando Bit Scan Reverse
Se nenhum bit for um, ZF=1
•
•
•
•
BT operando, bit_index
BTC operando, bit_index
BTR operando, bit_index
BTS operando, bit_index
Copia o bit para CF
Bit Test
Bit Test and Complement
Bit Test and Reset
Bit Test and Set
Instruções de desvio
• As instruções de desvio podem alterar CS e IP (ou EIP) ou
somente IP (ou EIP)
• Se o endereço fornecido é de 16 bits, o registrador EIP é
mascarado pelo valor 0000FFFFH; o endereço alvo fica
dentro da área de 64 KBytes de um segmento
• Se o endereço fornecido é de 32 bits, o mascaramento não
é realizado; endereçando uma área de 4 GBytes. Somente é
válido no modo protegido.Nos modos real e virtual86, uma
interrupção de erro de endereçamento é gerada se o valor
final apontar para valores acima de 64 K
Instruções de desvio incondicional
• JMP direto
• Pode ser curto (short), perto (near) ou longe (far)
• No JMP curto e no perto, um deslocamento contido na instrução é
adicionado ao IP (modo de endereçamento relativo para desvios)
• Esse deslocamento pode ser de 1 byte (short), ou de 2 ou 4 bytes
(near)
• No JMP longe, CS e IP (ou EIP) são carregados com o endereço
especificado
• JMP indireto
• Pode ser perto (near) ou longe (far)
• No JMP perto, o conteúdo de um registrador ou uma posição de
memória é copiado no IP (ou EIP)
• No JMP longe, CS e IP(ou EIP) são carregados com o conteúdo de
memória (endereçada como operando, usando os modos de
endereçamento)
Controle de laço
•
•
•
•
•
•
•
LOOP endereço_alvo
LOOPE endereço_alvo
LOOPZ endereço_alvo
LOOPNE endereço_alvo
LOOPNZ endereço_alvo
JCXZ endereço_alvo
JECXZ endereço_alvo
loop
loop while equal (ZF=1)
loop while zero(ZF=1)
loop while not equal (ZF=0)
loop while not zero (ZF=0)
jump if CX = 0
jump if ECX = 0
Usam o registrador CX (ou ECX) como contador
Decrementam o contador e desviam se não chegou a zero
Nenhum flag é afetado
LOOPE e LOOPNE testam adicionalmente o flag ZF
Todas as instruções permitem apenas deslocamentos curtos (short, ou
seja, de +127 a -128)
Chamada e retorno de subrotina
• CALL endereço_alvo
• RET valor_opcional
call procedure
return from procedure
• CALL é semelhante a JMP, só que armazena o endereço de
retorno na pilha
• CALL pode ser direto ou indireto, assim como near ou far
• A forma near armazena o IP (ou EIP) na pilha
• A forma far armazena CS e IP (ou EIP) na pilha
• RET também deve ser correspondentemente near ou far
• RET pode ter um valor que é somado ao SP depois do
retorno
Interrupções de software
• INT tipo
• INTO
• IRET
interrupção
interrupção se overflow
retorno de interrupção
• INT tipo:
desvia de modo far para o endereço especificado
mem(0000:tipo*4)
desvio semelhante a uma subrotina, mas empilha flags
em
Instruções de desvio condicional
• Com sinal
–
–
–
–
–
–
–
–
–
–
–
–
JG
JNLE
JGE
JNL
JL
JNGE
JLE
JNG
JO
JS
JNO
JNS
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
greater ((SF XOR OF) OR ZF) = 0
not less nor equal
(idem)
greater or equal (SF XOR OF) = 0
not less (idem)
less(SF XOR OF) = 1
not greater nor equal (idem)
less or equal ((SF XOR OF) OR ZF) = 1
not greater (idem)
overflow OF = 1
sign SF = 1
not overflow OF = 0
not sign
SF = 0
Instruções de desvio condicional
• Sem sinal:
–
–
–
–
–
–
–
–
JA
JNBE
JAE
JNB
JB
JNAE
JBE
JNA
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
endereço_alvo
above (CF OR ZF) = 0
not below nor equal (idem)
above or equal CF = 0
not below (idem)
below CF = 1
not above nor equal (idem)
below or equal (CF OR ZF) = 1
not above (idem)
Instruções de desvio condicional
• Independente de sinal
JC
endereço_alvo
JE/JZ endereço_alvo
JP/JPE endereço_alvo
JNC endereço_alvo
JNE/JNZ endereço_alvo
JNP/JPO endereço_alvo
carry CF = 1
equal / zero ZF = 1
parity / parity even PF = 1
not carry CF = 0
not equal / not zero ZF = 0
not parity / parity odd PF = 0
Instruções de manipulação de strings
• Registradores implícitos
–
–
–
–
–
–
[E]SI
índice para string fonte
[E]DI
índice para string destino
ES
segmento do string destino
[E]CX
contador
AL/AX/EAX valor de busca (destino p/ LODS, fonte p/ STOS)
DF
0 (auto incremento p/ DI, SI)
1 (auto decremento p/ DI, SI)
– ZF
condição de término para busca e comparação
Instruções Primitivas
•
•
•
•
•
•
•
MOVS
CMPS
SCAS
LODS
STOS
INS
OUTS
move source string to destination string
compare source string with destination string
scan destination string
load into AL/AX from source string
store AL/AX into destination string
input from I/O port (in DX) into destination
output from source to I/O port (in DX)
Instruções Primitivas
• MOVS move source string to destination string
– MOVSB
– MOVSW
– MOVSD
move um byte de DS:SI para ES:DI
move uma palavra de DS:SI para ES:DI
move uma palavra dupla de DS:SI para ES:DI
• CMPS compare source string with destination string
–
–
–
–
CMPSB
subtrai byte de mem(DS:SI) – mem(ES:DI)
CMPSW
subtrai palavra de mem(DS:SI) – mem(ES:DI)
CMPSD
subtrai palavra dupla de mem(DS:SI) – mem(ES:DI)
afeta flags de forma idêntica a CMP
Instruções Primitivas
• SCAS scan destination string
–
–
–
–
SCASB
subtrai byte em AL – mem(ES:DI)
SCASW
subtrai palavra em AX – mem(ES:DI)
SCASD
subtrai palavra dupla em EAX – mem(ES:DI)
AL, AX ou EAX contém valor sendo buscado
• LODS load into AL/AX from source string
– LODSB
– LODSW
– LODSW
carrega byte de mem(DS:SI) em AL
carrega palavra de mem(DS:SI) em AX
carrega palavra dupla de mem(DS:SI) em EAX
Instruções Primitivas
• STOS store AL/AX into destination string
– STOSB
– STOSW
– STOSD
• INS
armazena AL no byte de mem (ES:DI)
armazena AX na palavra de mem (ES:DI)
armazena EAX na palavra dupla de mem (ES:DI)
input from I/O port (in DX) into destination
– INSB
– INSW
– INSD
ES:DI
move byte da porta especificada em DX para ES:DI
move palavra da porta especificada em DX para ES:DI
move palavra dupla da porta especificada em DX para
Instruções Primitivas
• OUTS output from source to I/O port (in DX)
– OUTSB
– OUTSW
– OUTSD
move byte de DS:SI para porta de E/S especificada em DX
move palavra de DS:SI para porta especificada em DX
move palavra dupla de DS:ES para porta especificada em DX
Instruções primitivas
1. Realiza operação primitiva (sobre um byte, uma palavra ou uma
palavra dupla)
2. Atualiza registradores de índice (SI e/ou DI):
2.1 Se DF=0, então incrementa registradores de índice:
2.1.1 de um, se operação for a byte
2.1.2 de dois, se operação for a palavra
2.1.3 de quatro, se a operação for a palavra dupla
2.2 Se DF=1, então decrementa registradores de índice:
2.2.1 de um, se operação for a byte
2.2.2 de dois, se operação for a palavra
2.2.3 de quatro, se a operação for a palavra dupla
Instruções de repetição
• REP
repeat
• REPE / REPZ
repeat while equal/repeat while zero
• REPNE / REPNZ repeat while not equal/repeat while not
zero
1. Se ECX = 0, então não executa a primitiva e encerra a repetição
2. Se ECX > 0, então:
2.1 Executa a operação primitiva, atualizando os flags
2.2 Decrementa ECX, sem afetar os flags
2.3 Volta para a repetição, de acordo com o prefixo:
2.3.1 Se for REP, repete incondicionalmente
2.3.2 Se for REPE/Z, somente repete se Z=1
2.3.3 Se for REPNE/NZ, somente repete se Z=0
Instruções sobre flags
•
•
•
•
•
•
•
STC
CLC
CMC
STD
CLD
STI
CLI
set carry flag
clear carry flag
complement carry flag
set direction flag
clear direction flag
set interrupt-enable flag
clear interrupt-enable flag
Instruções condicionais sobre flags
• SETcc
rm8
Set Byte on condition (386)
Se cc for verdadeiro, rm8 recebe 1
Se cc for falso, rm8 recebe 0
• CMOVcc destino, fonte Conditional Move (P6)
Se cc for verdadeiro, copia fonte para destino
Instruções especiais
• HLThalt until interrupt or reset
(suspende o processador)
•
•
•
•
WAIT
ESC
LOCK
NOP
wait for TEST pin active
escape to external processor
lock bus during next instruction
no operation
Instruções de prefixo
• Prefixo para operando de 32 bits (senão é 16 bits)
• Prefixo para endereço de 32 bits (senão é 16 bits)
• SEG regseg - altera o registrador de segmento padrão
Bibliografia
•
Weber, Raul F. “Fundamentos
deArquitetura de Computadores”.
Segunda Edição. Ed. Sagra-Luzzatto, 2001
–
Capítulo 12