Processador MAC-1 Arquitectura 1 Processador MAC-1 Desenvolvido por Andrew Tanenbaum para fins didácticos Arquitectura muito simples, útil para perceber uma série de conceitos que também são válidos em processadores mais complexos Processador virtual Não existe implementação comercial em hardware Existem simuladores (máquinas virtuais) que permitem executar programas para este processador 2 Processador MAC-1 Principais características: Possui 12 linhas para endereçar a memória Espaço de endereçamento = 212 = 4K endereços Palavras de 16 bits Um datapath de 16 bits 16 registos para uso interno 2 registos para comunicação com o exterior (memória) Uma ALU e um bloco de deslocamento Instruções de 16 bits Unidade de controlo multi-ciclo (microprogramada) 3 Arquitectura MAC-1 RC RB RA 4 4 4 LE PC AC LAR SP BUS B MAR IR BUS A (...) MDR Endereços Dados 0 Mux 1 SA LDR N Z F H 2 WR RD ALU 2 Deslocamento BUS C 4 Arquitectura MAC-1 Principais registos AC (Acumulador) Guarda o resultado das operações PC (Program Counter) Guarda o endereço da próxima instrução a ser executada IR (Instruction Register) Guarda a instrução que vai ser executada SP (Stack Pointer) Guarda o endereço do topo da pilha 5 Arquitectura MAC-1 Registos de comunicação com o exterior MDR (Memory Data Register) Guarda os dados recebidos / a enviar LDR – Controlo de carregamento do BUS C RD / WR – Carregamento / Output enable para o exterior (também são ligados à memória) MAR (Memory Adress Register) Guarda endereços LAR – Controlo de carregamento do BUS B 6 Unidade funcional MAC-1 ALU 2 variáveis de controlo – F1 e F0 2 flags (ou bits de estado) F1 F0 A+B 0 0 A&B 0 1 N – indica se o resultado é negativo A 1 0 Z – indica se o resultado é zero ~A 1 1 Operação H1 H0 A 0 0 A >> 1 0 1 A << 1 1 0 --- 1 1 Deslocamento Operação 2 variáveis de controlo – H1 e H0 Permite deslocar para esquerda ou para a direita 7 Organização da memória no MAC-1 bits para endereçamento ou seja, 4K=4096 endereços Dividido em: Programa Memória Programa 12 0 1 2 ... Instruções (código-máquina) Variáveis globais, constantes (ou Stack) Dados temporários Variáveis locais Pilha Pilha Escrita de caracteres no écran Leitura de caracteres do teclado I/O I/O ... 4094 4095 8 Unidade de controlo MAC-1 O programa encontra-se carregado em memória A unidade de controlo acede à memória para ler cada instrução O endereço da instrução encontra-se num registo especial – o Program Counter (PC) A leitura da instrução designa-se fetch (busca) Durante o fetch, enquanto se acede à memória o PC é incrementado, ou seja, PC ← PC + 1 Isto para ficar “preparado” para a próxima instrução Depois do fetch procede-se então à execução da instrução 9 Unidade de controlo MAC-1 Unidade multi-ciclo ou microprogramada Um ciclo para realizar o fetch… … e n de ciclos para executar a instrução Em cada um dos n ciclos de execução aplica-se uma palavra de controlo ao datapath Algumas instruções são simples sequência de 1 ou 2 palavras de controlo Outras podem ser mais complicadas sequência mais longa de palavras de controlo para executar a instrução 10 MAC-1 – processamento de instruções Processador MAC-1 EXECUÇÃO Palavra de Unidade controlo de Controlo Datapath Estado Endereço de instrução (PC) FETCH End. Din R/W Instrução Dout Memória 11 Palavras de controlo no MAC-1 31 S A 0 C N D F H L L R W L D A D R E R R RC RC RB RA ADDR RB RA 4 4 4 LE PC AC LAR SP BUS B MAR IR BUS A (...) MDR Endereços Dados 0 Mux 1 SA LDR N Z F H 2 WR RD ALU 2 Deslocamento BUS C 12 Processador MAC-1 Linguagem assembly 13 Assembly MAC-1 Endereçamento imediato Carregamento de constantes Mnemónica Descrição Significado LOCO c AC ← c Load constant c é qualquer valor inteiro entre 0 e 4095 (12 bits) 0 1 1 Opcode (4 bits) 1 c c c c c c c c c c c c Constante a carregar (12 bits) 14 Assembly MAC-1 Endereçamento directo Usado para aceder a variáveis globais Operações I/O (leitura e escrita de caracteres) Mnemónica Descrição Significado LODD p AC ← M[p] Load direct STOD p M[p] ← AC Store direct ADDD p AC ← AC + M[p] Add direct SUBD p AC ← AC – M[p] Subtract direct p é a posição de memória que se pretende aceder Pode ser um valor inteiro entre 0 e 4095 (12 bits) 15 Assembly MAC-1 Exemplo – endereçamento directo // Código em java public class Exemplo { // Má programação, necessária para explicar o // endereçamento directo... public static int x = 10; public static int y = 15; public static void main(String[] args) { x = x + y; } } 16 Assembly MAC-1 Exemplo – endereçamento directo Registos # Código MAC-1 jump main x: 10 y: 15 main: lodd x addd y stod x halt Memória PC 3 7 6 5 4 0 1 0 jump 3 AC 10 25 0 1 10 25 2 15 3 lodd 1 4 addd 2 5 stod 1 6 halt 7 ... 17 Assembly MAC-1 Instruções de salto Diz-se que há um salto quando a próxima instrução a executar não é a seguinte Ou seja, não é a instrução que se encontra na posição PC+1 Fazendo uma analogia com a programação: Se x for menor que 0, salta para aqui if (x >= 0) x = 1; else x = -1; y = x; 18 Assembly MAC-1 Instruções de salto Implementação de condições if…else Envolvidas em ciclos (for, while) Mnemónica Descrição Significado JUMP x PC ← x Unconditional jump JPOS x if (AC ≥ 0) PC ← x Jump if positive or zero JNEG x if (AC < 0) PC ← x Jump if negative JZER x if (AC == 0) PC ← x Jump if zero JNZE x if (AC != 0) PC ← x Jump if nonzero x é o endereço para o qual o programa salta em caso de salto Pode ser qualquer valor inteiro entre 0 e 4095 (12 bits) 19 Assembly MAC-1 Exemplo – utilização de saltos em condições // Em Java : # Em MAC-1: ... ... if (x >= 0) y = x; else lodd x if: jneg else stod y y = 0; jump cont ... else: loco 0 stod y cont: ... 20