O Conjunto de Instruções
Modos de endereçamento
1
Modos de endereçamento

Implícito

Com base no opcode, o processador fica a saber implicitamente
onde estão os dados envolvidos na operação


Imediato

Constante que é dada na própria instrução


Exemplo: instruções PUSH e POP
Exemplos: R1 ← constante, instrução LOCO do MAC-1
Directo

Indica a posição de memória onde estão os valores envolvidos
na operação

Exemplos: R1 ← M[x], instruções LODD e ADDD do MAC-1
2
Modos de endereçamento

Registo directo

Indica o registo onde se encontram os dados



Registo indirecto

Especifica-se um registo e o valor guardado nesse registo é posição de
memória onde estão os dados



Exemplo: R1 ← R2
Eficiente, pois não são feitos acessos à memória
Exemplos: R1 ← M[R2], instruções PSHI e POPI do MAC-1
Útil para indexar vectores
Indirecto

Especifica-se uma posição de memória - o conteúdo dessa posição de
memória dá uma outra posição onde estão localizados os dados



São necessários dois acessos à memória
Exemplo: R1 ← M[ M[x] ]
Útil para aceder a listas e a matrizes bidimensionais
3
Modos de endereçamento

Duplamente indirecto

Semelhante ao anterior, mas a primeira posição a aceder é dada
por um registo


Exemplo: R1 ← M[ M[R2] ]
Indexado

Acede-se à posição de memória dada pela soma do conteúdo de
um registo com um deslocamento (offset) indicado na instrução

Exemplos: R1← M[R2 + offset], instruções LODL, ADDL do MAC-1

Útil para indexar vectores e gerir variáveis locais

Existem outras designações para este modo:


Endereçamento Local ou Baseado – quando é relativo ao Stack
Pointer
Endereçamento Relativo – quando é relativo ao Program Counter
4
Modos de endereçamento

Possível notação para indicar os modos de
endereçamento
Modo
Notação
Efeito
Imediato
MOV R1, #N
R1 ← N
Directo
MOV R1, addr
R1 ← M[addr]
Indirecto
MOV R1, [addr]
R1 ← M[M[addr]]
Registo-directo
MOV R2, R1
R2 ← R1
Registo-indirecto
MOV R2, [R1]
R2 ← M[R1]
Indexado
MOV R2, addr[R1]
R2 ← M[addr+R1]
Duplamente indirecto
MOV R2, [[R1]]
R2 ← M[M[R1]]
5
Modos de endereçamento
Memória

Exemplo
Qual será o valor em R2 após…


MOV R2, #2
MOV R2, 2
R2 = 2
R2 = 6

MOV R2, R1
R2 = 5

MOV R2, [R1]
R2 = 3

MOV R2, 2[R1]
R2 = 11

MOV R2, [2]
R2 = 45
0
1
2
3
4
5
6
7
8
9
10
xx
10
6
8
27
3
45
11
12
13
14
xx
R1
5
R2
???
6
Unidade de Controlo
7
CPU – esquema geral (revisão)
Processador
Palavra de controlo
Unidade
de Controlo
Datapath
Estado (flags)
End. Dados
Leitura/Escrita
Memória
R/W
8
Unidade de controlo

Gera as palavras de controlo que definem o que é feito
no datapath

As palavras de controlo são geradas de acordo com as
instruções dadas num programa

Tipicamente podem ser seguidas duas arquitecturas

Unidade de controlo uni-ciclo


Fetch e execução feitos no mesmo ciclo
Unidade de controlo multi-ciclo

Tipicamente um ciclo para o fetch seguido de um número variável de
ciclos para a execução
9
Unidade de controlo uni-ciclo

Durante um único ciclo do processador
efectuam-se os seguintes passos :

Leitura da instrução que está na posição de memória
indicada pelo registo Program Counter (PC) – fetch

Descodificação da instrução (para determinar quais os
sinais de controlo a aplicar ao datapath)

Execução da instrução

No final do ciclo…


…Incrementa-se o valor de PC ou, …
…no caso de haver um salto, carrega-se em PC o endereço
de destino do salto
10
Unidade de controlo uni-ciclo
Unidade de controlo
Load / INC
Controlo de
saltos
PC
Memória de
programa
Memória de dados
Descodificador
de Endereços
Leitura/Escrita
Tipo
de salto
Descodificador
de Instruções
Palavra de Controlo
Datapath
Bits de estado (flags)
11
Unidade de controlo uni-ciclo

Considerações

Unidade de controlo simples

Basicamente, a cada instrução do programa vai
corresponder a uma palavra de controlo a aplicar ao
datapath

Restrições:

Exige separação entre memória de dados e memória de
instruções (para fazer o fetch e a execução no mesmo ciclo)

O formato das instruções tem que ser muito regular para
facilitar a descodificação

