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

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

Embed Size (px)

Citation preview

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

Microprocessadores Intel

Enfim, a dura realidade

(ou: que saudades dos simuladores….)

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

Chip ALU reg dado End. Cache Características8088(6) 16 16 8 (16) 20 - micro de 16 bits80186 16 16 16 20 - 8086 & circuitos de apoio80286 16 16 16 24 - memória virtual segmentada e modo

protegido386SX 32 32 16 32 - 80386 simplificado80386 32 32 32 32 - MMU, 32 bits e modo virtual486SX 32 32 32 32 8K 80486 sem FPU80486 32 32 32 32 8K 80386 com FPU486DX2 32 32 32 32 8K 486 com frequência interna de clock

duplaDX4 32 32 32 32 8K instr.

8K dado486 com frequência interna de clocktripla

Pentium 32 32 64 32 8K instr.8K dado

2 pipelines inteiros, FPU de 64 bits,lógica de previsão de desvios

Pentium Pro 32 32 64 36 8K instr.8K dado256Knível2

Pentium, mais renomeação deregistradores e execução fora desequência

Pentium MMX 32 32 64 32 16K instr.16K dado

Pentium, com instruções extras paraparalelismo (SIMD)

Pentium II 32 32 64 36 16K instr.16K dado512Knível2

Pentium Pro com MMX

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

Chip ALU reg dado End. Cache CaracterísticasPentium 32 32 64 32 8K instr.

8K dado2 pipelines inteiros, FPU de 64 bits,lógica de previsão de desvios

Pentium Pro 32 32 64 36 8K instr.8K dado256Knível2

Pentium, mais renomeação deregistradores e execução fora desequência

Pentium MMX 32 32 64 32 16K instr.16K dado

Pentium, com instruções extras paraparalelismo (SIMD)

Pentium II 32 32 64 36 16K instr.16K dado512Knível2

Pentium Pro com MMX

Pentium IICeleron

32 32 64 36 16K instr.16K dado0K nível 2

Pentium II sem cache de nível 2

Pentium IICeleron A

32 32 64 36 16K instr.16K dado128Knível2

Pentium II com cache na mesmafrequência da CPU

Pentium II Xeon 32 32 64 36 16K instr.16K dadocache nív.2

Pentium II com 512K/1M/2M de cachena mesma frequência da CPU

Pentium III 32 32 64 36 16K instr.16K dadocache nív.2

Pentium II com instruções extras paraparalelismo de ponto flutuante

Pentium 4 32 32 64 36 12K instr.8K dadocache nív.2

Pentium III com mais instruções extraspara paralelismo de ponto flutuante(SSE2)

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

Processador Cache tipo nível 2 frequência mult. Tensão Transistor8088(6) - - - - 1x 5 V 29.00080286 - - - - 1x 5 V 134.00080386 - - - - 1x 5 V 275.000486SX 8K WT - - 1x 5 V 1.185.000486DX 8K WT - - 1x 5 V 1.200.000486DX2 8K WT - - 2x 5 V 1.100.000DX4 16K WT - - 2-3x 3,3 V 1.600.000Pentium 60/66 2x8K WB - - 1x 5 V 3.100.000Pentium 75/200 2x8K WB - - 1,5-3x 3,3 V 3.300.000Pentium Pro 2x8K WB 256K 1 2-3x 3,3 V 5.500.000Pentium MMX 2x16K WB - - 1,5-3x 1,8-2,8 V 4.100.000Pentium II 2x16K WB 512K 1/2 3,5-5x 1,8-2,8 V 7.500.000Celeron 2x16K WB 0K - 3,5-5x 1,8-2,8 V 7.500.000Celeron A 2x16K WB 128K 1 3,5-5x 1,8-2,8 V 7.500.000Xeon 2x16K WB 512K-2M 1 3,5-5x 1,8-2,8 V 7.500.000Pentium III 2x16K WB 512K 1/2 3,5-5x 1,8-2,8 V 9.500.000Pentium III E 2x16K WB 256K 1 4,0-9x 1,3-1,7 V 28.100.000Pentium 4 8K WB 256K 1 3,0-4x 1,3-1,7 V 42.000.000

Características tecnológicas

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

tipos PC XT PC AT PC AT 386

PC AT 486

PentiumP5

PentiumP6

microprocessador 8088 80286 80386 80486 Pentium,MMX

