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