O tempo de duração de cada ciclo fica muito dependente dos
tempos de acesso às memórias
12
Unidade de controlo multi-ciclo

Cada instrução do programa requer tipicamente mais do
que um ciclo para a sua execução

A cada instrução do programa vai corresponder uma
sequência de várias micro-instruções

Estas sequências são obtidas através…

…de um circuito sequencial que vai gerando as palavras de
controlo


Arquitectura Hardwired
…de um “micro-programa” que define a sequência de
micro-instruções correspondente à instrução a executar.

Arquitectura Microprogramada
13
Unidade de controlo multi-ciclo

Por cada instrução:

Ciclo de fetch:


A instrução que está na posição de memória indicada pelo PC é lida
para um registo especial, designado por Instruction Register (IR)
O opcode da instrução irá fazer com que a unidade de controlo
siga uma sequência de estados pré-definida

Dada por um circuito sequencial (hardwired) , ou por uma sequência
de palavras de controlo em memória (microprogramada)

Em cada um desses estados aplica-se uma palavra de controlo
ao datapath

Cada estado corresponde a um ciclo do sinal de relógio – podem
assim haver vários ciclos para a execução
14
Unidade de controlo multi-ciclo

Arquitectura Hardwired
Unidade de controlo
Load / INC
PC
Memória de dados
e programa
IR
Descodificador
de Endereços
Leitura/Escrita
Circuito
Sequencial
Palavra de Controlo
Bits de estado (flags)
Datapath
15
Unidade de controlo multi-ciclo

Arquitectura Multiprogramada
Unidade de controlo
Load / INC
Memória
de dados
e programa
PC
Descodificador
de Endereços
IR
Opcode→Micro-endereço
MUX
Controlo de Load / INC
micro-saltos
S
Micro-PC
Leitura/Escrita
Memória de
controlo
(ROM)
Palavra de Controlo
Bits de estado (flags)
Datapath
16
Unidade de controlo multi-ciclo

Considerações


UC mais complexa, mas mais flexível:

Não exige separação entre memórias para programa e dados

No caso da unidade microprogramada, é fácil substituir ou
acrescentar novas instruções ao conjunto de instruções
Permite uma execução mais eficiente de instruções
mais complicadas


Que corresponderiam a várias instruções uni-ciclo, cada uma
exigindo um acesso à memória para efectuar o fetch
Modelo mais próximo dos processadores actuais
17
Unidade de controlo do MAC-1

Arquitectura (simplificada)
Mux
INC
MPC
ROM 256 x 32
N
Z
Lógica de
micro saltos
S
A
C
N
D
F
H
L
D
R
L
A
R
R W L
D R E
R
C
R
B
R
A
A
D
D
R
18
Unidade de controlo do MAC-1

Estrutura das palavras de controlo
31
S
A
0
C
N
D
F
H
L L
R W L
D A
D R E
R R
C
B
A
ADDR
CND – controlo de saltos:
00 – sem salto
01 – salta se N = 1 (resultado negativo)
10 – salta se Z = 1 (resultado nulo)
11 – salto incondicional
ADDR – endereço de salto no micro-programa (8 bits)
Restantes sinais – aplicam-se ao datapath
19
Datapath do processador MAC-1
RC
RB RA
4
4
4
LE
31
(0)
PC
(1)
AC
(2)
SP
(3)
IR
(4)
TMP
(5)
-1
(6)
+1
(7)
Amask
(8)
SMask
S
A
0
C
N
D
F
H
L L
R W L
D A
D R E
R R
C
B
A
ADDR
Estrutura da palavra de controlo
LAR
BUS B
MAR
BUS A
(...)
MDR
Dados
0 Mux 1
SA
LDR
N
Z
F
H 2
BUS C
Endereços
ALU
2
WR
RD
Nota:
Amask tem o valor ‘0FFF’
Deslocamento
SMask tem o valor ’00FF’
20
Unidade de controlo do MAC-1

Exemplo:

Vamos supor que se pretende executar a instrução
LODD x

O efeito da instrução é AC ← M[x] e o formato é:
0
0
0
Opcode
(4 bits)

0
x
x
x
x
x
x
x
x
x
x
x
x
Posição de memória a ler
(12 bits)
Após o fetch, a instrução encontra-se carregada no
registo de instruções (IR). A execução começa a partir
desse ponto
21
Unidade de controlo do MAC-1

Exemplo (cont.)

Em primeiro lugar, há que carregar o endereço x no
registo MAR, mas tal não se consegue fazer num
único ciclo
TMP ← IR & Amask
# Amask tem o valor ‘0FFF’
MAR ← TMP

Depois do endereço a aceder estar no registo MAR,
lê-se a memória e o resultado virá em MDR. Para
finalizar transfere-se de MDR para AC
MDR ← M[MAR]
AC ← MDR
22
Unidade de controlo do MAC-1

Exemplo (fim)


