Programación en ensamblador del procesador mips r2000
EJERCICIO 1.-
¿Cómo almacenaría los siguientes datos en memoria?
La cadena de caracteres: “El resultado de la suma es: “
El numero en coma flotante simple precisión: 5.46e-2
El byte: 255 (0xff)
La media palabra: 0x74af
El carácter `a':
a) cadena: .asciiz “El resultado de la suma es”
b) .float 5.46e-2c) .byte 255
d) .half 0x74af
e).ascii “a”
EJERCICIO 2.-
Escribir el código en ensamblador que realiza las siguientes acciones:
Imprime el siguiente mensaje: “La media es: 55.63”
Lee tu nombre por teclado: “Introduzca su nombre: “
Crear un procedimiento que imprime una cadena y un entero que se pase como parámetro
Crear un procedimiento que realice la suma de dos númerosen coma flotante y devuelva el resultado en $v0
a)
.data
num: .ascii “La media es: 55.63”
.text
main:
li $2, 4
la $4, num
syscall
li $v0, 10
syscall
b)
.data
cadena2: .asciiz “Introduzca su nombre:”
.text
main:
la $a0, cadena2
li $v0,4
syscall
li $v0, 8
syscall
la $a0, PEPE
li $v0, 8
syscall
c) .data
cad: .asciiz "Escribeun numero:"
.text
.globl __start
__start: li $2, 4
la $4, cad
syscall
li $2, 5
syscall
move $v1, $2
li $2, 10
syscall
d)
.data
var_a: .float 0.01
var_b: .float 0.001
.text
main:
jal suma
mov.s $f12, $v0
li $v0,2
syscall
li $v0,10
syscall
suma:
l.s, $f4, var_a
l.s, $f2, var_b
add.s $f12,$f2,$f4
jr $31
EJERCICIO3.-
¿Cuál es la etiqueta que marca el comienzo de nuestro programa en caso de que load trap file? ¿y si load trap file no esta seleccionado?
Cuando se carga el manejador de instrucciones, la etiqueta que marca el comienzo del programa debe de ser main en lugar de _start, que se empleará cuando load trap file no está seleccionado.
EJERCICIO 4.-
Si la directiva .data se utiliza sin ningúnargumento. ¿Dónde almacenará los datos que lleven asociados otra directiva que acompañe? ¿A partir de que dirección?
Si la directiva .data se utiliza sin ningún argumento, los datos que lleven asociados otras directivas que le acompañen se almacenarán en el argumento de datos, a partir de la dirección 0x10000000H.
EJERCICIO 5.-
Para un programa de usuario, es seguro en algún momento usarlos registros$k0 y $k1.
No es seguro usar los registros $k0 y $k1, porque están reservados para el uso del núcleo operativo y pueden borrar lo que se encuentra almacenado.
EJERCICIO 6.-
Indíquese la instrucción MIPS o la mínima secuencia de instrucciones para implementar la sentencia x := y * 100. Supóngase que x se encuentra en el registro $11 e y en el $12.
mult $11, $12, 100EJERCICIO 7.-
Indíquese la instrucción MIPS o la mínima secuencia de instrucción que realiza la sentencia a[23]:= a[24] + x; supóngase que a es un vector de 100 elementos que comienza en la dirección de memoria 0x1000A000 y la variable x se encuentra en el registro $15.
load
lw $t0, 0x1000A18
add $ti, $t0, $15
sw $ti, 0x1000A17
EJERCICIO 8.-
El siguiente trata de copia palabrasdesde la dirección de memoria que indica el registro $4 en la dirección que indica el registro $5; el registro $2 lleva la cuenta de las palabras copiadas. El programa se detiene cuando se encuentra una palabra igual a cero. No se han de guardar los contenidos de los registros $3, $4 y $5. La palabra de terminación( que estará a cero) debe ser leída pero no copiada
bucle: lw, $3, 0($4) #leesiguiente palabra fuente
addi $2, $2, 1 # incrementa número de palabra copiadas
sw $3, 0($5) # copia la palabra
addi $4, $4, 1 # avanza puntero a siguiente palabra fuente
addi $5, $5, 1 # avanza puntero a siguiente palabra destino
bne $3, $0, bucle # va a bucle si palabra copiada no es cero
El programa anterior hay multitud de fallos (bugs). Determínese estos fallos y cámbiese...
Regístrate para leer el documento completo.