Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Practica 04

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 3

Nombres: Katherine Liliana Huaycani Gómez

Código: 2018 - 119037

PRACTICA 04:
Datos de Memoria y Estructura de control repetitiva for.
Actividad 01: Datos en Memoria; Realizar las siguientes directivas
1. Declaración de palabras de memoria.
En este apartado se ver´an las directivas ((.data)) y ((.word)). Como punto
de partida se considera el siguiente ejemplo:

Descripción Código ensamblador MIPS


serie de directivas que le indican al .data # comienzo de la zona de datos
ensamblador (a MIPS) que palabra1: .word 15 # representación decimal del dato
información debe almacenar en palabra2: .word 0x15 # representación hexadecimal del dato
memoria y donde

 ¿En qué direcciones se han almacenado las dos palabras? ¿Por qué?

Los datos comienzan en la dirección 0X1001000 por defecto, porque al poner .data no hubo una dirección
exactamente en donde se iban a guardar los datos, por lo tanto “palabra1” se guarda en 0x1001000 y
“palabra2” se guarda en 0x10010004

 ¿Qué valores toman las etiquetas ((palabra1)) y ((palabra2))?

(palabra1) el valor 0x0000000f y (palabra2) el valor 0x00000015

Descripción Código ensamblador MIPS


serie de directivas que le indican al .data 0x10010000 # comienzo de la zona de datos
ensamblador (a SPIM) que palabras: .word 15, 0x15 # en decimal y en hexadecimal
información debe almacenar en
memoria y donde
 ¿Se observa alguna diferencia en los valores almacenados en memoria respecto a los almacenados por el
programa anterior? ¿Están en el mismo sitio?

No hay ninguna diferencia porque ya que la dirección puesta en .data es la que es por defecto, por lo tanto
los datos están en el mismos sitio.

2. Declaración de bytes de memoria.


La directiva ((.byte DATO)) inicializa una posición de memoria, es decir,
un byte, con el contenido DATO.
Código ensamblador MIPS
.data # comienzo de la zona de datos
octeto: .byte 0x15 # DATO expresado en hexadecimal

 ¿Qué dirección de memoria se ha inicializado con el valor 0x15?


 ¿Qué valor posee la palabra que contiene el byte?

Código ensamblador MIPS


.data # comienzo zona de datos
palabra1: .byte 0x10, 0x20, 0x30, 0x40 # datos en hexadecimal
palabra2: .word 0x10203040 # dato en hexadecimal

 ¿Qué valores se han almacenado en memoria?

 ¿Qué valores toman las etiquetas ((palabra1)) y ((palabra2))?

3. Declaración de cadenas de caracteres.


La directiva (( .ascii ”cadena”)) le indica al ensamblador que debe almacenar los códigos ASCII de los caracteres que
componen la cadena entrecomillada. Dichos códigos se almacenan en posiciones consecutivas de memoria, de un byte
cada una.

Código ensamblador MIPS


.data
cadena: .ascii "abcde" # declaración de la cadena
octeto: .byte 0xff

 ¿Qué rango de posiciones de memoria se han reservado para la variable etiquetada con ((cadena))?

 ¿Cuál es el código ASCII de la letra ((a))? ¿Y el de la ((b))?


A=97 y B=98

 ¿A qué posición de memoria hace referencia la etiqueta ((octeto))?

Posición 2

 ¿Cuántos bytes se han reservado en total? ¿Y cuántas palabras?

6 bytes ocupados y 2 palabras

4. Reserva de espacio de memoria.


La directiva ((.space N)) sirve para reservar N bytes de memoria e inicializarlos
a 0.

Código ensamblador MIPS


.data
byte1: .byte 0x10
espacio: .space 4
byte2: .byte 0x20
palabra: .word 10

 ¿Qué posiciones de memoria se han reservado para almacenar la variable ((espacio))?


 ¿Los cuatro bytes utilizados por la variable ((espacio)) podrían ser leídos o escritos como si fueran una
palabra? ¿Por qué?
 ¿A partir de qué dirección se ha inicializado ((byte1))? ¿Y ((byte2))?
Byte1= 0x10010000
Byte2= 0x10010005
5. Alineación de datos en memoria
La directiva (( .align N)) le indica al ensamblador que el siguiente dato
debe ser almacenado en una dirección de memoria que sea múltiplo de 2n.

Código ensamblador MIPS


.data
byte1: .byte 0x10
.align 2
espacio: .space 4
byte2: .byte 0x20
palabra: .word 10

 ¿Qué posiciones de memoria se han reservado para almacenar la variable ((espacio))?


 ¿Los cuatro bytes utilizados por la variable ((espacio)) podrían ser
 leídos o escritos como si fueran una palabra? ¿Por qué? ¿Qué es lo que ha hecho la directiva ((.align 2))?

Actividad 02:
 Ingrese el siguiente código en MIPS MARS.

Algoritmo Alto nivel Código ensamblador MIPS


programa en C int main (int argc, char** argv) { .data
que acumula int V[ ]={6,7,8,9,10,1}; vector: .word 6, 7, 8, 9, 10, 1
los int n=6; n: .word 6
elementos de int i; res: .space 4
un vector ((V)) int res;
en una res=0; .text
variable for(i=;i<n;i++) { main: la $t2,vector #$t2<-dirección de vector
llamada ((res)). res=res+V[ i ]; and $t3,$0,$0 # $t3 <- 0
Para ello, } and $t0,$0,$0 # $t0 <- 0
utiliza } lw $t1,n($0) # $t1 <- M[n]
una estructura para: bge $t0,$t1,finpara #Si $t0>=$t1 salta a finpara
condicional lw $t4,0($t2) #$t4 <- M[$t2] (Vector[i])
((for)) y un add $t3,$t3,$t4 #Acumula los elementos del vector
contador addi $t2,$t2,4 # $t2 <- $t2+4
llamado (( i)). addi $t0,$t0,1 # $t0 <- $t0+1
j para # Salta a para
finpara: sw $t3,res($0) # M[res] <- $t3

 Ejecuta paso a paso el programa y comprueba detenidamente la función que realizan


cada una de las instrucciones que componen el programa en ensamblador.
 ¿En qué posición de memoria está la variable ((res))?

 ¿Qué valor se almacena en ((res)) después de ejecutar el código anterior?

 ¿Qué registro se ha utilizado para actualizar el contador?


 ¿Qué valor posee al finalizar la ejecución dicho registro?
 ¿Cuántas veces se ha ejecutado el bucle que comienza en la instrucción etiquetada con
((para))?
 6

También podría gustarte