Ejemplos de modos de direccionamiento de la MIPS

Ejemplos de modos de direccionamiento de la MIPS Ejemplos de modos de direccionamiento de la MIPS

serdis.dis.ulpgc.es
from serdis.dis.ulpgc.es More from this publisher
12.05.2013 Views

Ejemplos de modos de direccionamiento de la MIPS (1) Inmediato Instrucción ensamblador: addi $t0,$t1,4 (operando inmediato) Tipo I Instrucción máquina: 001000 01001 10000 0000000000000100 4 Operación a realizar: $t0 = $t1 + 4 Contenido de los registros antes de la operación: Contenido de los registros después de la operación: 1 2

<strong>Ejemplos</strong> <strong>de</strong> <strong>modos</strong> <strong>de</strong> <strong>direccionamiento</strong> <strong>de</strong> <strong>la</strong> <strong>MIPS</strong><br />

(1) Inmediato<br />

Instrucción ensamb<strong>la</strong>dor: addi $t0,$t1,4 (operando inmediato)<br />

Tipo I<br />

Instrucción máquina: 001000 01001 10000 0000000000000100<br />

4<br />

Operación a realizar: $t0 = $t1 + 4<br />

Contenido <strong>de</strong> los registros antes <strong>de</strong> <strong>la</strong> operación:<br />

Contenido <strong>de</strong> los registros <strong>de</strong>spués <strong>de</strong> <strong>la</strong> operación:<br />

1<br />

2


(2) Registro:<br />

Instrucción ensamb<strong>la</strong>dor: sub $10, $11, $12 (los 3 operandos<br />

direccionados en modo registro)<br />

Tipo R<br />

Instrucción máquina: 000000 010110110001010 00000 100010<br />

11 12 10<br />

Operación a realizar:<br />

$10 = $11 - $12 = 7 – 4 = 3<br />

Contenido <strong>de</strong> los registros <strong>de</strong>spués <strong>de</strong> <strong>la</strong> operación:<br />

(3) Base (+<strong>de</strong>sp<strong>la</strong>zamiento)<br />

Instrucción ensamb<strong>la</strong>dor: sw $13, 8($14) (dir.base+<strong>de</strong>sp<strong>la</strong>z.)<br />

Instrucción máquina: 101011 01110 01101 0000000000001000<br />

14 8<br />

Operación: transfiere <strong>la</strong> pa<strong>la</strong>bra en el registro $13 a <strong>la</strong> posición <strong>de</strong><br />

memoria especificada (8 + $14)<br />

3<br />

4


Contenido <strong>de</strong> los registros antes <strong>de</strong> <strong>la</strong> operación:<br />

De forma que <strong>la</strong> operación a realizar es:<br />

M [$14 + 8] = M [0x10010008] $13 = 0x1234567<br />

El valor queda almacenado en <strong>la</strong> correspondiente posición <strong>de</strong><br />

memoria:<br />

En ensamb<strong>la</strong>dor usaremos este modo <strong>de</strong> <strong>direccionamiento</strong> con una<br />

etiqueta para el <strong>de</strong>sp<strong>la</strong>zamiento:<br />

.data<br />

.text<br />

pa<strong>la</strong>bra1: .word 0x10203040<br />

pa<strong>la</strong>bra2: .word 0x50607080<br />

main: lw $16, pa<strong>la</strong>bra1($0)<br />

lw $16, pa<strong>la</strong>bra2($0)<br />

Esto convierte al ‘lw’ en una pseudoinstrucción que será traducida<br />

por dos instrucciones máquina:<br />

lui $1, 4097 y lui $1, 4097<br />

lw $16, 0($1) lw $16, 4($1) respectivamente.<br />

5<br />

6


(4) Re<strong>la</strong>tivo al contador <strong>de</strong> programa<br />

Este modo <strong>de</strong> <strong>direccionamiento</strong>, especifica un salto re<strong>la</strong>tivo (número<br />

<strong>de</strong> instrucciones) a <strong>la</strong> instrucción <strong>de</strong> bifurcación<br />

Instrucción ensamb<strong>la</strong>dor: bgez $t2, instr1 (dir. re<strong>la</strong>tivo al PC)<br />

add $t7, $t0,$t1<br />

instr1: add $t7, $t1, $t2<br />

Instrucción máquina: 000001 01010 00001 0000000000000001<br />

1<br />

Operación: bifurca a <strong>la</strong> instrucción especificada por <strong>la</strong> etiqueta instr1<br />

si el registro $t2 es mayor o igual que 0<br />

Sea 0x0040002C <strong>la</strong> dirección <strong>de</strong> <strong>la</strong> instrucción <strong>de</strong> bifurcación (bgez<br />

$t2, instr1)<br />

Entonces, instr1 = 0x00400030 + (1*4)= 0x00400034, que es <strong>la</strong><br />

dirección <strong>de</strong> <strong>la</strong> instrucción <strong>de</strong>stino <strong>de</strong>l salto (add $t7,$t1,$t2)<br />

PCSpim simu<strong>la</strong> mal el salto condicional, ya que el <strong>de</strong>sp<strong>la</strong>zamiento<br />

<strong>de</strong>be ser con respecto al PC actualizado, es <strong>de</strong>cir, apuntando a <strong>la</strong><br />

instrucción siguiente en memoria a <strong>la</strong> <strong>de</strong> salto, y lo hace con respecto<br />

a <strong>la</strong> <strong>de</strong> salto: en este caso calcu<strong>la</strong>ría un <strong>de</strong>sp<strong>la</strong>zamiento igual a 2.<br />

7<br />

8


(5) Pseudodirecto<br />

La dirección se calcu<strong>la</strong> concatenando los 4 bits más significativos <strong>de</strong>l<br />

PC con <strong>la</strong> dirección <strong>de</strong> 26 bits especificada en <strong>la</strong> instrucción y dos<br />

ceros<br />

Instrucción ensamb<strong>la</strong>dor: j instr2 (dir. pseudodirecto)<br />

add $t7, $t0,$t1<br />

instr2: add $t7, $t1, $t2<br />

Operación : salta a <strong>la</strong> instrucción especificada por instr2<br />

Instrucción máquina: 00001000000100000000000000010000<br />

Sea [0x00400038] <strong>la</strong> dirección <strong>de</strong> <strong>la</strong> instrucción <strong>de</strong> salto (j instr2)<br />

instr2 = 00000000010000000000000001000000 = 0x00400040, que<br />

es <strong>la</strong> dirección <strong>de</strong> <strong>la</strong> instrucción <strong>de</strong>stino <strong>de</strong>l salto (add $t7,$t1,$t2)<br />

9<br />

10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!