0% acharam este documento útil (0 voto)
3 visualizações82 páginas

Intel

O documento fornece uma visão detalhada sobre microprocessadores Intel, incluindo suas especificações técnicas, características e evolução ao longo do tempo. Ele lista diversos modelos, como o 8088, 80286, 80386, até os processadores Pentium e suas variantes, destacando aspectos como ALU, registradores, cache e frequência. Além disso, aborda a arquitetura e modos de endereçamento do microprocessador Intel 8086, incluindo exemplos de instruções e modos de operação.

Enviado por

sudario prado
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações82 páginas

Intel

O documento fornece uma visão detalhada sobre microprocessadores Intel, incluindo suas especificações técnicas, características e evolução ao longo do tempo. Ele lista diversos modelos, como o 8088, 80286, 80386, até os processadores Pentium e suas variantes, destacando aspectos como ALU, registradores, cache e frequência. Além disso, aborda a arquitetura e modos de endereçamento do microprocessador Intel 8086, incluindo exemplos de instruções e modos de operação.

Enviado por

sudario prado
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Microprocessadores Intel

Enfim, a dura realidade


(ou: que saudades dos simuladores….)
Chip ALU reg dado End. Cache Características
8088(6) 16 16 8 (16) 20 - micro de 16 bits
80186 16 16 16 20 - 8086 & circuitos de apoio
80286 16 16 16 24 - memória virtual segmentada e modo
protegido
386SX 32 32 16 32 - 80386 simplificado
80386 32 32 32 32 - MMU, 32 bits e modo virtual
486SX 32 32 32 32 8K 80486 sem FPU
80486 32 32 32 32 8K 80386 com FPU
486DX2 32 32 32 32 8K 486 com frequência interna de clock
dupla
DX4 32 32 32 32 8K instr. 486 com frequência interna de clock
8K dado tripla
Pentium 32 32 64 32 8K instr. 2 pipelines inteiros, FPU de 64 bits,
8K dado lógica de previsão de desvios
Pentium Pro 32 32 64 36 8K instr. Pentium, mais renomeação de
8K dado registradores e execução fora de
256Knível2 sequência
Pentium MMX 32 32 64 32 16K instr. Pentium, com instruções extras para
16K dado paralelismo (SIMD)
Pentium II 32 32 64 36 16K instr. Pentium Pro com MMX
16K dado
512Knível2
Chip ALU reg dado End. Cache Características
Pentium 32 32 64 32 8K instr. 2 pipelines inteiros, FPU de 64 bits,
8K dado lógica de previsão de desvios
Pentium Pro 32 32 64 36 8K instr. Pentium, mais renomeação de
8K dado registradores e execução fora de
256Knível2 sequência
Pentium MMX 32 32 64 32 16K instr. Pentium, com instruções extras para
16K dado paralelismo (SIMD)
Pentium II 32 32 64 36 16K instr. Pentium Pro com MMX
16K dado
512Knível2
Pentium II 32 32 64 36 16K instr. Pentium II sem cache de nível 2
Celeron 16K dado
0K nível 2
Pentium II 32 32 64 36 16K instr. Pentium II com cache na mesma
Celeron A 16K dado frequência da CPU
128Knível2
Pentium II Xeon 32 32 64 36 16K instr. Pentium II com 512K/1M/2M de cache
16K dado na mesma frequência da CPU
cache nív.2
Pentium III 32 32 64 36 16K instr. Pentium II com instruções extras para
16K dado paralelismo de ponto flutuante
cache nív.2
Pentium 4 32 32 64 36 12K instr. Pentium III com mais instruções extras
8K dado para paralelismo de ponto flutuante
cache nív.2 (SSE2)
Características tecnológicas

Processador Cache tipo nível 2 frequência mult. Tensão Transistor


