19.04.2013 Views

No Slide Title - Site SIEP-PE

No Slide Title - Site SIEP-PE

No Slide Title - Site SIEP-PE

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!