Está en la página 1de 7

Universidad Central de Venezuela

Facultad de Ciencias
Escuela de Computación
Organización y Estructura del Computador II
Semestre I-2023

Práctica 1

1. Escriba las siguientes cadenas de caracteres utilizando la codificación ASCII. Escriba sus respuestas
finales en hexadecimal.
a) hello there
b) bag o’ chips
c) To the rescue!

2. Muestre cómo las cadenas del ejercicio 1 se almacenan en una memoria direccionable por bytes que
comienza en la dirección de memoria 0x004F05BC. El primer caracter de la cadena se almacena en la
dirección de byte más baja (en este caso, 0x004F05BC). Indique claramente la dirección de memoria de
cada byte.

3. Convierta los siguientes fragmentos de código de alto nivel al lenguaje ensamblador RISC-V. Suponga que
las variables enteras (con signo) g y h están en los registros a0 y a1, respectivamente. Comente claramente
su código.
a) if(g>h)
g = g + 1;
else
h = h − 1;
b) if (g <= h)
g = 0;
else
h = 0;
4. Escriba el código ensamblador RISC-V para colocar los siguientes elementos inmediatos (constantes) en
s7. Utilice un número mínimo de instrucciones.
a) 29
b) –214
c) –2999
d) 0xABCDE000
e) 0xEDCBA123
f) 0xEEEEEFAB

5. Escriba una función en un lenguaje de alto nivel para int find42(int array[], int size). Donde
size especifica el número de elementos en el arreglo, y array[] especifica la dirección base del arreglo.
La función debe devolver el número de índice de la primera entrada del arreglo que contiene el valor 42. Si
ninguna entrada del arreglo es 42, debe devolver el valor -1. Comente claramente su código.
6. Convierta la función de alto nivel del ejercicio 5 en código ensamblador RISC-V. Comente claramente su
código.

7. Convierta el siguiente código ensamblador RISC-V a su equivalente en lenguaje de máquina. Escriba las
instrucciones en hexadecimal.
add s7, s8, s9
srai t0, t1, 0xC
ori s3, s1, 0xABC
lw s4, 0x5C(t3)
8. Convierta las siguientes instrucciones de salto en código de máquina. Las direcciones de instrucción se
dan a la izquierda de cada instrucción.
a) 0x0000ABC0 jal Loop
... ...
0x0000EEEC Loop: ...
b) 0x0000C10C Back: ...
... ...
0x000F1230 jal Back
c) 0x00801000 jal s1, L1
... ...
0x008FFFDC L1: ...
d) 0xA1234560 j L2
... ...
0xA131347C L2: ...
e) 0xF0BBCCD4 L3: ...
... ...
0xF0CBCCD4 j L3
9. Considere el siguiente programa RISC-V. Suponga que las instrucciones se ubican comenzando en la
dirección de memoria 0x8534 y que las variables globales g y h están en las direcciones de memoria
0x1305C y 0x13060, respectivamente.
# RISC-V assembly code
main:
addi sp, sp, −8
sw ra, 4(sp)
sw s4, 0(sp)
addi s4, zero, 15
sw s4, −300(gp) # g = 15
addi a1, zero, 27 # arg1 = 27
sw a1, −296(gp) # h = 27
lw a0, −300(gp) # arg0 = g = 15
jal greater
lw s4, 0(sp)
lw ra, 4(sp)
addi sp, sp, 8
jr ra
greater:
blt a1, a0, isGreater
addi a0, zero, 0
jr ra
isGreater: addi a0, zero, 1
jr ra

a) Primero, muestre la dirección de instrucción al lado de cada instrucción de ensamblador.


b) Describa la tabla de símbolos: es decir, enumere el nombre, la dirección y el tamaño de cada
símbolo (la etiqueta de función y la variable global).
c) Convierta todas las instrucciones a código de máquina.
d) ¿Qué tan grandes (cuántos bytes) son los segmentos de datos y texto?
e) Dibuje un mapa de memoria que muestre dónde se almacenan los datos y las instrucciones.
Asegúrese de etiquetar los valores de PC y gp al comienzo del programa.
(e)

10. Considere qué tan lejos pueden saltar las instrucciones jal.
a) ¿Cuántas instrucciones puede saltar hacia adelante una instrucción jal (es decir, a direcciones
más altas)?
b) ¿Cuántas instrucciones puede retroceder una instrucción jal (es decir, a direcciones más bajas)?

También podría gustarte