Introdu¸c˜ ao aos Computadores - CC1002 (DCC/FCUP)
Folha 7: Representa¸ c˜ ao de Instru¸ c˜ oes MIPS R2000
Figura 1: Formato das instru¸c˜oes do MIPS R2000.
Figura 2: Registos dispon´ıveis.
Figura 3: Subconjunto do assembly do MIPS R2000 - semˆantica.
Figura 4: Subconjunto do assembly do MIPS R2000 - formato bin´ario.
1. Quais as instru¸c˜oes R2000 representadas pelas seguintes sequˆencias de 32 bits?
(a) 00000010010100111000100000100000 (b) 10001110010100010000000001100100 (c) 00010010001100100000000000011001 (d) 00000011111000000000000000001000 (e) 00001100000000000000100111000100
2. Quais as instru¸c˜oes R2000 representadas pelas seguintes sequˆencias descritas em hexa- decimal?
(a) 0x02538820 (b) 0x12320019 (c) 0x03E00008
3. Utilize as tabelas dadas para traduzir para sequˆencias de instru¸c˜oes R2000 os seguintes fragmentos de c´odigo:
(a) 8616 add $t0, $s1, $s2 8620 add $t1, $s3, $s4 8624 sub $s0, $t0, $t1 (b) 8616 lw $t0, 32($s3)
8620 add $t0, $s2, $t0 8624 sw $t0, 48($s3) (c) 8616 bne $s3, $s4, else
8620 add $s0, $s1, $s2
8624 j exit
8628 else: sub $s0, $s1, $s2 8632 exit: ...
(d) 3664 loop: add $t1, $s3, $s3 3668 add $t1, $t1, $t1 3672 add $t1, $t1, $s6
3676 lw $t0, 0($t1)
3680 bne $t0, $s5, exit 3684 add $s3, $s3, $s4
3688 j loop
3692 exit:
(e) 3664 proc: addiu $sp, $sp, -12
3668 sw $t1, 8($sp)
3672 sw $t0, 4($sp)
3676 sw $s0, 0($sp)
3680 add $t0, $a0, $a1
3684 add $t1, $a2, $a3
3688 sub $s0, $t0, $t1
3692 add $v0, $s0, $zero
3696 lw $s0, 0($sp)
3700 lw $t0, 4($sp)
3704 lw $t1, 8($sp)
3708 addiu $sp, $sp, 12
3712 jr $ra
4. Assumindo que os valores guardados nos registos $s1 e $s2 s˜ao 1 e 2, respectiva- mente, indique qual ser´a o valor do registo $t0 ap´os a execu¸c˜ao das seguintes sequˆencias de instru¸c˜oes R2000.
(a) 8616 add $t0, $s1, $s1 8620 add $t0, $t0, $s1 8624 sub $t0, $t0, $s2 (b) 8616 bne $s1, $s1, else
8620 add $t0, $s1, $s1
8624 j exit
8628 else: sub $t0, $s2, $s2 8632 exit:
(c) 8616 bne $s1, $s2, else 8620 add $t0, $s1, $s1
8624 j exit
8628 else: sub $t0, $s2, $s2 8632 exit:
(d) 3676 loop: addi $t0, $s1, 1 3680 beq $s1, $s2, exit 3684 add $s1, $s1, $s1
3688 j loop
3692 exit:
5. Visite o s´ıtio da Internet “Compiler Explorer” no endere¸co: https://godbolt.org/.
Neste s´ıtio pode escrever programas, fun¸c˜oes ou fragmentos de c´odigo em C e ver a sua tradu¸c˜ao em c´odigo assembly para diferentes arquitecturas de microprocessador. Escreva
fun¸c˜oes em C que recebem um inteironcomo argumento e que realizam as opera¸c˜oes abaixo descritas. Use a p´agina para ver as suas tradu¸c˜oes em MIPS R2000 e tente relacionar o c´odigo gerado com o seu c´odigo fonte em C.
verificar se n ´e 2, 3, 5 ou 7 (retorna 1) ou n˜ao (retorna 0);
retornar a soma dos inteiros de 0 at´en;
retornar a soma das potˆencias de 2 at´e 2n;
retornar o n-´esimo n´umero de Fibonacci.