Vous êtes sur la page 1sur 5

E.P.

DE INFORMATICA Y SISTEMAS
ARQUITECTURA DE COMPUTADORES
TERCER AO

Carga y Almacenamiento - simulador MARS MIPS


En esta seccin se realizar operaciones con las instrucciones Load/Store como:
1.
2.
3.
4.
5.

Carga de datos inmediatos (constantes)


Carga de palabras (de memoria a registro)
Carga de bytes (de memoria a registro)
Almacenamiento de palabras (de registro a memoria)
Almacenamiento de bytes (bytes de registro a memoria)

1. Carga de datos inmediatos (constantes)


Instrucciones:
lui = Carga un dato inmediato en los 16 bits de mayor peso de un registro.
li = pseudo-instrucciones que cargan un dato inmediato de 32 bits.
la = pseudo-instruccin que carga un dato de 32 bits a una direccin de
memoria.
Instruccin lui:
.text
main: lui $s0, 0x8690
La instruccin (( lui )) (del ingls load upper inmediate) almacena la media
palabra indicada por el dato inmediato de 16 bits, en el ejemplo 0x8690, en la
parte alta del registro especificado, en este caso $s0; y, adems, escribe el valor 0
en la media palabra de menor peso de dicho registro. Es decir, despus de la
ejecucin del programa anterior, el contenido del registro $s0 ser 0x86900000.
Carga el programa en el simulador, localiza en la zona de visualizacin de
cdigo la instruccin (lui $s0, 0x8690) e indica:
a) La direccin de memoria en la que se encuentra:
b) El tamao que ocupa:
c) La representacin de la instruccin en cdigo mquina:
d) El formato de instruccin empleado:
e) El valor de cada uno de los campos de dicha instruccin:
En el caso de que se quisiera cargar un dato inmediato de 32 bits en un registro,
no se podra utilizar la instruccin (lui).
Solucin con instrucciones (ori) ejemplo:
.text
main: lui $s0, 0x8690
ori $s0, $s0, 0x1234
a) Qu valor contiene $s0 despus de ejecutar (lui $s0, 0x8690)?:..
b) Qu valor contiene $s0 despus de ejecutar (ori $s0, $s0, 0x1234)?
Para cargar una constante de 32 bits en un registro es necesario de un
pseudointruccion (li):
.text
main: li $s0, 0x12345678

E.P. DE INFORMATICA Y SISTEMAS


ARQUITECTURA DE COMPUTADORES
TERCER AO

Qu valor tiene el registro $s0 despus de la ejecucin?


-------------------------------------------------------------------Puesto que (li) es una pseudoinstruccin, el ensamblador ha tenido que
sustituirla por instrucciones mquina equivalentes. Cuales son:
-------------------------------------------------------------------Pseudointruccion la:
.data
palabra1: .word 0x10
palabra2: .word 0x20
.text
main: la $s0, palabra1
la $s1, palabra2
la $s2, 0x10010004
Carga el anterior programa en el simulador y contesta a las siguientes preguntas:
a) Qu instruccin o instrucciones mquina genera el ensamblador para
resolver la instruccin (la $s0, palabra1)?
b) Para la instruccin (la $s1, palabra2)?
c) Para la instruccin (la $s2, 0x10010004)?
Ejecuta el programa anterior y responde a las siguientes preguntas:
a) Qu valor hay en el registro $s0?
b) En el registro $s1?
c) En el registro $s2?

2.

Carga de palabras (de memoria a registro)


Para cargar una palabra de memoria a registro se utiliza la siguiente instruccin
lw rt , Inm(rs); Dicha instruccin lee una palabra de la posicin de memoria
indicada por la suma de un dato inmediato (Inm) y el contenido de un registro
(rs) y la carga en el registro indicado (rt).
Ejemplo:
.data
palabra:
.word 0x10203040
.text
#zona de instrucciones
main: lw $s0, palabra($0) #$s0 <--M[palabra]
Cargar el programa al simulador y contesta a las siguientes preguntas:
a) Localiza la instruccin en la zona de instrucciones e indica cmo ha
transformado dicha instruccin el simulador.
b) Explica cmo se obtiene a partir de esas instrucciones la direccin de
palabra. Por qu traduce el simulador de esta forma la instruccin original?

E.P. DE INFORMATICA Y SISTEMAS


ARQUITECTURA DE COMPUTADORES
TERCER AO

c) Indica el formato de cada una de las instrucciones generadas y los campos


que las forman.
d) qu hay en el registro $s0 antes de ejecutar el programa? Ejecuta el
programa. qu contenido tiene ahora el registro $s0?
3.

Carga de byte (de memoria a registro)


