Código-máquina MIPS
Todas as instruções têm 32 bits.
Existem 3 tipos de instruções: R, I e J.
Para simplificar o hardware os campos dos vários formatos são tão alinhados quanto possível.
Formato R
Op |
Rs |
Rt |
Rd |
Shamt |
Funct |
6 bits |
5 bits |
5 bits |
5 bits |
5 bits |
6 bits |
Escreva o código da seguintes instruções:
Formato I (operandos imediatos)
Op |
Rs |
Rt |
Address |
6 bits |
5 bits |
5 bits |
16 bits |
Escreva o código-máquina dos seguintes fragmentos de programas:
ciclo: lw $16, 256($15) add $5, $16, $20 sw $5, 256($15) bne $5, $12, ciclo
Note que as instruções de branch usam este formato. O argumento destas instruções é o número de instrucões que deve saltar (nº de bytes*4), contadas a partir da instrução a seguir ao branch.
Formato J
Op |
Target address |
6 bits |
26 bits |
Escreva o código da seguintes instruções:
Agora, que já tentou resolver, lembre-se que todas as instruções são alinhadas em múltiplos de 4, logo os 2 últimos bits do endereço de uma instrução são sempre 0. O formato J permite especificar um endereço de 28 bits, porque os 2 bits menos significativos não são especificados, uma vez que têm o valor 0.
Repita agora este último exercício.
Codifique o seguinte programa em código-máquina do MIPS.
A etiqueta main refere a posição 0x00400020.
main: addi $s0, $0, 10 addi $s1, $0, 20 ciclo: beq $s1, $s0, fim addi $s1, $s1, -1 j ciclo fim: jr $ra
MIPS Nativo
1. Apresente o código-máquina, em hexadecimal, dos seguintes fragmentos de programa:
move $s0, $t5
inicio: bge $s0, 100, fim addi $s0, $s0, 2 b inicio fim: jr $31
.data var: .word 10 soma: .word 0 .text main: la $t0, var lw $s0, 0($t0) li $s1, 0 ciclo: ble $s0, 0, fim add $s1, $s1, $s0 addi $s0, $s0, -1 j ciclo fim: la $t0, soma sw $s1, 0($t0) jr $ra
Apresente o código máquina do programa anterior.