Pentium Pro,II, III, 4

FPU 8087 80287 80387 interna interna Internabarramento de dados 8 bits 16 bits 32 bits 32 bits 64 bits 64 bitsbarramento de endereços 20 bits 24 bits 30 bits 30 bits 30 bits 33 bits

Computadores Pessoais tipo PC

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

• versão PC 99 disponível em http://developer.intel.com/design/desguide ou

http://www.microsoft.com/hwdev/pc99.htm.

• Usos distintos (servidores, portáteis, domésticos, estações de trabalho, etc)• Configuração básica:

– Pentium II 300 MHz– 32 a 64 MBytes de memória– barramento PCI (sem conectores ISA)– duas portas USB– resolução de vídeo de 800 x 600 com 64K cores– suporte a CD ou DVD– modem de 56 Kbps ou placa de rede– opcionais: placas de som, placas aceleradoras 3D, suporte a infravermelho (IrDA) e

IEEE 1394 (barramento serial rápido)

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

• versão PC 2001 disponível emhttp://www.pcdesguide.org.

• Usos distintos (servidores, portáteis, domésticos, estações de trabalho, etc)• Configuração básica:

– Pentium II 667 MHz (desktop) ou 400 MHz (laptop)– 64 a 128 MBytes de memória– barramento PCI (proibição de conectores ISA)– duas portas USB (substituição de portas seriais e paralela)– resolução de vídeo de 1024 x 768 com 32 bits por pixel– suporte a CD ou DVD– modem de 56 Kbps ou placa de rede– placa aceleradora 3D em modelos desktop– opcionais: placas de som, suporte a infravermelho (IrDA) e IEEE 1394 (barramento

serial rápido)

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

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)

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

Microprocessador Intel 8086/8088

15 8 7 0AX AH AL acumuladorBX BH BL baseCX CH CL contadorDX DH DL dado

SP ponteiro para pilhaBP ponteiro baseSI índice fonteDI índice destino

IP apontador de instruçõesFLAGS flags

CS segmento de códigoDS segmento de dadosSS segmento de pilhaES segmento extra

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

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

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

8086 - Formação de endereço

CSDSSSES

0000000000000000

Offset (deslocamento)

015

015

Endereço Físico

019

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

tipo de referência àmemória

segmentodefault

segmentoalternativo

deslocamento

busca de instrução CS IPpilha SS SPvariável DS CS,ES,SS endereço de

operandoBP como base SS CS,ES,DS endereço de

operandostring fonte DS CS,ES,SS SIstring destino ES DI

Uso padrão de registradores de segmento

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

Uso padrão de registradores de segmento

Modo SignificadoImediato operando na instruçãoRegistrador operando em registradorDireto operando na memória, endereçado por deslocamento contido na

instruçãoRegistrador indireto operando na memória, endereçado por deslocamento contido em

registradorIndexado (ou base) operando na memória, endereçado pela soma do conteúdo do

registrador de índice (ou base) com o deslocamento contido nainstrução

Base e indexado comdeslocamento

operando na memória, endereçado pela soma do conteúdo doregistrador de índice com o conteúdo do registrador base e com odeslocamento contido na instrução

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

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

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

Exemplos de modos de endereçamento(ADD destino, fonte)

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

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

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

