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:

  1. add $12, $10, $8
  2. sub $10, $31, $2

 

 

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:

  1. addi $12, $10, 1024

	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:

  1. j main , supondo que main corresponde ao addr 0x007F8E24
  2. j main , supondo que main corresponde ao addr 0x08FFFF1C
  3. j main , supondo que main corresponde ao addr 0x80000000

 

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:

 

  1. 	move $s0, $t5
    
  2.  

     

  3. 	inicio:
    		bge $s0, 100, fim
    		addi $s0, $s0, 2
    		b inicio
    	fim:
    		jr $31
    
  4.  

     

  5. Codifique o seguinte programa em MIPS nativo, sabendo que:
    	.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
    
  6. Apresente o código máquina do programa anterior.