8088(6) - - - - 1x 5V 29.000
80286 - - - - 1x 5V 134.000
80386 - - - - 1x 5V 275.000
486SX 8K WT - - 1x 5V 1.185.000
486DX 8K WT - - 1x 5V 1.200.000
486DX2 8K WT - - 2x 5V 1.100.000
DX4 16K WT - - 2-3x 3,3 V 1.600.000
Pentium 60/66 2x8K WB - - 1x 5V 3.100.000
Pentium 75/200 2x8K WB - - 1,5-3x 3,3 V 3.300.000
Pentium Pro 2x8K WB 256K 1 2-3x 3,3 V 5.500.000
Pentium MMX 2x16K WB - - 1,5-3x 1,8-2,8 V 4.100.000
Pentium II 2x16K WB 512K 1/2 3,5-5x 1,8-2,8 V 7.500.000
Celeron 2x16K WB 0K - 3,5-5x 1,8-2,8 V 7.500.000
Celeron A 2x16K WB 128K 1 3,5-5x 1,8-2,8 V 7.500.000
Xeon 2x16K WB 512K-2M 1 3,5-5x 1,8-2,8 V 7.500.000
Pentium III 2x16K WB 512K 1/2 3,5-5x 1,8-2,8 V 9.500.000
Pentium III E 2x16K WB 256K 1 4,0-9x 1,3-1,7 V 28.100.000
Pentium 4 8K WB 256K 1 3,0-4x 1,3-1,7 V 42.000.000
Computadores Pessoais tipo PC

tipos PC XT PC AT PC AT PC AT Pentium Pentium


386 486 P5 P6
microprocessador 8088 80286 80386 80486 Pentium, Pentium Pro,
MMX II, III, 4
FPU 8087 80287 80387 interna interna Interna
barramento de dados 8 bits 16 bits 32 bits 32 bits 64 bits 64 bits
barramento de
endereços 20 bits 24 bits 30 bits 30 bits 30 bits 33 bits
• versão PC 99 disponível em
[Link] ou
[Link]
• 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
[Link]
• 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 8 7 0
AX AH AL acumulador
BX BH BL base
CX CH CL contador
DX DH DL dado

SP ponteiro para pilha


BP ponteiro base
SI índice fonte
DI índice destino

IP apontador de instruções
FLAGS flags

CS segmento de código
DS segmento de dados
SS segmento de pilha
ES 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)
15 0
CS 0000
DS 0000
SS 0000
ES 0000

19 0
Endereço Físico
Uso padrão de registradores de segmento

tipo de referência à segmento segmento deslocamento


memória default alternativo
busca de instrução CS IP
pilha SS SP
variável DS CS,ES,SS endereço de
operando
BP como base SS CS,ES,DS endereço de
operando
string fonte DS CS,ES,SS SI
string destino ES DI
Uso padrão de registradores de segmento

Modos de endereçamento (cálculo do deslocamento)