AAA ASCII Adjust After Adition AAD ASCII Adjust Before DivisionAAM ASCII Adjust After Multiply AAS ASCII Adjust After SubtractADC Add with Carry ADD AddAND Logical And CALL Call ProcedureCBW Convert Byte to Word CLC Clear Carry FlagCLD Clear Direction Flag CLI Clear Interrupt FlagCMC Complement Carry Flag CMP CompareCMPSB/W Compare strings (Byte, Word) CWD Convert Word to DoubleDAA Decimal Adjust After Division DAS Decimal Adjust after SubtractDEC Decrement DIV Unsigned DivideESC Escape (for FPU) HLT HaltIDIV Signed Divide IMUL Signed MultiplyIN Input from Port INC IncrementINT Software Interrupt INTO Interrupt on OverflowIRET Interrupt Return (16 bits) IRETD Interrupt Return (32 bits)JA,JNBE Jump if Above JAE,JNB Jump if Above or EqualJB,JNAE Jump if bellow JBE,JNA Jump if Bellow or EqualJC Junp on Carry JCXZ Jump if CX is ZeroJE,JZ Jump if Equal (Zero) JG,JNLE Jump if GreaterJGE,JNL Jump if Greater or Equal JL,JNGE Jump if LessJLE,JNG Jump if Less or Equal JMP Jump inconditionallyJNC Jump if not Carry JNE,JNZ Jump if not EqualJNP,JPO Jump if Parity Odd JO,JNO Jump on Overflow, not Overf.JP,JPE Jump if Parity Even JS,JNS Jump on Sign, not SignLAHF Load Flags into AH LDS,LES Load Far Pointer (DS, ES)LEA Load Effective Address LOCK Lock the BusLODSB/W Load String (Byte, Word) LOOP LoopLOOPE/Z Loop while Equal LOOPNE/Z Loop while not EqualMOV Move Data MOVSB/W Move String (Byte,Word)MUL Unsigned Multiply NEG Two’s Complement NegationNOP No Operation NOT One’s Complement NegationOR Inclusive Or OUT Output to PortPOP Pop from Stack POPF Pop FlagsPUSH Push into Stack PUSHF Push FlagsRCL Rotate with Carry Left RCR Rotate with Carry RightREP Repeat String REPE/Z Repeat while Equal (Zero)REPNE/Z Repeat while not Equal (Zero) RET,RETF Return from ProcedureROL Rotate Left ROR Rotate RightSAHF Store AH into Flags SAL Shift Arithmetic LeftSAR Shift Arithmetic Right SBB Subtract with BorrowSCASB/W Scan String (Byte, Word) SHL Shift LeftSHR Shift Right STC Set Carry FlagSTD Set Direction Flag STI Set Interrupt FlagSTOS/W Store String (Byte, Word) SUB SubtractTEST Logica Compare WAIT Wait (coprocessor)XCHG Exchange XLAT TranslateXOR Exclusive Or

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

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)

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

F2XM1 Calculates 2^x-1 FABS Absolute ValueFADD Add Real FADDP Add Real and PopFBLD Load BCD FBSTP Store BCD and PopFCHS Change Sign F(N)CLEX Clear exceptionsFCOM Compare Real FCOMP Compare Real And PopFCOMPP Compare Real and Pop Twice FDECSTP Decrement StackF(N)DISI (*) Disable Interrupts FDIV Divide RealFDIVP Divide Real and Pop FDIVR Divide Real ReversedFDIVRP Divide Real Reversed and Pop F(N)ENI (*) Enable InterruptsFFREE Free Register FIADD Integer AddFICOM Compare Integer FICOMP Compare Integer and PopFIDIV Integer Divide FIDIVR Integer Divide ReversedFILD Load Integer FIMUL Integer MultiplyFINCSTP Increment Stack F(N)INIT Initialize CoprocessorFIST Store Integer FISTP Store Integer and PopFISUB Integer Subtract FISUBR Integer Subtract ReversedFLD Load Real FLD1 Load Value of 1.0FLDCW Load Control Word FLDENV Load Environment StateFLDL2E 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.0FMUL Real Multiply FMULP Real Multiply and PopFNOP No Operation FPATAN Partial ArctangentFPREM Partial Remainder FPTAN Partial TangentFRNDINT Round to Integer FRSTOR Restore Saved StateF(N)SAVE Save Coprocessor State FSCALE Scale with powers of 2FSQRT Square Root FST Store RealF(N)STCW Store Control Word F(N)STENV Store Environment StateFSTP Store Real and Pop F(N)STSW Store Status WordFSUB Real Subtract FSUBP Real Subtract and PopFSUBPR Real Subtract Reversed and Pop FSUBR Real Subtract ReversedFTST Test for Zero FWAIT CPU Wait (until FPU ready)FXAM Examine FXCH Exchange RegistersFXTRACT Extract Exponent and Mantissa FYL2X Calculates y . log2(x)FYL2XP1 Calculates y . log2(x+1) (*) – eliminadas a partir do 80287

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

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

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

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

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

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

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

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

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

31 16 15EAX AH AL acumuladorEBX BH BL baseECX CH CL contadorEDX DH DL dado

ESP SP ponteiro para pilhaEBP BP ponteiro baseESI SI índice fonteEDI DI índice destino

31 16 15 0EIP IP apontador de instruçõesEF FLAGS flags

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

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 zeroSF Bit 7 sinal (sign)OF Bit 11 overflow