La instruccin (lb rt ,Inm(rs)) carga un byte de memoria y lo almacena en el
registro indicado. Al igual que en la instruccin (lw), la direccin de memoria se
obtiene sumando un dato inmediato (Inm) y el contenido de un registro (rs).
Ejemplo:
.data
octeto: .byte 0xf3
otro: .byte 0x20
.text
main: lb $s0, octeto($0)
lb $s1, otro($0)
Carga el programa anterior en el simulador y localiza las dos instrucciones (lb)
Qu instrucciones mquina ha puesto el ensamblador en lugar de cada una de
ellas?
Ejecuta el programa y responde a las siguientes preguntas:
a) Qu valor contiene el registro $s0 en hexadecimal?
b) Qu valor contiene el registro $s1 en hexadecimal?
c) Que entero representa 0xf3 en complemento a 2 con 8 bits?
d) Que entero representa 0xffff fff3 en complemento a 2 con 32 bits?
La instruccin (lb) carga un byte de memoria en un registro manteniendo su
signo. Esto es til si el dato almacenado en el byte de memoria es efectivamente
un nmero entero, pero no en otro caso. Por ejemplo, si se trata de un nmero
natural (de 0 a 255) o de la representacin en cdigo ASCII (extendido) de un
carcter.
Cuando se quiera cargar un byte sin tener en cuenta su posible signo se utilizara
la instruccin (lbu rt , Inm(rs))
Reemplaza en el programa anterior las instrucciones (lb) por instrucciones (lbu)
y ejecuta el nuevo programa.
a) Qu valor hay ahora en $s0? Ha cambiado este valor con respecto al
obtenido en el programa original? Por qu?
b) Qu valor hay ahora en $s1? Ha cambiado este valor con respecto al
obtenido en el programa original? Por qu?
Dado el siguiente programa:

E.P. DE INFORMATICA Y SISTEMAS


ARQUITECTURA DE COMPUTADORES
TERCER AO

.data
octeto: .word 0x10203040
otro: .byte 0x10
.text
main: lb $s0, octeto($0)
lb $s1, otro($0)
Cul es el valor del registro $s0 una vez ejecutado? Por qu?

4.

Almacenamiento de palabras (de registro a memoria)


Para almacenar una palabra desde un registro a memoria se utiliza la siguiente
instruccin: (sw rt ,Inm(rs)). Dicha instruccin lee la palabra almacenada en el
registro indicado (rt) y la almacena en la posicin de memoria indicada por la
suma de un dato inmediato (Inm) y el contenido de un registro (rs).
Ejemplo:
.data
#zona de datos
palabra1: .word 0x10203040
palabra2: .space 4
palabra3: .word 0xffffffff
.text
#zona de instrucciones
main: lw $s0, palabra1($0)
sw $s0, palabra2($0) #M[palabra2] <--$s0
sw $s0, palabra3($0) #M[palabra3] <--$s0
Qu instrucciones mquina se utilizan en lugar de la siguiente instruccin en
ensamblador: (sw $s0, palabra3 ($0))?

5.

Almacenamiento de bytes (bytes de registro a memoria)


Para almacenar un byte desde un registro a memoria se utiliza la instruccin (sb
rt ,Inm(rs)). Dicha instruccin lee el byte de menor peso almacenado en el
registro indicado (rt) y lo almacena en la posicin de memoria indicada por la
suma de un dato inmediato (Inm) y el contenido de un registro (rs).
Ejemplos:
.data
#zona de datos
palabra: .word 0x10203040
octeto: .space 2
.text

#zona de instrucciones

E.P. DE INFORMATICA Y SISTEMAS


ARQUITECTURA DE COMPUTADORES
TERCER AO

main: lw $s0, palabra($0)


sb $s0, octeto($0)
#M[octeto] <--byte menor peso de $s0
a) Modifica el programa para que el byte sea almacenado en la direccin
(octeto+1) (basta con cambiar la instruccin sb $s0, octeto ($0) por sb $s0,
octeto +1($0). Comprueba y describe el resultado de este cambio.
b) Vuelve a modificar el programa para que el byte se almacene en la direccin
de memoria (palabra+3) en lugar de en (octeto+1). Qu valor tiene la
palabra almacenada en la direccin 0x1001 0000 despus de la ejecucin?

Ejercicios
a) Desarrolla un programa ensamblador que inicialice un vector de enteros, V,
definido como V = (10, 20, 25, 500, 3). El vector debe comenzar en la direccin de
memoria 0x1000 0000. El programa debe cargar los elementos de dicho vector en
los registros $s0 al $s4.
b) Amplia el anterior programa para que adems copie a memoria el vector V
comenzando en la direccin 0x1001 0000. (pista: En un programa ensamblador se
pueden utilizar tantas directivas del tipo (.data) como sean necesarias.)
c) Desarrolla un programa ensamblador que, dada la siguiente palabra, 0x10203040,

almacenada en una determinada posicin de memoria, la reorganice en otra


posicin invirtiendo el orden de sus bytes.

Vous aimerez peut-être aussi