Baixe o app para aproveitar ainda mais
Prévia do material em texto
. . . b b a a a a . . . Input/Output Tape q0q1 q2 q3 . . . qn Finite Control q1 Reading and Writing Head (moves in both directions) Arquitetura básica de um computador Prof. Tiago Almeida Universidade Federal do Tocantins tiagoalmeida@uft.edu.br Organização de Computadores Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 1 / 72 Sumário 1 Banco de registradores 2 Codificação das instruções 3 Conjunto de instruções 4 Referências Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 2 / 72 Banco de registradores Banco de registradores Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 3 / 72 Banco de registradores Banco de registradores ; constantes de dados valor EQU 76H ; valor cujo número de bits com 1 é para ser contado máscaraInicial EQU 01H ; 0000 0001 em binário (máscara inicial) máscaraFinal EQU 80H ; 1000 0000 em binário (máscara final) ; constantes de endereços (na memória de dados) contador EQU 00H ; endereço da célula de memória que guarda ; o valor corrente do contador de bits com 1 máscara EQU 01H ; endereço da célula de memória que guarda ; o valor corrente da máscara ; programa (memória de instruções) início: LD 0 ; inicializa o registrador A com zero ST [contador] ; inicializa o contador de bits com zero LD máscaraInicial ; carrega valor da máscara inicial ST [máscara] ; atualiza na memória teste: AND valor ; isola o bit que se quer verificar se é 1 JZ próximo ; se o bit for zero, passa à máscara seguinte LD [contador] ; bit é 1. Busca o valor atual do contador ADD 1 ; incrementa-o ST [contador] ; e atualiza de novo na memória Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 4 / 72 Banco de registradores Banco de registradores próximo: LD [máscara] ; busca de novo a máscara atual SUB máscaraFinal ; subtrai para comparar com a máscara final JZ fim ; se der zero, eram iguais e portanto já terminou LD [máscara] ; tem de carregar a máscara de novo ADD [máscara] ; soma com ela própria para multiplicá-la por 2 ST [máscara] ; atualiza o valor da máscara na memória JMP teste ; vai fazer mais um teste com a nova máscara fim: JMP fim ; fim do programa Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 5 / 72 Banco de registradores Banco de registradores Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 6 / 72 Banco de registradores Banco de registradores ; constantes de dados valor EQU 76H ; valor cujo número de bits com 1 é para ser conta do máscaraInicial EQU 01H ; 0000 0001 em binário (máscara inicial) máscaraFinal EQU 80H ; 1000 0000 em binário (máscara final) ; endereços contador EQU 00H ; endereço da célula de memória que guardará ; o número de bits com 1 no fim da contagem ; programa início: MOV B, 0 ; inicializa o contador de bits com zero MOV C, máscaraInicial ; inicializa o registrador C com máscara i nicial MOV A, C ; coloca a máscara inicial também no registrador A teste: AND A, valor ; isola o bit que se quer verificar se é 1 JZ próximo ; se o bit for zero, passa à máscara seguinte ADD B, 1 ; o bit é 1, incrementa o valor do contador próximo: CMP C, máscaraFinal ; compara com a máscara final JZ acaba ; se forem iguais, já terminou ADD C, C ; soma máscara com ela própria para ; multiplicá-la por 2 JMP teste ; vai fazer mais um teste com a nova máscara acaba: MOV [contador], B ; se for necessário, pode armazenar o número ; de bits com 1 em uma célula de memória fim: JMP fim ; fim do programa Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 7 / 72 Banco de registradores Banco de registradores O banco de registradores é um conjunto de registradores (no fundo, uma pequena memória) com a particularidade de que consegue ler dois registradores ao mesmo tempo (tem só uma entrada, para escrita, mas duas saídas, para leitura); Os sinais REG_1 e REG_2 são os índices (dentro do banco de registradores) dos registradores que servem como 1.o e 2.o operandos, respectivamente. No fundo, são os endereços de cada registrador dentro do banco de registradores. Nada impede que REG_1 e REG_2 sejam iguais, caso em que o mesmo valor é usado para os dois operandos (tal como já aconteceu na instrução ADD C, C); Os operandos da ALU passam a estar exclusivamente dentro do processador (registradores ou constantes), o que melhora o desempenho e reflete a filosofia de usar os registradores tanto quanto possível; O primeiro operando é sempre um registrador. O segundo operando pode eventualmente ser uma constante, dependendo da seleção do multiplexador MUX_OP2 (caso em que REG_2 é irrelevante); Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 8 / 72 Banco de registradores Banco de registradores Isto quer dizer que o acesso à memória passa a ser feito exclusivamente por instruções MOV (quer seja leitura, quer seja escrita da memória), deixando de ser possível os operandos de instruções como ADD, AND, etc., estarem em memória. Se for o caso, tem-se de fazer primeiro o MOV do operando para um registrador e só depois se pode fazer a operação. Isto simplifica a implementação das instruções; O resultado das operações da ALU é escrito no mesmo registrador que continha o primeiro operando (indicado por REG_1). O multiplexador MUX_RES (de resultado) permite selecionar também um valor lido da memória e escrever num registrador (na instrução MOV registrador, [endereço] ou, o seu equivalente em notação RTL, registrador r M[endereço]); Ao mesmo tempo em que o resultado de uma operação na ALU é escrito no registrador indicado por REG_1, o RE (registrador de estado) é atualizado com a informação sobre esse resultado, memorizando os bits Z (1 se o resultado for zero) e N (1 se o resultado for negativo); Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 9 / 72 Banco de registradores Banco de registradores Alguns bits do RE têm uma saída direta do banco de registradores, independentemente da seleção efetuada por REG_1 e REG_2 (particularmente os bits Z e N), para estarem sempre disponíveis para a unidade de controle (desvios condicionais); O banco de registradores obriga que cada instrução indique quais os registradores que quer ler, o que implica que cada célula da memória de instruções tenha mais dois campos, REG_1 e REG_2. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 10 / 72 Banco de registradores Endereço de dados e instruções Podem ser identificados dois objetivos conflitantes: A existência de uma única memória permite otimizar o uso da sua capacidade, mais para instruções ou mais para dados, de acordo com as necessidades dos programas; A existência de memórias separadas permite ler as instruções ao mesmo tempo que os dados, reduzindo o tempo de execução dos programas em comparação com a existência de uma única memória, onde a unidade de controle (com as instruções) e a unidade de dados (com os dados) têm de competir nos acessos à memória. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 11 / 72 Banco de registradores Endereço de dados e instruções Os processadores atuais permitem conciliar as duas vantagens e estão ligados apenas a uma memória, que serve tanto para dados como para instruções. Aliás, este já era o caso do modelo original de von Neumann, mas há uma diferença fundamental: No modelo original, o acesso a uma instrução tinha de ser feito primeiro e só depois se acessava os dados necessários para essa instrução; Os processadores atuais incluem no seu interior pequenas memórias separadas de instruções e de dados, chamadas de caches (de instruções e de dados), em que o núcleo do processadoré basicamente o módulo identificado como Processador na Figura. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 12 / 72 Banco de registradores Endereço de dados e instruções Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 13 / 72 Banco de registradores Endereço de dados e instruções Desta forma, os efeitos práticos deste esquema são os seguintes: Tanto a unidade de controle como a unidade de dados podem acessar ao mesmo tempo a respectiva cache (como se estivessem ligadas a memórias separadas), desde que a célula pretendida tenha uma cópia na cache; Se a cache não tiver uma cópia da célula pretendida, vai buscá-la automaticamente e sem que o programa perceba (pode demorar mais tempo no primeiro acesso a essa célula, mas nos acessos seguintes a célula já estará lá); Ambas as caches estão ligadas à interface de memória externa, que faz a coordenação e escolha dos acessos das caches, se estas decidirem ao mesmo tempo que precisam ir buscar uma célula na memória principal. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 14 / 72 Banco de registradores Espaço de endereçamento e mapa de endereços Se a título de exemplo assumirmos que: O endereço da primeira instrução executada pelo processador quando este inicia é zero; A memória tem uma capacidade de 212 (4096) células e está localizada a partir do endereço zero; Há 100 periféricos diferentes e eles estão em endereços contíguos a partir do endereço 32.768 (215, ou a primeira célula da 2a metade do espaço de endereçamento), inclusive; O programa tem dois blocos de instruções, um com 800 e outro com 500 instruções. A primeira instrução do bloco de 800 instruções é aquela em que o programa deve começar a ser executado. Do primeiro bloco passa-se para o segundo através de um simples desvio (instrução JMP); O programa usa dois blocos de dados, um com 1000 e outro com 700 células de memória; Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 15 / 72 Banco de registradores Espaço de endereçamento e mapa de endereços Faixa de endereços Dispositivo físico 0 a 4095 Memória (4096 de capacidade) 4096 a 32.767 Livre (sem dispositivo) 32.768 a 32.867 Periféricos (100 periféricos) 32.868 a 65.535 Livre (sem dispositivo) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 16 / 72 Banco de registradores Espaço de endereçamento e mapa de endereços Faixa de endereços Utilização 0 a 799 1.o bloco de instruções 800 a 1000 Livre (não usado) 1000 a 1999 1.o bloco de dados 2000 a 2499 2.o bloco de instruções 2500 a 2999 Livre (não usado) 3000 a 3699 2.o bloco de dados 3700 a 4095 Livre (não usado) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 17 / 72 Banco de registradores Endereçamento de byte e de palavra Para otimizar o acesso a quantidades de informação do tamanho de um byte (por exemplo, os caracteres e sinais de pontuação de texto em codificação ASCII), os processadores suportam normalmente o acesso à memória byte a byte e em múltiplos de um byte até o tamanho da palavra. Ou seja, um processador com uma largura de: 16 bits consegue acessar quantidades de 8 bits e de 16 bits; 32 bits consegue acessar quantidades de 8, 16 e 32 bits. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 18 / 72 Banco de registradores Endereçamento de byte e de palavra Por que isto é tão importante? Suportar endereçamento de byte reduz a capacidade de memória que o processador é capaz de endereçar. Com endereçamento de palavra, há um endereço diferente para cada célula de memória de 16 bits. Ou seja, com 16 bits de endereço o processador consegue endereçar 216 (64 K, ou 65.536) células de 16 bits cada, ou 128 KBytes (2364 K). Com endereçamento de byte, apenas 64 KBytes (metade) podem ser endereçados, pois os 16 bits de endereço mantêm-se e agora tem-se de ter um endereço diferente para cada byte individual; O endereçamento de byte interessa apenas para os dados, mas os endereços das instruções também são afetados, pois a memória principal é a mesma. Como as instruções são indivisíveis, os endereços das instruções (o valor do PC) têm de avançar de 2 em 2; Nas instruções de acesso à memória (no caso de dados), tem-se de indicar que quantidade de informação se pretende usar, 8 ou 16 bits, o que implica mais opcodes (na prática, equivale a duplicar o número de instruções dedicadas à transferência de dados de e para a memória); Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 19 / 72 Banco de registradores Endereçamento de byte e de palavra Por que isto é tão importante? Cada célula de memória de 16 bits contém 2 bytes, com endereços par (X) e ímpar (X+1). Cada célula começa sempre num byte de endereço par; Fazer um acesso à memória (quer a dados, quer a instruções) em 16 bits especificando o endereço Y implica acessar o byte com o endereço Y e o byte com o endereço Y+1. Se Y for par (acesso alinhado), está se acessando apenas uma célula. Se Y for ímpar, está se acessando o segundo byte de uma célula e o primeiro byte da célula seguinte (acesso desalinhado). Para suportar isto, o processador tem de fazer dois acessos diferentes à memória e depois compor os bytes das duas células lidas, o que complica o hardware, razão pela qual muitos processadores, incluindo o PEPE, proíbem isto (geram um erro se isso acontecer); O endereçamento de byte não é transparente para o programador de linguagem assembly. Ao usar os endereços, é preciso ter atenção ao fato de que os endereços das palavras (células de 16 bits) evoluem de 2 em 2 e são pares, enquanto os endereços dos bytes evoluem de 1 em 1 e podem ser pares ou ímpares. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 20 / 72 Banco de registradores Endereçamento de byte e de palavra Faixa de endereços Dispositivo físico 0 a 8191 Memória (4096 palavras, ou 8192 bytes de capacidade) 8191 a 32.767 Livre (sem dispositivo) 32.768 a 32.967 Periféricos (100 periféricos, 200 endereços) 32.968 a 65.535 Livre (sem dispositivo) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 21 / 72 Banco de registradores Endereçamento de byte e de palavra Faixa de endereços Utilização 0 a 1599 1o bloco de instruções 1600 a 1999 Livre (não usado) 2000 a 3999 1o bloco de dados 4000 a 4999 2o bloco de instruções 5000 a 5999 Livre (não usado) 6000 a 7399 2o bloco de dados 7400 a 8191 Livre (não usado) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 22 / 72 Codificação das instruções Codificação das instruções Tipo Exemplo 1o Campo 2o Campo 3o Campo 4o Campo 1 ADD R0, R1 Opcode principal Opcode secundá- rio 1o operando/ /re- sultado (registra- dor) 2o operando (re- gistrador) 2 ADD R0, 2 2o operando (constante de 4 bits) 3 JZ 100 Operando único (constante de 8 bits) 4 MOV R0, 100 1o operando/ /re- sultado 2o operando (constante de 8 bits) 5 JMP 2000 Operando único (constante de 12 bits) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 23 / 72 Codificação das instruções Registradores Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 24 / 72 Codificação das instruções Registradores As especificidades associadas a estes cinco registradores são fundamentalmente as seguintes (a serem abordadas nas seções indicadas): R11, ou RL (Registrador de Ligação) – É usado para otimizar a chamada de rotinas. Pode ser usado livremente como registrador geral desde que não esteja sendo usado no âmbito desta otimização; R12, ou SP (Stack Pointer, ou Ponteiro de Pilha) – É usado na implementação de instruçõesque manipulam a pilha, uma estrutura de dados muito importante em qualquer processador ; R13, ou RE (Registrador de Estado) – Contém alguns bits importantes para o funcionamento do processador; R14, ou BTE (Base da Tabela de Exceções) – É usado para conter o endereço de base de uma tabela, destinada a suportar eventos especiais (como erros de execução, por exemplo), ou exceções; R15, ou TEMP (de temporário) – Designa um registrador usado temporariamente na implementação de instruções mais complexas. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 25 / 72 Codificação das instruções Bits de estado Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 26 / 72 Codificação das instruções Bits de estado Observe que: O caso 1 (Z=1 e todos os outros com 0) só ocorre somando zero com zero. Qualquer soma de um número com o seu simétrico (para dar zero como resultado) implica imediatamente transporte, pois, por definição, a soma de um número de N bits com o seu simétrico dá 2N como resultado, o que não é representável com N bits (apenas com N+1). Ou seja, é o caso 5, exemplificado com 5 + (–5); O estouro, no caso da soma, só ocorre somando-se dois números com o mesmo sinal (e o sinal do resultado sendo diferente do sinal dos operandos). Se um for positivo e outro negativo, não é possível ocorrer a situação de estouro; Esta tabela também pode ser elaborada para as operações de multiplicação e divisão, com algumas adaptações. Por limitações de espaço e por ser um tópico específico, a elaboração destas tabelas é deixada como exercício para o leitor mais interessado. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 27 / 72 Conjunto de instruções Instruções de desvio Desvios Absolutos Relativos Condições Desvia se (após está instrução)ADD A, B CMP A, B Incondicionais JMP Rs JMP k Nenhuma Condicionais Não há JZ (JEQ) k Z = 1 a + b = 0 a = b JNZ (JNE) k Z = 0 a + b <> 0 a <> b JN k N = 1 a + b < 0 JNN k N = 0 a 0 b > 0 JP k (N v Z) = 0 a 0 b > 0 JNP k (N v Z) = 1 a 0 b < 0 JC (JB) k C = 1 Der transporte a < b JNC (JAE) k C = 0 Não der transporte a ≥ b JV k V = 1 Der estouro JNV k V = 0 Não der estouro JLT k (N ⊕ V) = 1 a < b JLE k ((N ⊕ V) v Z) = 1 a ≤ b JGT k ((N ⊕ V) v Z) = 0 a > b JGE k (N ⊕ V) = 0 a ≥ b JA k (C v Z) = 0 a > b JBE k (C v Z) = 1 a ≤ b Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 28 / 72 Conjunto de instruções Instruções de desvio O desvio pode ser classificado quanto à forma de determinação do endereço: Absoluto – Se o PC for carregado com um valor de 16 bits (conteúdo de um registrador), que especifica completamente o endereço para onde desviar, independentemente do endereço que o PC continha anteriormente; Relativo – Se o novo endereço for obtido somando-se uma constante k ao valor que o PC tem. Considera-se que a constante k está em complemento de 2 e permite desviar para “a frente” se k>0 e “para trás” se k<0. E quanto à sua realização: Incondicional – Se o desvio for sempre efetuado, independentemente de qualquer condição; Condicional – Se o desvio só for efetuado se uma determinada condição for verdadeira. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 29 / 72 Conjunto de instruções Instruções de transferência de dados Uma instrução pode fazer transferência de dados entre os seguintes recursos: Registradores; Células de memória (em que se incluem os periféricos porque, do ponto de vista do processador, são indistinguíveis); Constantes (a contida na própria instrução, se for o caso). Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 30 / 72 Conjunto de instruções Instruções de transferência de dados Destino / Origem Descrição Registrador/registrador Cópia de valores entre dois registradores Registrador-constante Carregamento imediato de um registrador Registrador-memória Leitura da memória Memória-registrador Escrita na memória Memória-constante Inicialização da memória com uma constante Memória-memória Cópia entre células de memória Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 31 / 72 Conjunto de instruções Instruções de transferência (reg - reg) Endereço Instrução RTL R0 R1 R2 R3 TEMP Estado inicial 1234H 5678H 9ABCH FFFFH 0000H 0000H MOV R0, R2 R0 ← R2 9ABCH 5678H 9ABCH FFFFH 0000H 0002H MOV R2, RI R2 ← R1 9ABCH 5678H 5678H FFFFH 0000H 0004H MOV R1, R0 R1 ← R0 9ABCH 9ABCH 5678H FFFFH 0000H 0006H SWAP R1, R3 TEMP ← R1 9ABCH FFFFH 5678H 9ABCH 9ABCHR1 ← R3 R3 ← TEMP Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 32 / 72 Conjunto de instruções Instruções de transferência (reg-cons) Assembly Exemplos Máquina RTL Efeitos MOV Rd, k -128 ≤ k ≤ +127 MOVL, Rd, k Rd(7..0) ← k(7..0) Rd fica com uma cópia do valor da constante (de 8 bits) estendida para 16 bits com seu bit de sinal, k(7). O valor anterior de Rd é destruído MOV R0,-128 MOV R3,0 Rd(15..8) ← k(7){8}MOV R6, +127 k ≤ -129 ou k ≥ +128 MOVL, Rd, k(7..0) Rd(7..0) ← k(7..0) Rd fica com uma cópia do valor da constante (de 16 bits). O valor anterior de Rd é destruído MOV R7, -32768 Rd(15..8) ← k(7){8} MOV R2, -1000 MOVH, Rd, k(15..8) Rd(15..8) ← k(15..8) MOV R5, +500 MOV R8, +32767 Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 33 / 72 Conjunto de instruções Instruções de transferência (reg-cons) Em linguagem assembly, o programador usa sempre a instrução indicada acima, qualquer que seja o valor da constante (dentro da faixa permitida pelos 16 bits); O assembler analisa o valor da constante antes de gerar o código de máquina e separa duas situações: Para constantes no intervalo [-128 .. +127], ou seja, representáveis em 8 bits, gera apenas uma instrução, com opcode MOVL, em que constante terá 8 bits e deverá estar em complemento de 2; Para constantes de valor maior (em módulo), não representáveis em 8 bits, ou seja, nos intervalos [-32.768 .. -129] e [+128 .. +32.767], o assembler gera duas instruções, com opcodes MOVL e MOVH, o que permite inicializar cada um dos dois bytes do registrador destino. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 34 / 72 Conjunto de instruções Instruções de transferência (reg-cons) No caso de constantes entre –128 e +127, o assembler gera apenas uma instrução MOVL, que não só coloca a constante (8 bits) no byte menos significativo do registrador, como estende esses 8 bits para 16 mantendo o sinal; No caso de constantes menores que –128 ou maiores que +127, o assembler gera primeiro uma instrução MOVL, que coloca o byte menos significativo da constante no byte menos significativo do registrador. Em seguida, gera uma instrução MOVH que coloca o byte mais significativo da constante no byte mais significativo do registrador. Observe que o sinal pode ficar incorreto após o MOVL, mas o MOVH acaba a operação corretamente. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 35 / 72 Conjunto de instruções Instruções de transferência (reg-cons) Decimal Binário Hexa 8 bits Hexa 16 bits Hexa 32 bits 0 0000 0000 00H 00 00H 00 00 00 00H +1 0000 0001 01H 00 01H 00 00 00 01H +64 0100 0000 40H 00 40H 00 00 00 40H + 127 0111 1111 7FH 00 7FH 00 00 00 7FH -1 1111 1111 FFH FF FFH FF FF FF FFH -2 1111 1110 FEH FF FEH FF FF FF FEH -64 1100 0000 C0H FF C0H FF FF FF C0H -128 1000 0000 80H FF 80H FF FF FF 80H Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 36 / 72 Conjunto de instruções Instruções de transferência (reg-cons) Assembly Constante Instruções Comentários MOV R1,0 00 00H MOVL, R1, 00H MOV R1,+1 00 01H MOVL, R1, 01H MOV R1, +12700 7FH MOVL, R1, 7FH MOV R1,+32767 7F FFH MOVL, R1, FFH MOVH, R1, 7FH Após o MOVL, R1 fica com FFFFH (negativo) MOV R1,-1 FF FFH MOVL, R1, FFH MOV R1,-128 FF80H MOVL, R1, 80H MOV R1,-32768 80 00H MOVL, R1, 00H MOVH, R1, 80H Após o MOVL, R1 fica com 0000H (positivo) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 37 / 72 Conjunto de instruções Instruções de transferência (reg-mem) A primeira forma permite acessar qualquer célula da memória, considerando o espaço de endereçamento linear (sem usar qualquer estrutura de dados); O índice constante acessa uma tabela (cuja base está no endereço contido em R1) em que se conhece a função de cada elemento dentro da tabela e, portanto, se referencia diretamente (neste exemplo, com o índice 6); A última forma, com índice variável (registrador), permite a um programa percorrer a tabela, efetuando algum processamento sobre cada elemento da tabela. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 38 / 72 Conjunto de instruções Instruções de transferência (reg-mem) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 39 / 72 Conjunto de instruções Instruções de transferência (reg-mem) base EQU 1000H ; endereço de base (do 1o elemento) da tabela tam EQU 8 ; tamanho da tabela (em elementos de 16 bits) início: MOV R3, 0 ; inicializa soma MOV R1, base ; inicializa registrador de base se da ta bela MOV R2, tam ; número de elementos de 16 bits da tabela SUB R2, 1 ; índice do último elemento (o 1o tem índice 0) maisUm: MOV R4, R2 ; copia para não destruir o índice ADD R4, R4 ; duplica para obter o índice em bytes MOV R0, [R1 + R4] ; lê um elemento da memória (no endereço R1+R4) ADD R3, R0 ; acumula o elemento na soma SUB R2, 1 ; obtém índice (em bytes) do elemento anterior JNN maisUm ; se for negativo, o índice era o último (0) ; senão, ainda há mais elementos fim: JMP fim ; acabou. R3 contém a soma de todos os elementos Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 40 / 72 Conjunto de instruções Instruções de transferência (reg-mem) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 41 / 72 Conjunto de instruções Instruções de transferência (reg-mem) Ficha Base da ficha Campo Valor Índice Endereço 1a 1000H Número 3029 0 1000H Ramal 207 2 1002H Idade 34 4 1004H Salário 1250 6 1006H 2a 1008H Número 1978 0 1008H Ramal 225 2 100AH Idade 23 4 100CH Salário 990 6 100EH 3a 1010H Número 2389 0 1010H Ramal 217 2 1012H Idade 47 4 1014H Salário 1650 6 1016H 4a 1018H Número 1027 0 1018H Ramal 234 2 101AH Idade 58 4 101CH Salário 2025 6 101EH Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 42 / 72 Conjunto de instruções Instruções de transferência (reg-mem) base EQU 1000H ; endereço de base da 1a ficha da tabela numEmp EQU 4 ; número de empregados (e de fichas) salário EQU 6 ; índice em bytes (dentro da ficha) do campo salário idade EQU 4 ; índice em bytes (dentro da ficha) do campo idade tam EQU 8 ; tamanho em bytes de cada ficha início: MOV R3, 0 ; inicializa soma dos encargos salariais MOV R1, base ; inicializa registrador de base da 1a ficha MOV R2, numEmp ; número de fichas da tabela MOV R4, tam ; número de bytes de cada ficha maisUma: MOV R0, [R1+salário] ; lê o campo salário dessa ficha ADD R3, R0 ; acumula o salário na soma MOV R0, [R1+idade] ; lê o campo idade dessa ficha ADD R3, R0 ; acumula o bônus (igual à idade) na soma ADD R1, R4 ; obtém endereço (em bytes) de base da próxima ficha SUB R2, 1 ; menos uma ficha para tratar JNZ maisUma ; se R2 não for 0, ainda há mais fichas para tratar fim: JMP fim ; acabou. R3 contém a soma de todos os encargos Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 43 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 bits) Assembly RTL Instruções Comentários MOVB Rd, [Rs] Rd(7..0) ← Mb[Rs] LDB, Rd, Rs Leitura de um byte. 0 byte mais significativo do registrador destino é colocado em 00HRd(15..8) ← 0{8} MOVBS Rd, [Rs] Rd(7..0) ← Mb[Rs] LDB, Rd, Rs Leitura de um byte. O byte mais significativodo registrador destino é a extensão do sinal do byte menos significativo Rd(15..8) ← Rd(7){8} MOVB [Rd], Rs Mb[Rd] ←Rs(7..0) STB, Rd, Rs Escrita na memória do byte mais significativo do registrador Rs Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 44 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 bits) Em termos de conteúdo transferido, apenas são relevantes um byte da memória e o byte menos significativo do registrador envolvido. Isto significa que: Na leitura da memória, o byte menos significativo do registrador destino é colocado como zero (MOVB) ou com a extensão do sinal do byte menos significativo (MOVBS); Na escrita na memória: O byte mais significativo do registrador origem é irrelevante; Apenas se altera o byte no endereço especificado. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 45 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 bits) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 46 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 bits) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 47 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 bits) origem EQU 1000H ; endereço do primeiro caractere da cadeia original destino EQU 2400H ; endereço do primeiro caractere da cadeia destino terminador EQU 00H ; valor do byte que indica o fim da cadeia original diferença EQU 20H ; valor da diferença entre minúsculas e maiúsculas início: MOV R1, origem ; ponteiro para o primeiro caractere origem MOV R2, destino ; ponteiro para o primeiro caractere destino MOV R3, diferença ; coloca diferença num registrador (usado na; instrução SUB) maisUm: MOVB R0, [R1] ; obtém o próximo caractere (acesso de 8 bits) CMP R0, terminador ; verifica se já é o byte terminador JZ acaba ; se sim, vai acabar SUB R0, R3 ; converte letra para maiúscula MOVB [R2], R0 ; guarda caractere na área de memória destino ADD R1, 1 ; endereço (em bytes) do próximo caractere origem ADD R2, 1 ; endereço (em bytes) do próximo caractere destino JMP maisUm ; ainda há mais caracteres para tratar acaba: MOVB [R2], R0 ; guarda terminador na área de memória destino fim: JMP fim ; acabou Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 48 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 e 16 bits) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 49 / 72 Conjunto de instruções Instruções de transferência (reg-mem 8 e 16 bits) origem EQU 1000H ; endereço do primeiro caractere da cadeia original destino EQU 2400H ; endereço do primeiro caractere da cadeia destino terminador EQU 00H ; valor do byte que indica o fim da cadeia original diferença EQU 20H ; valor da diferença entre minúsculas e maiúsculas início: MOV R1, origem ; ponteiro para o primeiro caractere origem MOV R2, destino ; ponteiro para o primeiro caractere destino MOV R3, diferença ; coloca diferença em um registrador (usado no SUB abaixo) maisUm: MOVB R0, [R1] ; busca o próximo caractere (acesso de 8 bits) CMP R0, terminador ; verifica se já é o byte terminador JZ acaba ; se sim, vai acabar SUB R0, R3 ; converte letra para maiúscula MOV [R2], R0 ; guarda caractere na área da memória destino (16 bits) ADD R1, 1 ; endereço (em bytes) do próximo caractere origem ADD R2, 2 ; endereço (em bytes) do próximo caractere destino JMP maisUm ; ainda há mais caracteres para tratar acaba: MOV [R2], R0 ; guarda terminadorna memória destino (16 bits) fim: JMP fim ; acabou Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 50 / 72 Conjunto de instruções Instruções aritméticas Assembly Exemplo Efeito ADD Rd, Rs ADD R0, RI Rd fica com a soma do valor anterior de Rd com o valor de Rs ADD Rd, k ADD R0, 1 Rd fica com a soma do valor anterior de Rd com o valor de k, que tem de estar entre -8 e +7 ADDC Rd, Rs ADDC R0, RI Rd fica com a soma do valor anterior de Rd com o valor de Rs e ainda com mais uma unidade (se c=l) SUB Rd, Rs SUB R0, RI Rd fica com o valor anterior de Rd menos o valor de Rs SUB Rd, k SUB R0, 4 Rd fica com o valor anterior de Rd menos o valor de k, que tem de estar entre -8 e +7 SUBB Rd, Rs SUBB R0, RI Rd fica com o valor anterior de Rd menos o valor de Rs e ainda com menos uma unidade (se c=l) CMP Rd, Rs CMP R0, RI Subtrai Rs de Rd e afeta apenas os bits de estado (não memoriza o resultado) CMP Rd, k CMP R0, 4 Subtrai k de Rd e afeta apenas os bits de estado (não memoriza o resultado). O valor de k tem de estar entre -8 e +7 NEG Rd NEG R3 Substitui Rd pelo seu simétrico (complemento de 2) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 51 / 72 Conjunto de instruções Instruções aritméticas (série de Fibonacci) ; R1 – último valor da série até um determinado momento ; R2 – penúltimo valor da série até é um determinado momento ; R3 – endereço de memória onde os elementos (de 16 bits) são escritos ; R4 – contador de elementos da série base EQU 1000H ; endereço onde começar a colocar a série início: MOV R3, base ; inicializa ponteiro para o primeiro elemento MOV R2, 1 ; inicializa primeiro elemento da série MOV R1, 1 ; inicializa segundo elemento da série MOV [R3], R2 ; armazena primeiro elemento da série ADD R3, 2 ; endereço para o segundo elemento (2 bytes depois) MOV [R3], R1 ; armazena segundo elemento da série MOV R4, 2 ; já foram armazenados 2 elementos maisUm: ADD R2, R1 ; soma os dois últimos elementos JV fim ; se houve estouro, a série tem de acabar aqui ADD R3, 2 ; endereço para o próximo elemento (2 bytes depois) MOV [R3], R2 ; armazena mais este elemento da série ADD R4, 1 ; contabiliza mais este elemento SWAP R1, R2 ; troca os papéis de R1 e R2, para que R1 volte a ; ser o último valor da série e R2 o penúltimo JMP maisUm ; ainda há mais elementos para gerar fim: JMP fim ; acabou. Na memória estão todos os elementos ; gerados, e R4 indica quantos são Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 52 / 72 Conjunto de instruções Instruções aritméticas (mult e div) Assembly Exemplo RTL Efeito MUL Rd, Rs MUL R0, RI Rd ← Rd * Rs Rd fica com o produto do valor anterior de Rd com o valor de Rs. 0 resultado continua a ter 16 bits DIV Rd, Rs DIV R0, RI Rd ← quociente(Rd/Rs) Rd fica com o quociente da divisão inteira de Rd por Rs. A divisão por zero é um erro MOD Rd, Rs MOD R0, RI Rd ← resto(Rd/Rs) Rd fica com o resto da divisão inteira de Rd por Rs. A divisão por zero é um erro Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 53 / 72 Conjunto de instruções Instruções aritméticas (mult e div) ; R1 – produto dos vários fatores (valor do fatorial no fim) ; R2 – fator auxiliar que começa com N-1, depois N-2 etc., até ser 2 ; (1 já não vale a pena) N EQU 6 ; número de que se pretende calcular o fatorial início: MOV R1, N ; valor inicial do produto MOV R2, R1 ; valor auxiliar maisUm: SUB R2, 1 ; decrementa fator MUL R1, R2 ; acumula produto de fatores JV erro ; se houve estouro, o fatorial tem de acabar aqui CMP R2, 2 ; verifica se o fator ator já chegou a 2 JGT maisUm ; se ainda é maior do que 2, é preciso continuar fim: JMP fim ; acabou. Em R1 está o valor do fatorial erro: JMP erro ; termina com erro Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 54 / 72 Conjunto de instruções Instruções lógicas Assembly Exemplo RTL Bits de estado Efeito AND Rd, Rs AND, Rd, Rs Rd ← Rd ∧ Rs Z, N Conjunção (E) bit a bit de Rd e Rs. Rd(i) só será l, se Rd(i) =1 E Rs (i) =1 OR Rd, Rs OR, Rd, Rs Rd ← Rd v Rs Z,N Disjunção (OU) bit a bit de Rd e Rs. Rd(i) será l, se Rd(i)=1 OU Rs(i)=1 XOR Rd, Rs XOR, Rd, Rs Rd ← Rd ⊕ Rs Z, N Disjunção exclusiva (OU-exclusivo) bit a bit de Rd e Rs. Rd(i) será 1, apenas se Rd(i) for diferente de Rs (i) (01 ou 10) NOT Rd NOT, Rd, 0 Rd ← Rd ⊕ FFFFH Z,N Complementa (troca) todos os bits de Rd (negação bit a bit) TEST Rd, Rs TEST, Rd, Rs Rd ∧ Rs Z, N Faz a conjunção bit a bit de Rd e Rs, tal como o AND, mas afeta apenas os bits de estado (Rd não é alterado) BIT Rd, k BIT, Rd, k Z ← Rd(k) ⊕ 1 z Coloca no bit z a negação do bit Rd(k). Rd não é alterado SET Rd, k SET, Rd, k Rd(k) ← 1 Z, N Coloca 1 no bit k de Rd CLR Rd, k CLR, Rd, k Rd(k) ← 0 Z, N Coloca 1 no bit k de Rd CPL Rd, k CPL, Rd, k Rd(k) ← Rd(k) ⊕ 1 Z,N Complementa (troca) o bit k de Rd Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 55 / 72 Conjunto de instruções Instruções lógicas Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 56 / 72 Conjunto de instruções Instruções lógicas Assim, estas instruções têm na realidade uma dupla função: Implementar expressões booleanas, com valores falso e verdadeiro. Para tal usa-se apenas um bit de cada operando (tipicamente o menos significativo) ou adota-se a convenção de que um valor 0 representa falso e que um valor diferente de zero representa verdadeiro (como na linguagem C, por exemplo); Manipular determinados bits do operando, usando a funcionalidade lógica destas instruções para cada um dos bits individualmente, em dois tipos básicos de operações: Alterar determinados bits de um operando para um valor fixo (0 ou 1), independentemente do valor que esses bits tinham antes; Isolar determinados bits de um operando, mantendo o valor desses bits e forçando os restantes a um valor fixo (tipicamente 0), através de um outro operando designado máscara (precisamente porque força alguns bits e só mantém o valor de outros). Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 57 / 72 Conjunto de instruções Instruções lógicas (1 só bit) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 58 / 72 Conjunto de instruções Instruções lógicas (1 só bit) ; utilização dos registadores: ; R2 – 2o operando a testar ; (1 já não vale a pena) ; R3 – endereço na memória do 1o operando (o 2o está logo a seguir) início: MOV R3, 0000H ; inicializa R3 no início da memória maisUm: MOV R1, [R3] ; obtém 1o operando TEST R1, R1 ; atualiza os bits de estado JZ próximo ; se é falso (zero), pode passar ao próximo MOV R2, [R3 + 2] ; obtém 2o operando TEST R2, R2 ; atualiza os bits de estado JNZ achou ; se chegou aqui e R2 é verdadeiro, então R1 e R2 ; são verdadeiros e achou o par pretendido próximo: ADD R3, 2 ; tem de continuar. Avança base da memória JMP maisUm ; vai testar mais um par de operandos achou: JMP achou ; achou! Para aqui Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 59 / 72 Conjunto de instruções Instruções lógicas (1 só bit) Binário Hexa Letra Letra Hexa Binário 0100 0001 41H ’A’ ’a’ 61H 0110 0001 0100 0010 42H ’B’ ’b’ 62H 0110 0010 . . . . . . . . . . . . . . . . . . 0100 1110 4EH ’N’ ’n’ 6EH 0110 1110 0100 1111 4FH ’O’ ’o’ 6FH 0110 1111 0101 0000 50H ’P’ ’p’ 70H 0111 0000 0101 0001 51H ’Q’ ’q’ 71H 0111 0001 . . . . . . . . . . . . . . . . . . 0101 1001 59H ’Y’ ’y’ 79H 0111 1001 0101 1010 5AH ’Z’ ’z 7AH 0111 1010 Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 60 / 72 Conjunto de instruções Instruções lógicas (máscaras) Prof. Tiago Almeida (UFT) Arquitetura básica de umcomputador Período: 2019/02 61 / 72 Conjunto de instruções Instruções lógicas (1 só bit) Operação Bit neutro Bit ativo Efeito do bit ativo AND, TEST 1 0 Força a ser 0 0R 0 1 Força a ser 1 XOR 0 1 Nega o bit (troca valor) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 62 / 72 Conjunto de instruções Instruções de deslocamento Enviar os bits do operando em sequência, um a um, através de uma ligação de um só bit (usado em redes de computadores); Analisar os bits de um operando, um a um (contar o número de bits com 1, por exemplo); Máscaras que por deslocamento vão variando ao longo do programa, permitindo ir analisando diferentes partes de um determinado operando; Isolar um grupo de bits do operando (por meio de uma máscara com AND, por exemplo) e mudá-los de posição (para ocuparem os bits menos significativos, por exemplo). Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 63 / 72 Conjunto de instruções Instruções de deslocamento Trata-se de instruções que tipicamente são suportadas por todos os processadores e que podem ser divididas em dois grupos: Deslocamentos lineares, ou simples; Deslocamentos circulares, ou rotações. Em qualquer deles, o deslocamento pode ser para a: Esquerda (na direção do bit mais significativo), ou Direita (na direção do bit menos significativo). Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 64 / 72 Conjunto de instruções Instruções de deslocamento (linear) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 65 / 72 Conjunto de instruções Instruções de deslocamento (linear) Um bit sai, sendo transferido para o bit de estado C. Um bit entra, podendo ser 0 ou 1, de acordo com o tipo de instrução de deslocamento, que pode ser de dois tipos: Lógico (SHL, SHR) – Consideram o operando como uma simples sequência de bits, entrando sempre um 0 pelo lado oposto ao do bit que saiu; Aritmético (SHRA, SHLA) – Consideram o operando como um número inteiro representado em complemento de 2, de tal modo que um deslocamento de um bit para a esquerda ou para a direita equivale a multiplicar ou dividir, respectivamente, o operando por 2, mantendo o sinal no processo. No deslocamento para a direita (SHRA), o bit que entra do lado esquerdo é igual ao bit que já estava lá (mantém o sinal). O deslocamento para a esquerda (SHLA) pode dar origem a um estouro, se o bit que sair (para o bit C) for diferente do bit que ficar na posição mais significativa do registrador após o deslocamento (isto é, um número positivo passar a negativo ou vice-versa), sendo esta a única diferença em relação à instrução SHL. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 66 / 72 Conjunto de instruções Instruções de deslocamento (linear) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 67 / 72 Conjunto de instruções Instruções de deslocamento (linear) valor EQU 6AC5H ; valor cujos bits com 1 vão o ser contados início: MOV R1, valor ; inicializa registrador com o valor a analisar MOV R2, 0 ; inicializa contador de número de bits com 1 MOV R3, 0 ; valor 0 auxiliar maisUm: CMP R1, 0 ; isto é só para atualizar os bits de estado JZ fim ; se o valor já é zero, não há mais bits com 1 para contar SHR R1, 1 ; retira o bit menos significativo do valor e coloca-o no bit C ADDC R2, R3 ; soma mais 1 ao contador, mas só se o bit for 1 (R3=0) JMP maisUm ; vai analisar o próximo bit fim: JMP fim ; acabou. R2 tem o número de bits com 1 no valor inicial Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 68 / 72 Conjunto de instruções Instruções de deslocamento (circular) A rotação tem duas variantes em relação ao comportamento do bit de estado C: Sem transporte – O bit C é atualizado com o bit que sai, mas não interfere na rotação; Com transporte – O bit C participa ele próprio na rotação. Os bits do registrador passam pelo bit C antes de voltarem a entrar no registrador. É como se o registrador rodado tivesse mais um bit. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 69 / 72 Conjunto de instruções Instruções de deslocamento (circular) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 70 / 72 Conjunto de instruções Instruções de deslocamento (circular) Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 71 / 72 Referências Referências 1 HENNESSY, John L.; PATTERSON, David A.. Organização e Projeto de Computadores. 5. ed. Rio de Janeiro: Elsevier, 2017. 494 p. 2 DELGADO, J.; RIBEIRO, C. Arquitetura de Computadores: São Paulo: LTC, 2017. 568 p. Prof. Tiago Almeida (UFT) Arquitetura básica de um computador Período: 2019/02 72 / 72 Banco de registradores Codificação das instruções Conjunto de instruções Referências
Compartilhar