Flags de controle:TF Bit 8 trapIF Bit 9 interrupt enableDF Bit 10 direção (direction)

Flags específicos do 80386:IOPL Bits 12 e 13 nível de privilégio de E/SNT Bit 14 tarefa aninhadaRF Bit 16 flag resumeVM Bit 17 modo virtual

Registrador de flags (F ou EF)

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

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

Registradores de segmento

• Formam endereço físico (modo real)• Selecionam descritor de segmento (modo protegido)

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

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)

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

Gerência de memória virtual

processador

memória virtual

mapeador

memória física

endereçovirtual

endereçofísico

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

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)

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

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

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

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

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

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)

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

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

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

ADD U+VAND U+VCALL (immediate) VCMP U+VDEC U+VINC U+VJcc VJMP (immediate only) VLEA U+VMOV (general register and memory only) U+VNOP U+VOR U+VPOP (register only) U+VPUSH (register only) U+VRCL, RCR (one bit and immediate only) UROL, ROR (one bit and immediate only) USAR,SHL,SHR (one bit and immediate only) USUB U+VTEST (reg-reg, mem-reg and immediate-EAX only) U+VXOR U+V

Instruções paralelizáveis no Pentium

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

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

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

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)

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

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 dedado

LimiteInferior

LimiteSuperior

Com sinalByte -128 127Palavra -32.768 32.767Sem sinalByte 0 255Palavra 0 65.535

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

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

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

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 0Single FP Single FP Single FP Single FP

Packed Single FP

127 96 95 64 63 32 31 0Não alterado Não alterado Não alterado Single FP

Scalar Single FP

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

Parâmetro Valores após execução de CPUIDEAX=0 EAX: Maior valor aceito para EAX

EBX:ECX:EDX: String de identificaçãoEAX=1 EAX: Identificador do processador (32 bits superiores do número de

série)EBX:ECX: IndefinidosEDX: Feature Flags

EAX=2 EAX:EBX:ECX:EDX: valores de configuração do ProcessadorEAX=3 EDX:ECX: 64 bits inferiores do número de sérieEAX>3 EAX:EBX:ECX:EDX: Indefinidos

Pentium: instrução CPUID e número de série

Desabilitar o número de sérieMOV ECX, 119HRDMSR ;loads EDX:EAXOR EAX, 0020 0000hWRMSR

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

Tipo Código (hexa) Instrução Descrição1 88 reg rm MOV rm8, r8 Move de registradores de 8 bits2 89 reg rm MOV rm16, r16 Move de registradores de 16 bits3 89 reg rm MOV rm32, r32 Move de registradores de 32 bits4 8A reg rm MOV r8, rm8 Move para registradores de 8 bits5 8B reg rm MOV r16, rm16 Move para registradores de 16 bits6 8B reg rm MOV r32, rm32 Move para registradores de 32 bits7 8C reg rm MOV rm16, sreg Move de registrador de segmento8 8E reg rm MOV sreg, rm16 Move para registrador de segmento9 A0 MOV AL, m8 Move byte para AL

10 A1 MOV AX, m16 Move palavra (16 bits) para AX11 A1 MOV EAX, m32 Move palavra dupla (32 bits) para EAX12 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 bits16 B8 reg imed MOV r16, im16 Move dado imediato para reg. 16 bits17 B8 reg imed MOV r32, im32 Move dado imediato para reg. 32 bits18 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)

Codificação de Instruções (exemplo: MOV)

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

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

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

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)

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

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

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

Instruções de transferência de flags

• PUSHF/PUSHFDcoloca registrador de flags na pilha (16 bits para F ou 32 bits para

EF)

• POPF/POPFDretira registrador de flags da pilha (16 bits para F e 32 bits para EF)

• LAHFcarrega AH com flags (8 bits menos significativos do registrador F)

• SAHFcarrega flags com AH (8 bits menos significativos do registrador F)

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

Instruções de transferência sobre endereços

• LEA r16/r32, memcarrega endereço efetivo do operando mem para reg (16 ou 32 bits)

• LDS r16/32, memcarrega endereço de mem para reg (16 ou 32 bits) e DS (16 bits)

• LES r16/32, memcarrega endereço de mem para reg (16 ou 32 bits) e ES (16 bits)

