Você está na página 1de 77

Arquitetura de Computadores

Prof. Fbio M. Costa Instituto de Informtica UFG 1S/2005 ISA Parte II: Arquiteturas-Exemplo Simuladores e Mquinas Reais

Objetivos Gerais

Demonstrar os conceitos genricos de arquiteturas de computadores (nvel ISA) atravs do uso de algumas arquiteturasexemplo representativas

computadores hipotticos: simuladores computadores reais: Intel x86

Introduzir o tpico de programao em baixo nvel, como ferramenta para o entendimento de arquiteturas de computadores

Arquiteturas estudadas

Computadores hipotticos (simuladores com finalidade didtica):


Neander Ahmes Ramses Cesar

Weber, Raul F. Fundamentos de Arquitetura de Computadores. Srie de Livros Didticos do Instituto de Informtica da UFRGS, Nmero 8, 2a. Edio. Sagra-Luzzatto, 2001

Computadores reais:

IBM PC famlia Intel x86

O Computador Neander

Largura de dados e endereos: 8 bits

i.e., comprimento de palavra de 8 bits

Dados representados em complemento de 2 1 acumulador de 8 bits (AC)

arquitetura de acumulador

1 apontador de programa de 8 bits (PC) 1 registrador de estado (flags) com 2 cdigos de condio:

negativo (N) e zero (Z)

Neander: Formato das Instrues


opcode: 8 bits operando: 8 bits seguintes


especifica um endereo modo direto Endereo


4 3 0 (ignorados)

Memria
opcode operando

x: Endereo x+1:

7 opcode

endereo direto Obs.: o segundo byte (operando) ocorre apenas em instrues de manipulao de dados, i.e., que fazem referncia memria

...

Neander: Organizao da Memria - Convenes


256 palavras de 8 bits: 256 bytes Primeiros 128 bytes (metade inferior):

Cdigo do programa Dados do programa

128 bytes seguintes (metade superior):

Apenas convenes: dados e cdigo podem ser localizados em qualquer lugar

Mas um no pode invadir a rea do outro

Neander: Conjunto de Instrues


Cdigo 0000 0001 0010 0011 0100 0101 0110 1000 1001 1010 1111 Instruo NOP STA end LDA end ADD end OR NOT JMP end JN JZ HLT end end end AND end Significado nenhuma operao MEM(end) AC AC MEM(end) AC MEM(end) + AC AC MEM(end) OR AC (ou bit-a-bit) AC MEM(end) AND AC (e bit-a-bit) AC NOT AC (complemento de 1) PC end (desvio incondicional) IF N=1 THEN PC end IF Z=1 THEN PC end trmino da execuo (halt)

Neander: Cdigos de Condio (Flags)

Gerados pela Unidade Lgico-Aritimtica aps as seguintes operaes:

ADD, NOT, AND, OR e LDA

Testados pelas instrues JN e JZ N (negativo): indica o sinal do resultado


1: resultado negativo 0: resultado positivo 1: resultado igual a zero 0: resultado diferente de zero

Z (zero): indica se o resultado igual a zero


Neander: Simulador

Object 1

O Computadore Ahmes

Largura de dados e endereos: 8 bits Dados representados em complemento de 2 1 acumulador de 8 bits (AC) 1 apontador de programa de 8 bits (PC) 1 registrador de estado (flags) com 5 cdigos de condio:

negativo (N) e zero (Z) carry out (C), borrow out (B), overflow (V)

Compatvel com o Neander

Ahmes: Conjunto de Instrues


Cdigo 0000 xxxx 0001 xxxx 0010 xxxx 0011 xxxx 0100 xxxx 0101 xxxx 0110 xxxx 0111 xxxx 1000 xxxx 1001 00xx 1001 01xx 1001 10xx 1001 11xx Instruo NOP STA end LDA end ADD end OR NOT SUB end JMP end JN JP JV end end end end AND end Significado nenhuma operao MEM(end) AC AC MEM(end) AC AC + MEM(end) AC AC OR MEM(end) (ou bit-a-bit) AC AC AND MEM(end) (e bit-a-bit) AC NOT AC (complemento de 1) AC AC - MEM(end) PC end (desvio incondicional) IF N=1 THEN PC end IF N=0 THEN PC end IF V=1 THEN PC end IF V=0 THEN PC end