Modo Significado
Imediato operando na instrução
Registrador operando em registrador
Direto 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 A S C I I A d ju s t A fte r A d itio n AAD A S C I I A d ju s t B e fo r e D iv isio n
AAM A S C I I A d ju s t A fte r M u ltip ly AAS A S C I I A d ju s t A fte r S u b tr a c t
ADC A d d w ith C a r r y ADD Add
AND L o g ic a l A n d CALL C a ll P r o c e d u r e
CBW C o n v e r t B y te to W o r d CLC C le a r C a r r y F la g
CLD C le a r D ir e c tio n F la g CLI C le a r In te r r u p t F la g
CMC C o m p le m e n t C a r r y F la g CMP C om p are
C M P S B /W C o m p a r e str in g s (B y te , W o r d ) CW D C o n v e r t W o r d to D o u b le
DAA D e c im a l A d ju s t A fte r D iv isio n DAS D e c im a l A d ju s t a fte r S u b tr a c t
DEC D ecrem en t D IV U n s ig n e d D iv id e
ESC E sc a p e (fo r F P U ) HLT H a lt
ID I V S ig n e d D iv id e IM U L S ig n e d M u ltip ly
IN I n p u t fr o m P o r t IN C In crem en t
IN T S o ftw a r e In te r r u p t IN T O I n te r r u p t o n O v e r flo w
IR E T I n te r r u p t R e tu r n (1 6 b its) IR E T D I n te r r u p t R e tu r n (3 2 b its)
J A ,J N B E J u m p if A b o v e J A E ,J N B J u m p if A b o v e o r E q u a l
J B ,J N A E J u m p if b e llo w J B E ,J N A J u m p if B e llo w o r E q u a l
JC Ju n p on C arry JC XZ J u m p if C X is Z e r o
J E ,J Z J u m p if E q u a l (Z e r o ) J G ,J N L E J u m p if G r e a te r
J G E ,J N L J u m p if G r e a te r o r E q u a l J L ,J N G E J u m p if L e ss
J L E ,J N G J u m p if L e ss o r E q u a l JM P J u m p in c o n d itio n a lly
JN C J u m p if n o t C a r r y J N E ,J N Z J u m p if n o t E q u a l
J N P ,J P O J u m p if P a r ity O d d J O ,J N O J u m p o n O v e r flo w , n o t O v e r f.
J P ,J P E J u m p if P a r ity E v e n J S ,J N S J u m p o n S ig n , n o t S ig n
LAHF L o a d F la g s in to A H L D S ,L E S L o a d F a r P o in te r (D S , E S )
LEA L o a d E ffe c tiv e A d d r e ss LOCK L o c k th e B u s
L O D S B /W L o a d S tr in g (B y te , W o r d ) LOOP L oop
L O O P E /Z L o o p w h ile E q u a l L O O P N E /Z L o o p w h ile n o t E q u a l
MOV M o v e D a ta M O V S B /W M o v e S tr in g (B y te ,W o r d )
MUL U n s ig n e d M u ltip ly NEG T w o ’s C o m p le m e n t N e g a tio n
NOP N o O p e r a tio n NOT O n e ’s C o m p le m e n t N e g a tio n
OR I n c lu siv e O r OUT O u tp u t to P o r t
PO P P o p fr o m S ta c k PO PF P o p F la g s
PUSH P u s h in to S ta c k PU SH F P u s h F la g s
RCL R o ta te w ith C a r r y L e ft RCR R o ta te w ith C a r r y R ig h t
REP R e p e a t S tr in g R E P E /Z R e p e a t w h ile E q u a l (Z e r o )
R E P N E /Z R e p e a t w h ile n o t E q u a l (Z e r o ) R E T ,R E T F R e tu r n fr o m P r o c e d u r e
ROL R o ta te L e ft ROR R o ta te R ig h t
SAH F S to r e A H in to F la g s SAL S h ift A r ith m e tic L e ft
SAR S h ift A r ith m e tic R ig h t SBB S u b tr a c t w ith B o r r o w
S C A S B /W S c a n S tr in g (B y te , W o r d ) SH L S h ift L e ft
SH R S h ift R ig h t STC S e t C a r r y F la g
STD S e t D ir e c tio n F la g STI S e t I n te r r u p t F la g
S T O S /W S to r e S tr in g (B y te , W o r d ) SUB S u b tr a c t
TEST L o g ic a C o m p a r e W A IT W a it (c o p r o c e ss o r )
XCHG E xch an ge XLAT T r a n sla te
XOR E x c lu siv e O r
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 Calculates 2^x-1 FABS Absolute Value
FADD Add Real FADDP Add Real and Pop
FBLD Load BCD FBSTP Store BCD and Pop
FCHS Change Sign F(N)CLEX Clear exceptions
FCOM Compare Real FCOMP Compare Real And Pop
FCOMPP Compare Real and Pop Twice FDECSTP Decrement Stack
F(N)DISI (*) Disable Interrupts FDIV Divide Real
FDIVP Divide Real and Pop FDIVR Divide Real Reversed
FDIVRP Divide Real Reversed and Pop F(N)ENI (*) Enable Interrupts
FFREE Free Register FIADD Integer Add
FICOM Compare Integer FICOMP Compare Integer and Pop
FIDIV Integer Divide FIDIVR Integer Divide Reversed
FILD Load Integer FIMUL Integer Multiply
FINCSTP Increment Stack F(N)INIT Initialize Coprocessor
FIST Store Integer FISTP Store Integer and Pop
FISUB Integer Subtract FISUBR Integer Subtract Reversed
FLD Load Real FLD1 Load Value of 1.0
FLDCW Load Control Word FLDENV Load Environment State
FLDL2E Load Value of Log2(e) FLDL2T Load Value of Log2(10)
FLDLG2 Load Value of Log10(2) FLDLN2 Load Value of Loge(2)
FLDPI Load Value of Pi FLDZ Load Value of 0.0
FMUL Real Multiply FMULP Real Multiply and Pop
FNOP No Operation FPATAN Partial Arctangent
FPREM Partial Remainder FPTAN Partial Tangent
FRNDINT Round to Integer FRSTOR Restore Saved State
F(N)SAVE Save Coprocessor State FSCALE Scale with powers of 2
FSQRT Square Root FST Store Real
F(N)STCW Store Control Word F(N)STENV Store Environment State
FSTP Store Real and Pop F(N)STSW Store Status Word
FSUB Real Subtract FSUBP Real Subtract and Pop
FSUBPR Real Subtract Reversed and Pop FSUBR Real Subtract Reversed
FTST Test for Zero FWAIT CPU Wait (until FPU ready)
FXAM Examine FXCH Exchange Registers
FXTRACT Extract Exponent and Mantissa FYL2X Calculates y . log2(x)
FYL2XP1 Calculates y . log2(x+1) (*) – eliminadas a partir do 80287
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 AH AL acumulador
EBX BH BL base
ECX CH CL contador
EDX DH DL dado