• LFS r16/32, memcarrega endereço de mem para reg (16 ou 32 bits) e FS (16 bits)

• LGS r16/32, memcarrega endereço de mem para reg (16 ou 32 bits) e GS (16 bits)

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

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]

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

Instruções de entrada e saída

• IN acumulador, portaleitura de byte, word ou dobleword para AL, AX ou EAX

• OUT porta, acumuladortransfere byte, word ou doubleword de AL, AX ou EAX para a porta

• IN e OUT podem referenciar até 65536 portas de E/SCada porta pode receber ou fornecer um byte apenas

• Aparecem em dois tipos: direto e indiretoNo 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

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

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

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

Instruções aritméticas sobre dois operandos• ADD destino, fonte

soma (destino = destino + fonte)

• ADC destino, fontesoma com carry (destino = destino + fonte + carry)

• SUB destino, fontesubtrai fonte do destino (destino = destino - fonte)

• SBB destino, fontesubtrai com borrow (destino = destino - fonte - borrow)

• CMP destino, fontecompara 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

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

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

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

Instruções de multiplicação e divisão

• MUL fontemultiplica como inteiro sem sinal

• IMUL fontemultiplica como inteiro com sinal

• DIV fontedivide como inteiro sem sinal

• IDIV fontedivide como inteiro com sinal

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

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

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

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)

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

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

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

Instruções de conversão e ajuste

• CBW converte AL para AX

• CWD converte AX para DX:AX

• CWDEconverte 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)

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

Instruções de transferência e ajuste

• MOVSX destino, fontemove fonte para destino com extensão do sinal

• MOVZX destino, fontemove fonte para destino com extensão de zeros

• Instruções foram acrescentadas a partir do 80386MOVSX r16, rm8

MOVSX r32, rm8

MOVSX r32, rm16

MOVZX r16, rm8

MOVZX r32, rm8

MOVZX r32, rm16

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

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)

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

Instruções de deslocamento

• ROR destino, contador rotate rightmsb recebe lsb, lsb vai também para CF

• RCR destino, contador rotate with carry rightmsb 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 leftlsb recebe CF, msb vai para CF

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

Instruções de deslocamento

• SHR destino, contador shift logical rightmsb recebe 0, lsb vai para CF

• SAR destino, contador shift arithmetic rightmsb recebe sinal, lsb vai para CF

• SHL destino, contador shift leftlsb recebe 0, msb vai para CF

• SAL destino, contador shift leftlsb recebe 0, msb vai para CF (como SHL)

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

Instruções de deslocamento

• Codificações possíveisoperação reg,1

operação reg, CL

operação reg, im8

operação mem,1

operação mem, CL

operação mem, im8

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

Instruções sobre bits de um operando

• BSF bit_index, operando Bit Scan Forward

• BSR bit_index, operando Bit Scan ReverseSe 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 SetCopia o bit para CF

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

Instruções de desvio

• As instruções de desvio podem alterar CS e IP (ou EIP) ou somente IP (ou EIP)

• Se o endereço fornecido é de 16 bits, o registrador EIP é mascarado pelo valor 0000FFFFH; o endereço alvo fica dentro da área de 64 KBytes de um segmento

• Se o endereço fornecido é de 32 bits, o mascaramento não é realizado; endereçando uma área de 4 GBytes. Somente é válido no modo protegido.Nos modos real e virtual86, uma interrupção de erro de endereçamento é gerada se o valor final apontar para valores acima de 64 K

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

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)

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

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 contadorDecrementam o contador e desviam se não chegou a zeroNenhum flag é afetadoLOOPE e LOOPNE testam adicionalmente o flag ZFTodas as instruções permitem apenas deslocamentos curtos (short, ou seja, de

+127 a -128)

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

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

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

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

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

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

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

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)

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

Instruções de desvio condicional

• Independente de sinalJC 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

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

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

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

Instruções Primitivas

• MOVSmove 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)

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

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

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

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

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

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

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

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

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

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

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

Instruções de repetição

• REP repeat• REPE / REPZ repeat while equal/repeat while zero• REPNE / REPNZ repeat while not equal/repeat while not

zero1. 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

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

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

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

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

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

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

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

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

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

Bibliografia

• Weber, Raul F. “Fundamentos deArquitetura de Computadores”. Segunda Edição. Ed. Sagra-Luzzatto, 2001– Capítulo 12