JNV end

Ahmes: Conjunto de Instrues (2)


Cdigo 1010 00xx 1010 01xx 1011 00xx 1011 01xx 1011 10xx 1011 11xx 1110 xx00 1110 xx01 1110 xx10 1110 xx11 1111 xxxx Instruo JZ JC JB SHR SHL ROR ROL HLT end end end JNZ end JNC end JNB end Significado IF Z=1 THEN PC end IF Z=0 THEN PC end IF C=1 THEN PC end IF Z=0 THEN PC end IF B=1 THEN PC end IF Z=0 THEN PC end C AC(0); AC(i-1) AC(i); AC(7) 0 C AC(7); AC(i) AC(i-1); AC(0) 0 C AC(0); AC(i-1) AC(i); AC(7) C C AC(7); AC(i) AC(i-1); AC(0) C trmino da execuo (halt)

Instrues que afetam os Cdigos de Condio


Instruo NOP STA end LDA end ADD end SUB end OR end Cdigos alterados nenhum nenhum N, Z N, Z, V, C N, Z, V, B N, Z N, Z N, Z Instruo JMP end Jxx SHR SHL ROR ROL HLT end Cdigos alterados nenhum nenhum N, Z, C N, Z, C N, Z, C N, Z, C nenhum

AND end NOT

Ahmes: Simulador

Object 2

O Computadore Ramses

Incorpora os recursos do NEANDER Acrescenta


Outros modos de endereamento (o NEANDER s tem o direto) Novos registradores Novos bits no registrador de estado (cdigos de condio) Novas instrues (mais poderosas)

compatvel com o cdigo escrito para o NEANDER ( capaz de rodar os programas do NEANDER)

Ramses: Caractersticas

Largura de dados e endereos = 8 bits

Tamanho da memria = 256 bytes Isso tem efeito nos clculos que envolvem a ULA

Dados representados em complemento de 2

Registradores (em negrito os adicionais ao Neander)


De uso geral: A e B (8 bits) Registrador de ndice: X (8 bits) Apontador de programa (PC) Registrador de estado

Cdigos de condio N, Z e C

Ramses: Formato de Instrues

Instrues so representadas por 1 ou 2 bytes

Semelhante ao Neander

Ramses: Modos de Endereamento

00 Direto: endereo do operando no segundo byte (como no Neander) 01 Indireto: endereo do endereo do operando no segundo byte 10 Imediato: o prprio operando no segundo byte 11 Indexado: o segundo byte contm um endereo (base), que somado ao contedo do registrador RX (ndice) para compor o endereo do operando

Ramses: Modo Direto


A = MEM(Palavra imediata) = MEM(MEM(PC)) memria (rea do programa) PC (rea de dados)

Ramses: Modo Direto Exemplo


