Intel
Intel
• Arquitetura de 16 bits
• Comunicação com a memória em 16 (8086) ou 8 (8088) bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
Microprocessador Intel 8086/8088
15 8 7 0
AX AH AL acumulador
BX BH BL base
CX CH CL contador
DX DH DL dado
IP apontador de instruções
FLAGS flags
CS segmento de código
DS segmento de dados
SS segmento de pilha
ES segmento extra
Microprocessador Intel 8086
• Arquitetura de 16 bits
• Comunicação com a memória em 16 (8086) ou 8 (8088) bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
8086 - Formação de endereço
15 0
Offset (deslocamento)
15 0
CS 0000
DS 0000
SS 0000
ES 0000
19 0
Endereço Físico
Uso padrão de registradores de segmento
Modo Significado
Imediato operando na instrução
Registrador operando em registrador
Direto operando na memória, endereçado por deslocamento contido na
instrução
Registrador indireto operando na memória, endereçado por deslocamento contido em
registrador
Indexado (ou base) operando na memória, endereçado pela soma do conteúdo do
registrador de índice (ou base) com o deslocamento contido na
instrução
Base e indexado com operando na memória, endereçado pela soma do conteúdo do
deslocamento registrador de índice com o conteúdo do registrador base e com o
deslocamento contido na instrução
Exemplos de modos de endereçamento
(ADD destino, fonte)
Imediato: ADD CH,5FH
• Arquitetura de 16 bits
• Comunicação com a memória em 16 (8086) ou 8 (8088) bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
• 85 instruções básicas
AAA A S C I I A d ju s t A fte r A d itio n AAD A S C I I A d ju s t B e fo r e D iv isio n
AAM A S C I I A d ju s t A fte r M u ltip ly AAS A S C I I A d ju s t A fte r S u b tr a c t
ADC A d d w ith C a r r y ADD Add
AND L o g ic a l A n d CALL C a ll P r o c e d u r e
CBW C o n v e r t B y te to W o r d CLC C le a r C a r r y F la g
CLD C le a r D ir e c tio n F la g CLI C le a r In te r r u p t F la g
CMC C o m p le m e n t C a r r y F la g CMP C om p are
C M P S B /W C o m p a r e str in g s (B y te , W o r d ) CW D C o n v e r t W o r d to D o u b le
DAA D e c im a l A d ju s t A fte r D iv isio n DAS D e c im a l A d ju s t a fte r S u b tr a c t
DEC D ecrem en t D IV U n s ig n e d D iv id e
ESC E sc a p e (fo r F P U ) HLT H a lt
ID I V S ig n e d D iv id e IM U L S ig n e d M u ltip ly
IN I n p u t fr o m P o r t IN C In crem en t
IN T S o ftw a r e In te r r u p t IN T O I n te r r u p t o n O v e r flo w
IR E T I n te r r u p t R e tu r n (1 6 b its) IR E T D I n te r r u p t R e tu r n (3 2 b its)
J A ,J N B E J u m p if A b o v e J A E ,J N B J u m p if A b o v e o r E q u a l
J B ,J N A E J u m p if b e llo w J B E ,J N A J u m p if B e llo w o r E q u a l
JC Ju n p on C arry JC XZ J u m p if C X is Z e r o
J E ,J Z J u m p if E q u a l (Z e r o ) J G ,J N L E J u m p if G r e a te r
J G E ,J N L J u m p if G r e a te r o r E q u a l J L ,J N G E J u m p if L e ss
J L E ,J N G J u m p if L e ss o r E q u a l JM P J u m p in c o n d itio n a lly
JN C J u m p if n o t C a r r y J N E ,J N Z J u m p if n o t E q u a l
J N P ,J P O J u m p if P a r ity O d d J O ,J N O J u m p o n O v e r flo w , n o t O v e r f.
J P ,J P E J u m p if P a r ity E v e n J S ,J N S J u m p o n S ig n , n o t S ig n
LAHF L o a d F la g s in to A H L D S ,L E S L o a d F a r P o in te r (D S , E S )
LEA L o a d E ffe c tiv e A d d r e ss LOCK L o c k th e B u s
L O D S B /W L o a d S tr in g (B y te , W o r d ) LOOP L oop
L O O P E /Z L o o p w h ile E q u a l L O O P N E /Z L o o p w h ile n o t E q u a l
MOV M o v e D a ta M O V S B /W M o v e S tr in g (B y te ,W o r d )
MUL U n s ig n e d M u ltip ly NEG T w o ’s C o m p le m e n t N e g a tio n
NOP N o O p e r a tio n NOT O n e ’s C o m p le m e n t N e g a tio n
OR I n c lu siv e O r OUT O u tp u t to P o r t
PO P P o p fr o m S ta c k PO PF P o p F la g s
PUSH P u s h in to S ta c k PU SH F P u s h F la g s
RCL R o ta te w ith C a r r y L e ft RCR R o ta te w ith C a r r y R ig h t
REP R e p e a t S tr in g R E P E /Z R e p e a t w h ile E q u a l (Z e r o )
R E P N E /Z R e p e a t w h ile n o t E q u a l (Z e r o ) R E T ,R E T F R e tu r n fr o m P r o c e d u r e
ROL R o ta te L e ft ROR R o ta te R ig h t
SAH F S to r e A H in to F la g s SAL S h ift A r ith m e tic L e ft
SAR S h ift A r ith m e tic R ig h t SBB S u b tr a c t w ith B o r r o w
S C A S B /W S c a n S tr in g (B y te , W o r d ) SH L S h ift L e ft
SH R S h ift R ig h t STC S e t C a r r y F la g
STD S e t D ir e c tio n F la g STI S e t I n te r r u p t F la g
S T O S /W S to r e S tr in g (B y te , W o r d ) SUB S u b tr a c t
TEST L o g ic a C o m p a r e W A IT W a it (c o p r o c e ss o r )
XCHG E xch an ge XLAT T r a n sla te
XOR E x c lu siv e O r
Microprocessador Intel 8086
• Arquitetura de 16 bits
• Comunicação com a memória em 16 (8086) ou 8 (8088) bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
• 85 instruções básicas
• co-processador: 8087 (67 instruções básicas)
F2XM1 Calculates 2^x-1 FABS Absolute Value
FADD Add Real FADDP Add Real and Pop
FBLD Load BCD FBSTP Store BCD and Pop
FCHS Change Sign F(N)CLEX Clear exceptions
FCOM Compare Real FCOMP Compare Real And Pop
FCOMPP Compare Real and Pop Twice FDECSTP Decrement Stack
F(N)DISI (*) Disable Interrupts FDIV Divide Real
FDIVP Divide Real and Pop FDIVR Divide Real Reversed
FDIVRP Divide Real Reversed and Pop F(N)ENI (*) Enable Interrupts
FFREE Free Register FIADD Integer Add
FICOM Compare Integer FICOMP Compare Integer and Pop
FIDIV Integer Divide FIDIVR Integer Divide Reversed
FILD Load Integer FIMUL Integer Multiply
FINCSTP Increment Stack F(N)INIT Initialize Coprocessor
FIST Store Integer FISTP Store Integer and Pop
FISUB Integer Subtract FISUBR Integer Subtract Reversed
FLD Load Real FLD1 Load Value of 1.0
FLDCW Load Control Word FLDENV Load Environment State
FLDL2E Load Value of Log2(e) FLDL2T Load Value of Log2(10)
FLDLG2 Load Value of Log10(2) FLDLN2 Load Value of Loge(2)
FLDPI Load Value of Pi FLDZ Load Value of 0.0
FMUL Real Multiply FMULP Real Multiply and Pop
FNOP No Operation FPATAN Partial Arctangent
FPREM Partial Remainder FPTAN Partial Tangent
FRNDINT Round to Integer FRSTOR Restore Saved State
F(N)SAVE Save Coprocessor State FSCALE Scale with powers of 2
FSQRT Square Root FST Store Real
F(N)STCW Store Control Word F(N)STENV Store Environment State
FSTP Store Real and Pop F(N)STSW Store Status Word
FSUB Real Subtract FSUBP Real Subtract and Pop
FSUBPR Real Subtract Reversed and Pop FSUBR Real Subtract Reversed
FTST Test for Zero FWAIT CPU Wait (until FPU ready)
FXAM Examine FXCH Exchange Registers
FXTRACT Extract Exponent and Mantissa FYL2X Calculates y . log2(x)
FYL2XP1 Calculates y . log2(x+1) (*) – eliminadas a partir do 80287
Microprocessador Intel 8086
• Arquitetura de 16 bits
• Comunicação com a memória em 16 (8086) ou 8 (8088) bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores (4 dado, 4 endereço, 4 segmento, ponteiro do
programa, flags)
• endereço físico = segmento * 16 + deslocamento
• 85 instruções básicas
• co-processador: 8087 (67 instruções básicas)
• sem cache, sem memória virtual
• somente opera no modo real
Microprocessador Intel 80186
• Idêntico ao 8086
• Comunicação com a memória em 16 bits
• Capacidade máxima de memória de 1 MByte
• 14 registradores
• Endereço físico = segmento * 16 + deslocamento
• Sete instruções extras (85 + 7 = 92 instruções básicas)
• Co-processador: 80187 (idêntico ao 8087)
• Sem cache, sem memória virtual
Microprocessador Intel 80286
31 16 15 0
EIP IP apontador de instruções
EF FLAGS flags
Registrador de flags (F ou EF)
Flags de status:
CF Bit 0 vai-um (carry)
PF Bit 2 paridade (parity)
AF Bit 4 vai-um auxiliar (auxiliary carry)
ZF Bit 6 zero
SF Bit 7 sinal (sign)
OF Bit 11 overflow
Flags de controle:
TF Bit 8 trap
IF Bit 9 interrupt enable
DF Bit 10 direção (direction)
Flags específicos do 80386:
IOPL Bits 12 e 13 nível de privilégio de E/S
NT Bit 14 tarefa aninhada
RF Bit 16 flag resume
VM Bit 17 modo virtual
Registradores de segmento
memória virtual
endereço
virtual
processador mapeador
endereço
físico
memória física
Questões de memória virtual
• Quando mover um bloco da memória secundária para a
memória primária (real) ?
por demanda
• Quando mover um bloco da memória real para a memória
secundária?
quando faltar espaço na memória real
• qual o tamanho ideal de um bloco?
constante (paginação) ou variável (segmentação)
• onde colocar um novo bloco transferido para a memória
principal?
onde houver área livre (paginação) ou no “melhor” lugar (segmentação)
Microprocessador Intel 80386
127 96 95 64 63 32 31 0
Single FP Single FP Single FP Single FP
Packed Single FP
127 96 95 64 63 32 31 0
Não alterado Não alterado Não alterado Single FP
Scalar Single FP
Pentium: instrução CPUID e número de série
• PUSHF/PUSHFD
coloca registrador de flags na pilha (16 bits para F ou 32 bits para EF)
• POPF/POPFD
retira registrador de flags da pilha (16 bits para F e 32 bits para EF)
• LAHF
carrega AH com flags (8 bits menos significativos do registrador F)
• SAHF
carrega flags com AH (8 bits menos significativos do registrador F)
Instruções de transferência sobre endereços
• IN acumulador, porta
leitura de byte, word ou dobleword para AL, AX ou EAX
• OUT porta, acumulador
transfere byte, word ou doubleword de AL, AX ou EAX para a porta
• IN e OUT podem referenciar até 65536 portas de E/S
Cada porta pode receber ou fornecer um byte apenas
• Aparecem em dois tipos: direto e indireto
No tipo direto a instrução fornece um endereço de porta de 1 byte
(sob a forma de constante imediata, entre 0 e 255)
No tipo indireto, o registrador DX fornece o endereço de porta,
permitindo assim referenciar até 65536 portas
Instruções de entrada e saída
• Formatos possíveis
• MUL fonte
multiplica como inteiro sem sinal
• IMUL fonte
multiplica como inteiro com sinal
• DIVfonte
divide como inteiro sem sinal
• IDIV fonte
divide como inteiro com sinal
Instruções de multiplicação e divisão
• AL x fonte = AX
(multiplicação de bytes, resultado em uma palavra)
• AX x fonte = DX:AX
(multiplicação de palavras, resultado em palavra dupla)
• EAX x fonte = EDX:EAX
(multiplicação de palavras duplas, resultado em 64 bits)
• CF e OF são ligados se a metade mais significativa do
resultado não for apenas extensão do sinal; demais flags
indefinidos
Instruções de multiplicação e divisão
• NOT destino
• AND destino, fonte
• OR destino, fonte
• XOR destino, fonte
• TEST destino, fonte
(idêntico a AND, sem armazenar resultado)
Instruções de deslocamento
• ROR destino, contador rotate right
msb recebe lsb, lsb vai também para CF
• RCR destino, contador rotate with carry right
msb recebe CF, lsb vai para CF
• ROL destino, contador rotate left
lsb recebe msb, msb vai também para CF
• RCL destino, contador rotate with carry left
lsb recebe CF, msb vai para CF
Instruções de deslocamento
• SHR destino, contador shift logical right
msb recebe 0, lsb vai para CF
• SAR destino, contador shift arithmetic right
msb recebe sinal, lsb vai para CF
• SHL destino, contador shift left
lsb recebe 0, msb vai para CF
• SAL destino, contador shift left
lsb recebe 0, msb vai para CF (como SHL)
Instruções de deslocamento
• Codificações possíveis
operação reg,1
operação reg, CL
operação reg, im8
operação mem,1
operação mem, CL
operação mem, im8
Instruções sobre bits de um operando
• INT tipo:
desvia de modo far para o endereço especificado em
mem(0000:tipo*4)
desvio semelhante a uma subrotina, mas empilha flags
Instruções de desvio condicional
• Com sinal
– JG endereço_alvo greater ((SF XOR OF) OR ZF) = 0
– JNLE endereço_alvo not less nor equal (idem)
– JGE endereço_alvo greater or equal (SF XOR OF) = 0
– JNL endereço_alvo not less (idem)
– JL endereço_alvo less(SF XOR OF) = 1
– JNGE endereço_alvo not greater nor equal (idem)
– JLE endereço_alvo less or equal ((SF XOR OF) OR ZF) = 1
– JNG endereço_alvo not greater (idem)
– JO endereço_alvo overflow OF = 1
– JS endereço_alvo sign SF = 1
– JNO endereço_alvo not overflow OF = 0
– JNS endereço_alvo not sign SF = 0
Instruções de desvio condicional
• Sem sinal:
– JA endereço_alvo above (CF OR ZF) = 0
– JNBE endereço_alvo not below nor equal (idem)
– JAE endereço_alvo above or equal CF = 0
– JNB endereço_alvo not below (idem)
– JB endereço_alvo below CF = 1
– JNAE endereço_alvo not above nor equal (idem)
– JBE endereço_alvo below or equal (CF OR ZF) = 1
– JNA endereço_alvo not above (idem)
Instruções de desvio condicional
• Independente de sinal
JC endereço_alvo carry CF = 1
JE/JZ endereço_alvo equal / zero ZF = 1
JP/JPE endereço_alvo parity / parity even PF = 1
JNC endereço_alvo not carry CF = 0
JNE/JNZ endereço_alvo not equal / not zero ZF = 0
JNP/JPO endereço_alvo not parity / parity odd PF = 0
Instruções de manipulação de strings
• Registradores implícitos
– [E]SI índice para string fonte
– [E]DI índice para string destino
– ES segmento do string destino
– [E]CX contador
– AL/AX/EAX valor de busca (destino p/ LODS, fonte p/ STOS)
– DF 0 (auto incremento p/ DI, SI)
1 (auto decremento p/ DI, SI)
– ZF condição de término para busca e comparação
Instruções Primitivas
• REP repeat
• REPE / REPZ repeat while equal/repeat while zero
• REPNE / REPNZ repeat while not equal/repeat while not
zero
1. Se ECX = 0, então não executa a primitiva e encerra a repetição
2. Se ECX > 0, então:
2.1 Executa a operação primitiva, atualizando os flags
2.2 Decrementa ECX, sem afetar os flags
2.3 Volta para a repetição, de acordo com o prefixo:
2.3.1 Se for REP, repete incondicionalmente
2.3.2 Se for REPE/Z, somente repete se Z=1
2.3.3 Se for REPNE/NZ, somente repete se Z=0
Instruções sobre flags