Rodolfo Azevedo
MC404 - Organização Básica de Computadores e Linguagem de Montagem
http://www.ic.unicamp.br/~rodolfo/mc404
Ser capaz de entender e implementar em assembly códigos que contenham as seguintes estruturas:
Se uma dada condição for verdadeira (if), então execute um trecho de código. Caso contrário (else), execute outro trecho de código.
if (x == 5) a += 7; else a += 15;
Enquanto uma dada condição for verdadeira, execute um trecho de código.
x = 20; y = 10; while (x != y) { x += 2; y += 3; }
Execute um trecho de código um número fixo de vezes.
a = 0; for (i = 0; i < 100; i ++) a += i;
Como saber se i < j?
slt t0, t1, t2 # onde t1 deve ter o valor de i, t2 de j e t0 terá o resultado
Se i < 0
Caso contrário
São instruções que desviam a execução do programa para um endereço diferente da próxima instrução
Você pode inverter a ordem dos operandos se necessário!
Se x == 0, some z = y + 5, caso contrário z = y + 7
# supondo que t0 tenha o valor de x, t1 de y e t2 de z beq t0, zero, e_zero addi t2, t1, 7 j fim e_zero: addi t2, t1, 5 fim:
Pseudo-instruções não são instruções reais, mas são úteis para escrever código mais legível. O montador converteem uma ou mais instruções reais
Para cada código em C, faça uma implementação em assembly para o RISC-V
if (x == 5) a += 7; else: a += 15;
main: addi t1, zero, 9 add t2, zero, zero addi t0, zero, 5 bne t1, t0, else addi t2, t2, 7 j fim else: addi t2, t2, 15 fim: jr ra
x = 20; y = 10; while x != y { x += 2; y += 3; }
main: addi t0, zero, 20 # x addi t1, zero, 10 # y loop : beq t0, t1, fim # x == y ? vá para o fim addi t0, t0, 2 addi t1, t1, 3 j loop fim: jr ra # retorne
main: addi t0, zero, 0 # i addi t1, zero, 0 # a addi t2, zero, 100 # constante 100 para limite do for for: bge t0, t2, fim # i >= 100 ? vá para o fim add t1, t1, t0 # a += i addi t0, t0, 1 # i++ j loop # vá para o início do loop fim: jr ra # retorne