A = MEM((MEM(PC)) = MEM(93H) = 25H memria (rea do programa) PC (rea de dados)

Ramses: Modo Indireto


A = MEM(MEM(Palavra imediata)) = MEM(MEM(MEM(PC))) (rea de dados) memria (rea do programa) PC

Ramses: Modo Indireto Exemplo


A = MEM(MEM(MEM(PC))) = MEM(MEM(93H)) = MEM(C4H) = 25H

(rea de dados) memria (rea do programa) PC

Ramses: Modo Imediato


A = Palavra imediata = MEM(PC)

(rea de dados) memria (rea do programa) PC

Ramses: Modo Imediato Exemplo


A = MEM(PC) = 25H

(rea de dados) memria (rea do programa) PC

Ramses: Modo Indexado


A = MEM(X+Palavra imediata) = MEM (X + MEM(PC)) memria (rea do programa) PC (rea de dados)

Ramses: Modo Indexado Exemplo


A = MEM(X + MEM(PC) = MEM (93H + 06H) = MEM(99H) = 25H

memria (rea do programa) PC

(rea de dados)

Ramses: Cdigos dos Registradores


00: Registrador A (RA) 01: Registrador B (RB) 10: Registrador de ndice (RX) 11: indefinido

Ramses: Representao simblica dos modos de endereamento

Direto: end = n

Ex1: NOME Ex2: 93H Ex1: NOME,I Ex2: 93H,I Ex1: #NOME Ex2: #25H Ex1: NOME,X Ex2: 93H,X

Indireto: end = n,I


Imediato: end = #n

Indexado: end = n,X


Ramses: Desvios e Modos de Endereamento

Os seguintes modos de endereamento podem ser usados para especificar o endereo alvo de desvios

direto indireto indexado

Modo imediato: no vlido seria um desvio para a prpria instruo

Ramses: Desvios no Modo Direto

Endereo de desvio:

Palavra imediata = MEM(PC) Prxima instruo = MEM(MEM(PC))

O que equivalente a:

Ramses: Desvios no Modo Indireto

Endereo de desvio

MEM(MEM(PC)) MEM(MEM(MEM(PC)))

Prxima instruo

Ramses: Desvios no Modo Indexado

Endereo de desvio

X + MEM(PC) MEM(X + MEM(PC))

Prxima Instruo

Ramses: Conjunto de Instrues (1)

Acesso memria

STR r end LDR r end ADD r end SUB r end OR r end AND r end NOT r NEG r

; MEM(end) r ; r MEM(end) ; r MEM(end) + r

Aritimticas e lgicas

; r NOT(r) neg. bit-a-bit ; r -r

Ramses: Conjunto de Instrues (2)

Instrues de controle de fluxo


JMP JN JZ JC JSR

end end end end end

; PC end ; IF N=1 THEN PC end ; IF Z=1 THEN PC end ; IF C=1 THEN PC end ; MEM(end) PC; PC end+1

Desvio para sub-rotina

Ramses: Conjunto de Instrues (3)

Instruo de deslocamento de bits

SHR r

; r r/2

Considerar as limitaes impostas pelo formato de instruo adotado

Ramses: Cdigos de Condio


Instruo 0010 LDR 0011 ADD 0100 OR 0101 AND 0110 NOT 0111 SUB 1101 NEG 1110 SHR Cdigos de Condio N, Z N, Z, C N, Z N, Z N, Z N, Z, C Obs.: carry=1: no houve borrow; carry=0: houve borrow N, Z, C N, Z, C Obs.: carry = bit menos significativo (deslocado para fora do registrador)

Exerccio

Ex. 3 (Weber):

Inicializao de uma rea de memria com n posies


end. 128: nmero de posies end. 129: posio inicial

O Montador Daedalus

Uso de mnemnicos em lugar dos cdigos de operao binrios

evita ter que montar os cdigos manualmente

Permite o uso de rtulos em lugar de endereos


dados instrues (para uso em desvios)

Ramses: Subrotinas (procedimentos)


Chamada: JSR end

Jump to SubRoutine

Retorno: JMP end,I

desvio com endereo indireto

O endereo de retorno armazenado na primeira palavra da subrotina Execuo de JSR end


MEM(end) PC ;armazena o endereo de retorno PC end + 1 ;desvio para a primeira instruo ;da subrotina

Exemplo:

Uma subrotina para calcular o complemento de 2 de um nmero


End. Instruo 60 NOP ;aqui ficar o end. de retorno 61 NOT B 62 ADD B #1 64 JMP 60,I ;retorno da subrotina

Chamada da subrotina: JSR 60

Exemplos de chamadas
... 10 JSR 60 ;guarda end. 12 na pos. 60 da mem. 12 ... ;instruo a executar aps o retorno ... 16 JSR 60 ;guarda end. 18 na pos. 60 da mem. 18 ... ; instruo a executar aps o retorno ... 60 NOP ;posio onde ser guardado o end. retorno 61 xxx ;posio onde fica a primeira instr. da rotina

Em ambos os casos, aps JSR, PC = 61

Ramses: Subrotinas Limitaes

No permite recursividade

Por que??? i.e., mesmo cdigo compartilhado por vrios programas

No permite reentrncia

Por que???

Mas permite chamadas aninhadas

uma subrotina que chama outra, que chama outra, ...

Ramses: Subrotinas Passagem de Parmetros

Duas modalidades:

Por valor passa-se o valor da varivel Por nome passa-se o endereo da varivel via registrador via memria, em endereos pre-estabelecidos via memria, nas posies seguintes chamada via memria, em endereo apontado por RX (modo indexado)

Mecanismos:

Passagem por Registrador

Programa principal:
LDR A primeiro_operando LDR B segundo_operando JSR multiplica STR A resultado

Subrotina:
multiplica: NOP STR A op1 STR B op2 <multiplicao> LDR A result JMP multiplica, I

Passagem por Memria

Programa principal:
LDR STR LDR STR JSR LDR STR A A A A primeiro_operando param1 segundo_operando param2 multiplica A param3 A resultado

Subrotina
NOP LDR A param1 STR A op1 LDR A param2 STR A op2 <multiplicao> LDR A result STR A param3 JMP multiplica,I

Passagem por Memria (na rea do programa)


Subrotina:
A A A A A A A A A A multiplica, I param1 multiplica #1 multiplica multiplica, I param2 multiplica #1 multiplica

Programa principal:
JSR multiplica <valor do 1o. operando> <valor do 2o. operando> <endereo do resultado> <<instruo seguinte>> ...

multiplica: NOP LDR STR LDR ADD STR LDR STR LDR ADD STR

<multiplicao> LDR STR LDR STR LDR ADD STR A A B B A A A multiplica, I param3 result param3, I multiplica #1 multiplica

JMP multiplica, I

Outra opo para acesso aos parmetros: Modo Indexado

Subrotina
LDR X multiplica ;endereo do primeiro operando LDR A 0,X ;valor do primeiro operando STR A param1 LDR A 1,X STR A param2 <multiplicao> STR LDR LDR STR X X A A end_ret 2,X result 0,X ;endereo do terceiro op. (retorno) ;resultado da rotina ;salva result. no endereo do 3o. parmetro ;valor do segundo operando

multiplica: NOP

LDR X end_ret ADD X #3 ;atualiza o endereo de retorno STR X multiplica JMP multiplica, I ;retorna da subrotina

O Computador Hipottico Cesar: Viso geral da arquitetura


Caractersticas gerais Organizao de memria Modos de endereamento Manipulao da Pilha Conjunto de instrues Entrada e Sada Subrotinas

O Computador Hipottico Cesar: Viso geral da arquitetura


Modos de endereamento: 8 Registrador de estado com 4 cdigos de condio:

N, Z, C, V

Processamento de pilha Incompatvel com o NEANDER e RAMSES Dados e endereos com 16 bits Representao dos dados em complemento de 2 Instrues com 0, 1 ou 2 endereos (operandos) Registradores de uso geral

R0 at R5: sem funo especfica R6: apontador de pilha (SP Stack Pointer) R7: apontador de programa (PC Program Counter)

Cesar: Organizao de memria


Organizada em bytes Razes


Acomodar instrues com 1 byte Usada em processadores comerciais Em geral, dados mais largos possuem tamanhos mltiplos de 8 bits Big endian ou high/low: Motorola, CESAR Little endian ou low/high: Intel

Formas de armazenamento

Cesar: Modos de Endereamento

Obs.: todos os modos (exceto 000) podem ser usados tanto para acesso a dados quanto para indicar endereos de desvio para endereo de desvio, o modo 000 (registrador) no vlido

Cesar: Modos de endereamento usando o registrador R7 (PC)

O processador permite livre acesso ao PC (contador de programa). Alguns modos de endereamento comuns podem ser obtidos desta forma:

imediato absoluto (ou direto)

Cesar: Modo Imediato

Uso do registrador R7 (PC) no modo registrador com ps-incremento A palavra (2 bytes) seguinte instruo atual contm o operando imediato

Aps buscar a instruo, PC aponta para o primeiro byte desta palavra

operando: MEM(PC) PC PC + 2

Aps executar o acesso (ao operando imediato)

isto , o endereo da prxima instruo efetiva

Cesar: Modo Direto

Uso do registrador R7 (PC) no modo ps-incremento indireto A palavra seguinte instruo atual contm o endereo do operando

Aps a busca da instruo, PC aponta para o endereo do operando

operando: MEM(MEM(PC)) PC PC + 2

Aps executar o acesso ao operando

Cesar: Manipulao da Pilha do Sistema


Apontador de topo da pilha (SP-Stack Pointer):

registrador R6

Inicializado com 0 Empilhamento:


SP := SP 2 MEM(SP) := dado

Desempilhamento
Dado := MEM(SP) SP := SP + 2

Cresce em direo aos endereos menores

No existe controle de coliso com o programa ou dados

Obs.: no h instrues especficas para manipulao da pilha usar os modos de registrador ps- e pr-incremento com o registrador R6

Cesar: Conjunto de Instrues


Cdigo (4 bits mais significativos do 1o. byte da instruo) 0000 0001 e 0010 0011 0100 0101 0110 0111 1000 1001 a 1110 1111 Categoria de Instrues NOP Instrues sobre cdigos de condio Instrues de desvio condicional Instruo de desvio incondicional (JMP) Instruo de controle de lao (SOB) Instr. de desvio para subrotina (JSR) Instr. de retorno de subrotina (RTS) Instrues de um operando Instrues de dois operandos Instruo de parada (HLT)

Cesar: Instruo NOP

Ocupa apenas 1 byte


7 0 0 0 0 X X X X 0

NOP

os bits 0 a 3 podem assumir qualquer valor

Cesar: Instrues para manipular cdigos de condio


Ocupam apenas 1 byte Formato:

CCC: 0 0 0 1 n z v c

desliga (zera) os cdigos de condio correspondentes aos bits selecionados (n, z, v, c) liga os cdigos de condio selecionados

SCC: 0 0 1 0 n z v c

Cesar: Instrues de desvio Condicional


Ocupam 2 bytes Formato geral:


Bccc
7 0 d

0 0 d 1 d 1 d c d c d c d c d

cccc: condio a ser testada segundo byte: deslocamento relativo ao PC


em complemento de 2: faixa PC-128 at PC+127 valor do PC utilizado: endereo da prxima instruo (isto , aps o byte de deslocamento)

Cesar: Desvio condicional: Cdigos de condio e mnemnicos

Cesar: Instruo de Desvio Incondicional


Ocupa 2 bytes Formato:


JMP
7 0 x

0 0 m 0 m x m x r x r x r

1 x

bits x: podem assumir qualquer valor Especificao do endereo de desvio:


campo mmm: modo de endereamento campo r r r: registrador utilizado

Cesar: Instruo de Controle de Lao


Ocupa 2 bytes Significado:


Subtract One and Branch if not zero utiliza um registrador como contador
7 0 d 0 1 d 0 d 1 d x d r d r d r d

Formato: SOB

bits r r r: registrador usado como contador bits d: endereo para o desvio (incio do lao), expresso como um deslocamento relativo ao PC

Cesar: Instruo de desvio para Subrotina

Ocupa 2 bytes, com o seguinte formato:

JSR

7 0 x

0 1 x 1 m 0 m x m r r r r r r

bits r r r do 1o. byte: registrador de retorno pode ser o prprio PC! (i.e., R7) bits mmm e rrr (2o. byte): modo de endereamento e registrador usados para calcular o endereo da subrotina
temporrio endereo da subrotina pilha registrador de retorno registrador de retorno R7 (i.e., PC) R7 temporrio

Execuo:

Cesar: Retorno de Subrotina

Ocupa apenas 1 byte; formato:


RTS

7 0 0 1 1 1 x r r r

campo r r r: indica o registrador de retorno

contm o endereo de retorno


R7 (PC) registrador de retorno registrador de retorno topo da pilha

Execuo:

Cesar: Instrues de 1 Operando

Formato geral:
7 1 x

0 0 x 0 m 0 m c m c r c r c r

campo cccc: cdigo especfico da instruo campos mmm e rrr: modo de endereamento e registrador usados para calcular o operando da instruo

Cesar: Instrues de 1 Operando

Cesar: Instrues de 2 Operandos

Formato geral:
7 1 r

0 c r c m c m m m m r m r r r

campo ccc: cdigo especfico da instruo primeiro par mmm e rrr: operando fonte segundo par mmm e rrr: operando destino

Cesar: Instrues de 2 Operandos

Cesar: Codificao Simblica (com uso do montador)

Modos de endereamento
Smbolo Rx (Rx)+ -(Rx) ddd(Rx) (Rx) ((Rx)+) (-(Rx)) (ddd(Rx)) #nnn (onde: nnn = valor da constante) nnn (onde: nnn = endereo de mem.)

Modo Registrador Reg. (indireto) com ps-decremento Reg. (indireto) com pr-decremento Indexado Registrador indireto Reg. ps-incr. (duplamente) indireto Reg. pr-decr. (duplamente) indireto Indexado Indireto Imediato Absoluto ou direto

Cesar: Codificao Simblica (com uso do montador)

Instrues (mnemnicos)
Codificao simblica
CCC [N] [Z] [V] [C] SCC [N] [Z] [V] [C] Bccc ddd (onde: ddd = deslocamento em relao ao R7. Ex.: BNE -16) JMP end (onde: end indica o endereo alvo do desvio, com uso de um modo de endereamento apropriado) SOB Rx, ddd (onde: ddd = deslocamento) JSR Rx, end (onde: end = endereo da subrotina) RTS Rx (e Rx = reg. de retorno) XXX op_end (onde: op_end = end. do operando) (Ex.: DEC op_end op op 1) XXX end_fonte, end_dest (Ex.: MOV end_fonte, end_dest dest fonte)

Categoria de Instrues
Instrues sobre cdigos de condio Instrues de desvio condicional Instruo de desvio incondicional

Instruo de controle de lao Instrues para desvio e retorno de subrotina Instrues de um operando Instrues de dois operandos

Cesar: Entrada e Sada


Visor alfanumrico com 36 posies

letras e dgitos leitura de um caractere teste se uma tecla foi digitada Usa o teclado do computador hospedeiro endereos 65500 a 65535: visor 65499: ltimo caractere digitado 65498: estado do teclado (80h se um caractere foi digitado)

Teclado

E/S mapeada na memria, nos ltimos 38 bytes


Este byte deve ser zerado toda vez que um caractere lido (em preparao para a leitura do prximo caractere)

Cesar: Entrada e Sada Exemplo


MOV MOV CLR TST BEQ MOV #65498, R3 #65500, R1 (R3) (R3) -4 65499, (R1) ;status do teclado ;1a. posio do visor ;zera status do tecl. ;testa se tecla digit. ;seno, volta p/ teste ;se sim, escreve caract. ;digitado no visor ;prxima pos. do visor ;testa se fim do visor ;para ler prx. tecla

INC R1 BEQ -18 BR -16 HLT

Cesar: Subrotinas

JSR Rx, end


Rx: registrador de retorno (ou de ligao) end: endereo da subrotina

Rx salvo na pilha Rx endereo de retorno (byte seguinte ao JSR) R7 end (i.e., desvio para end) R7 Rx Rx topo da pilha
Observao: Pode-se usar R7 como o prprio registrador de retorno (mais comum em arquiteturas atuais, mas menos flexvel)

RTS Rx

Exemplo
14 16 20 22 .. .. 64 .. .. 78 ... MOV R0, #64 JSR R5, (R0) ;chamada ... ... ... MOV R3, R4 ... ;corpo da subrotina ... RTS R5 ;retorno

Exemplo com passagem de parmetros


19 20 24 26 28 30 .. .. 62 64 66 68 .. 84 ... JSR R5, 62 param 1 param 2 param 3 ... ... ... CLR R4 MOV (R5)+, R1 MOV (R5)+, R2 MOV (R5)+, R3 ... RTS R5 ;chamada da subrotina ;vetor de parmetros (3 bytes)

;posio para onde deve retornar

;incio da subrotina ;obtm o primeiro parmetro ;obtm o segundo parmetro ;obtm o terceiro parmetro ;retorno da subrotina

A Biblioteca BibCesar

Limpar o visor rotina iterativa Multiplicar dois inteiros positivos de 16 bits Limpar o visor rotina mais rpida Dividir um nmero inteiro positivo de 32 bits por outro de 16 bits Escrever no visor Identificao da verso da biblioteca

Bibliografia

Weber, Raul F. Fundamentos deArquitetura de Computadores. 2a. Edio. Sagra-Luzzatto, 2001

Captulos 4, 5 e 11

Você também pode gostar