ESP SP ponteiro para pilha


EBP BP ponteiro base
ESI SI índice fonte
EDI DI índice destino

31 16 15 0
EIP IP apontador de instruções
EF FLAGS 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 segmento de código (code segment)


SS segmento de pilha (stack segment)
DS segmento de dados (data segment)
ES segmento de dados
FS segmento de dados
GS segmento de dados

• 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

memória virtual

endereço
virtual

processador mapeador
endereço
físico

memória física
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 U+V
AND U+V
CALL (immediate) V
CMP U+V
DEC U+V
INC U+V
Jcc V
JMP (immediate only) V
LEA U+V
MOV (general register and memory only) U+V
NOP U+V
OR U+V
POP (register only) U+V
PUSH (register only) U+V
RCL, RCR (one bit and immediate only) U
ROL, ROR (one bit and immediate only) U
SAR,SHL,SHR (one bit and immediate only) U
SUB U+V
TEST (reg-reg, mem-reg and immediate-EAX only) U+V
XOR 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 Limite Limite


dado Inferior Superior
Com sinal
Byte -128 127
Palavra -32.768 32.767
Sem sinal
Byte 0 255
Palavra 0 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 ;loads EDX:EAX
OR EAX, 0020 0000h
WRMSR
Codificação de Instruções (exemplo: MOV)
Tipo Código (hexa) Instrução Descrição
1 88 reg rm MOV rm8, r8 Move de registradores de 8 bits
2 89 reg rm MOV rm16, r16 Move de registradores de 16 bits
3 89 reg rm MOV rm32, r32 Move de registradores de 32 bits
4 8A reg rm MOV r8, rm8 Move para registradores de 8 bits
5 8B reg rm MOV r16, rm16 Move para registradores de 16 bits
6 8B reg rm MOV r32, rm32 Move para registradores de 32 bits
7 8C reg rm MOV rm16, sreg Move de registrador de segmento
8 8E reg rm MOV sreg, rm16 Move para registrador de segmento
9 A0 MOV AL, m8 Move byte para AL
10 A1 MOV AX, m16 Move palavra (16 bits) para AX
11 A1 MOV EAX, m32 Move palavra dupla (32 bits) para EAX
12 A2 MOV m8, AL Move AL para memória (byte)
13 A3 MOV m16, AX Move AX para memória (palavra)
14 A3 MOV m32, EAX Move EAX para memória (palavra dupla)
15 B0 reg imed MOV r8, im8 Move dado imediato (byte) para reg. 8 bits
16 B8 reg imed MOV r16, im16 Move dado imediato para reg. 16 bits
17 B8 reg imed MOV r32, im32 Move dado imediato para reg. 32 bits
18 C6 rm imed MOV rm8, im8 Move dado imediato para reg/mem (8 bits)
19 C7 rm imed MOV rm16, im16 Move dado imediato para reg/mem (16 bits)
20 C7 rm imed MOV rm32, im32 Move dado imediato para reg/mem (32 bits)
Instruções de transferência de dados
• MOV destino, fonte move fonte para destino (B,W,D)
• PUSH fonte coloca fonte na pilha (W,D)
• POP destino retira da pilha para destino (W,D)
• XCHG op1, op2 troca (exchange) operandos
• BSWAP reg32 inverte a ordem dos 4 bytes
• Restrições:
• 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)
• LES r16/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 AL, im8 OUT im8, AL


IN AL, DX OUT DX, AL
IN AX, im8 OUT im8, AX
IN AX, DX OUT DX, AX
IN EAX, im8 OUT im8, EAX
IN EAX, DX OUT 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 incrementa de 1


• DEC destino decrementa de 1
• NEG destino 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 converte AL para AX


• CWD converte AX para DX:AX
• CWDE converte AX para EAX
• CDQ converte EAX para EDX:EAX
• DAA decimal adjust after addition (sobre AL)
• DAS decimal adjust after subtraction (sobre AL)
• AAA ASCII adjust after addition (sobre AL)
• AAS ASCII adjust after subtraction (sobre AL)
• AAM ASCII adjust after multiplication (sobre AX)
• AAD 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 r16, rm8
MOVSX r32, rm8
MOVSX r32, rm16
MOVZX r16, rm8
MOVZX r32, rm8
MOVZX r32, rm16
Instruções lógicas convencionais