Em suma, a seguinte sequência de micro-instruções:
TMP ← IR & Amask
# obter o endereço x
MAR ← TMP
# colocar no registo de endereços
MDR ← M[MAR]
# ler o conteúdo do endereço
AC ← MDR
# transferir para o acumulador
4 palavras de controlo, o que implica 4 ciclos para
executar a instrução
23
Avaliação do desempenho
24
Desempenho

Como avaliar o desempenho de um CPU ?

Tipicamente pensa-se na frequência do sinal de
relógio...

Por exemplo,

“O processador XPTO funciona a 2GHz, logo é mais rápido
que o XPTA, que funciona a 1.8GHZ”
... mas será que essa é uma boa medida !??
A frequência do sinal de relógio (apesar de importante) é apenas um de
vários factores que contribuem para o desempenho de um processador...
25
Desempenho

Exemplo: considere dois CPUs com uma unidade de
controlo multi-ciclo:



CPU A

demora 2 ciclos de relógio a executar uma instrução (em média)

funciona a 1.0 GHz (T=1ns)
CPU B

demora 3 ciclos de relógio a executar uma instrução (em média)

funciona a 1.33 GHz (T=0.75 ns)
Qual é o melhor?
Podemos calcular o tempo médio por instrução:
TA = 1.00 ns  2 = 2.00 ns
TB = 0.75 ns  3 = 2.25 ns
Tendo em conta os dados, a
escolha iria para o processador A,
pois em média demora menos
tempo a executar cada instrução
26
Desempenho

O que será então uma boa medida para o
desempenho?

A medida objectiva mais precisa é o tempo de
execução dos programas

Mas os programas são diferentes entre si:


se um programa P1 corre mais depressa num computador A
do que no computador B, nada nos diz que um programa P2
verifique o mesmo.
Para além do CPU, o tempo de execução dos
programas também depende de outros factores

por exemplo, das memórias utilizadas.
27
Desempenho

Exemplo (tempos de execução, em segundos)
Programa

Computador A
Computador B
Computador C
P1
2
10
20
P2
60
30
10
Pode-se afirmar que:

A é 5 vezes mais rápido do que B a correr o programa P1

B é 2 vezes mais rápido do que C a correr o programa P1

C é 6 vezes mais rápido do que A a correr o programa P2

...
Estas afirmações são válidas quanto ao desempenho
mostrado a correr os programas P1 e P2 individualmente ...
28
Desempenho

Tendo em conta o peso de cada um dos programas no sistema
obtém-se uma medida mais consistente

Exemplo: vamos supor que P1 corre 20% das vezes e que P2 corre
80% das vezes
Programa
Computador A
Computador B
Computador C
P1
2
10
20
P2
60
30
10
48.4
26.0
12.0
Tempo médio (seg.)

Pode-se afirmar que:
B
é 1.86 vezes mais rápido que A para os programas P1 e P2
C
é 4.03 vezes mais rápido que A para os programas P1 e P2
C
é 2.17 vezes mais rápido que B para os programas P1 e P2
29
Desempenho


Conclusão:
Só se conseguiria avaliar objectivamente o desempenho de um
sistema caso se soubesse os tempos de execução de todos os
programas, bem como a sua carga relativa...

Impossível...,

… mas conseguem-se aproximações válidas para os casos típicos
Existem programas para avaliação de desempenho – benchmarks –
que visam estabelecer aproximações realistas

Alguns exemplos

SPECs (Standard Performance Evaluation Corporation)

SYSMark (BapCo - Business Applications Performance Corporation)

PCMark e 3DMark (FutureMark)
30
Desempenho

Desempenho do processador

Tempo de execução de um programa:
Texecução = Nciclos  Trelógio
= Ninstruções  CPI  Trelógio
= Ninstruções  CPI / frelógio
Ninstruções – número de instruções do programa
CPI – número de ciclos por instrução
frelógio – frequência do sinal de relógio
31
Desempenho
Compilador

Sintetizando:
T execução 
Conjunto de instruções
N instruções  CPI
f relógio
Organização do sistema
Hardware
Conjunto de instruções
Organização do sistema
32
Desempenho

Conclusão
O desempenho do processador depende de
vários factores:

Hardware (circuitos, tecnologia de fabrico)

Organização (datapaths, unidade de controlo, etc.)

Conjunto de instruções

Compilador (e programador, claro está )
A frequência do relógio apenas está ligada aos dois primeiros factores...
33
Desempenho

Outras medidas populares

MIPS Million of Instructions Per Second
MIPS 
N instruções
Tempo de execução  10
6

f relógio
CPI  10
6
Depende apenas do CPI e da frequência de relógio...

MFLOPS million floating-point operations per second
MFLOPS

N operações
sobre nº s reais
Tempo de execução  10
6
Grande parte dos programas efectua operações sobre inteiros,
pelo que esta medida pode não ser adequada
34
Download

Aula 7