"The portion of the computer that is visible to the programmer or the compiler writer." - Computer Architecture: A quantitative approach
"An instruction set architecture (ISA) is an abstract model of a computer. It is also referred to as architecture or computer arquiteture." - Wikipedia
"A contract HW and SW designers agreed to obey" - Minha definição de uma linha
"Um contrato em que os projetistas de hardware e software concordaram em obedecer" - Minha definição de uma linha
Arquitetura é o modelo
Microarquitetura é a implementação
Conjunto de instruções pode ser visto como a borda
ADD s0, s1, s2 # soma o valor de s1 com o de s2 e armazena em s0
ADD s0, s1, 9 # soma o valor de s1 com 9 e armazena em s0
mnemônico é o nome da instrução Cada instrução tem um e somente um formato, logo você não pode somar 3 valores utilizando apenas uma instrução como a primeira acima
x = y + z
add t0, t1, t2 # onde t0 deve ter o valor de x, t1 de y e t2 de z
x = x + y
add t0, t0, t1 # onde t0 deve ter o valor de x e t1 de y
x = y + 7
addi t0, t1, 7 # onde t0 deve ter o valor de x, t1 de y
x = y - z
sub t0, t1, t2 # onde t0 deve ter o valor de x, t1 de y e t2 de z
x = x - y
sub t0, t0, t1 # onde t0 deve ter o valor de x e t1 de y
x = y - 7
addi t0, t1, -7 # onde t0 deve ter o valor de x, t1 de y
Não existe subi. Para subtrair um valor imediato, utilize addi com um valor negativo
No simulador que utilizaremos nessa parte inicial da disciplina, o programa deve ser escrito em um arquivo de texto com extensão .s e deve começar declarando o label main. O programa deve terminar com a instrução ret.
main: addi t0, zero, 1 # t0 = 0 + 1 addi t1, zero, 2 # t1 = 0 + 2 add t2, t1, t0 # t2 = t1 + t0 ret
label: indica a posição de um ponto no programa
O que faz esse programa simples?
Para ler um valor inteiro, é necessário utilizar as duas instruções abaixo. O resultado ficará no registrador a0:
addi t0, zero, 4 # escolhe a operação de leitura de inteiro (4) ecall # efetua a operação de leitura de inteiro
Para escrever um valor inteiro, é necessário utilizar as duas instruções abaixo. O valor deve estar no registrador a0:
addi t0, zero, 1 # escolhe a operação de escrita de inteiro (1) ecall # efetua a operação de escrita de inteiro
O programa abaixo lê dois valores inteiros e escreve a soma deles na saída:
main: addi t0, zero, 4 # escolhe a operação de leitura de inteiro (4) ecall # efetua a operação de leitura de inteiro add s0, a0, zero # guarda o valor retornado em a0 em s0 addi t0, zero, 4 # escolhe a operação de leitura de inteiro (4) ecall # efetua a operação de leitura de inteiro add a0, s0, a0 # a0 = a0 + s0 addi t0, zero, 1 # escolhe a operação de escrita de inteiro (1) ecall # efetua a operação de escrita de inteiro ret
Note que os registradores t do código original foram trocados por s O registrador a0 é o único que pode ser utilizado para leitura e escrita de valores