• NOT destino
• AND destino, fonte
• OR destino, fonte
• XOR destino, fonte
• TEST 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 reg,1
operação reg, CL
operação reg, im8
operação mem,1
operação mem, CL
operação 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 Bit Test


• BTC operando, bit_index Bit Test and Complement
• BTR operando, bit_index Bit Test and Reset
• BTS operando, bit_index Bit Test and Set
Copia o bit para CF
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 [Link] 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 loop
• LOOPE endereço_alvo loop while equal (ZF=1)
• LOOPZ endereço_alvo loop while zero(ZF=1)
• LOOPNE endereço_alvo loop while not equal (ZF=0)
• LOOPNZ endereço_alvo loop while not zero (ZF=0)
• JCXZ endereço_alvo jump if CX = 0
• JECXZ endereço_alvo 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 call procedure
• RET valor_opcional 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 interrupção


• INTO interrupção se overflow
• IRET retorno de interrupção

• INT tipo:
desvia de modo far para o endereço especificado em
mem(0000:tipo*4)
desvio semelhante a uma subrotina, mas empilha flags
Instruções de desvio condicional

• Com sinal
– JG endereço_alvo greater ((SF XOR OF) OR ZF) = 0
– JNLE endereço_alvo not less nor equal (idem)
– JGE endereço_alvo greater or equal (SF XOR OF) = 0
– JNL endereço_alvo not less (idem)
– JL endereço_alvo less(SF XOR OF) = 1
– JNGE endereço_alvo not greater nor equal (idem)
– JLE endereço_alvo less or equal ((SF XOR OF) OR ZF) = 1
– JNG endereço_alvo not greater (idem)
– JO endereço_alvo overflow OF = 1
– JS endereço_alvo sign SF = 1
– JNO endereço_alvo not overflow OF = 0
– JNS endereço_alvo not sign SF = 0
Instruções de desvio condicional

• Sem sinal:
– JA endereço_alvo above (CF OR ZF) = 0
– JNBE endereço_alvo not below nor equal (idem)
– JAE endereço_alvo above or equal CF = 0
– JNB endereço_alvo not below (idem)
– JB endereço_alvo below CF = 1
– JNAE endereço_alvo not above nor equal (idem)
– JBE endereço_alvo below or equal (CF OR ZF) = 1
– JNA endereço_alvo not above (idem)
Instruções de desvio condicional

• Independente de sinal
JC endereço_alvo carry CF = 1
JE/JZ endereço_alvo equal / zero ZF = 1
JP/JPE endereço_alvo parity / parity even PF = 1
JNC endereço_alvo not carry CF = 0
JNE/JNZ endereço_alvo not equal / not zero ZF = 0
JNP/JPO endereço_alvo 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 move source string to destination string


• CMPS compare source string with destination string
• SCAS scan destination string
• LODS load into AL/AX from source string
• STOS store AL/AX into destination string
• INS input from I/O port (in DX) into destination
• OUTS output from source to I/O port (in DX)
Instruções Primitivas

• MOVS move source string to destination string


– MOVSB move um byte de DS:SI para ES:DI
– MOVSW move uma palavra de DS:SI para ES:DI
– MOVSD 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 carrega byte de mem(DS:SI) em AL
– LODSW carrega palavra de mem(DS:SI) em AX
– LODSW carrega palavra dupla de mem(DS:SI) em EAX
Instruções Primitivas

• STOS store AL/AX into destination string


– STOSB armazena AL no byte de mem (ES:DI)
– STOSW armazena AX na palavra de mem (ES:DI)
– STOSD armazena EAX na palavra dupla de mem (ES:DI)

• INS input from I/O port (in DX) into destination


– INSB move byte da porta especificada em DX para ES:DI
– INSW move palavra da porta especificada em DX para ES:DI
– INSD move palavra dupla da porta especificada em DX para
ES:DI
Instruções Primitivas

• OUTS output from source to I/O port (in DX)


– OUTSB move byte de DS:SI para porta de E/S especificada em DX
– OUTSW move palavra de DS:SI para porta especificada em DX
– OUTSD 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 set carry flag


• CLC clear carry flag
• CMC complement carry flag
• STD set direction flag
• CLD clear direction flag
• STI set interrupt-enable flag
• CLI 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

• HLT halt until interrupt or reset


(suspende o processador)
• WAIT wait for TEST pin active
• ESC escape to external processor
• LOCK lock bus during next instruction
• NOP 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

Você também pode gostar