Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: muyayodeoz en 9 Enero 2014, 19:03 pm



Título: Ayuda Volumen de una Esfera
Publicado por: muyayodeoz en 9 Enero 2014, 19:03 pm
Saludos! Soy nuevo en el foro, espero ser de ayuda, JAVA es mi fuerte pero ensamblador... Necesito hacer una programa en ensamblador MIPS para éste sábado, se trata de calcular el volumen de una esfera. Se debe introducir por teclado el radio.
A ver si me podeis ayudar en como empezar éste programa.

Un saludo y gracias.
:)


Título: Re: Ayuda Volumen de una Esfera
Publicado por: topomanuel en 9 Enero 2014, 23:16 pm
Nadie te hará tu tarea desde el principio... pon lo que ya tengas hecho y pide ayuda sobre lo que creas son errores. o o que no entiendas...

Saludos.


Título: Re: Ayuda Volumen de una Esfera
Publicado por: muyayodeoz en 10 Enero 2014, 11:56 am
el probñema es que no se como empezar :S necesito como empezar gracias no pretendo el codigo


Título: Re: Ayuda Volumen de una Esfera
Publicado por: Danyfirex en 10 Enero 2014, 13:04 pm
Si sabes programar seguro si lees lo básico de ensamblador MIPS lo harás fácilmente.

saludos


Título: Re: Ayuda Volumen de una Esfera
Publicado por: muyayodeoz en 10 Enero 2014, 16:09 pm
Se lo que viene a ser cargar datos en resitros y tal, esoty en primero de telecomunicaciones y java si sé pero ensamblador en mips solo cargar en direcciones.
Si supiera como hacerlo creedme que lo haría.
Tengo esto de momento (lo que se, cargar numeros. )
Código:
.data	
dat_pi: .float 3.1415926
str_res: .asciiz “El Volumen de la esfera es: “
radio: .float 1.0 #Esto es un valor temporal
.text
.globl __start
__start:

l.s $t0,radio
li $t1,4

Lo que no se es cuales son las subrutinas para leer un float. gracias



he avanzado con ayuda de otro foro y tengo ésto:
Código:
.data	
dat_pi: .float 3.1415926
string_result: .asciiz “El Volumen de la esfera es: ”
str_pide_radio .asciiz “Introduzca el radio de la esfera”
radio: .float 1.0 #Esto es un valor temporal
.text
.globl __start
__start:

l.s $t0,dat_pi #Cargamos PI
li $t1,4 #Cargamos 4

la $a0,str_pide_radio #Pide radio
jal put_str


la $4,radio #Lee el numero introducido
jal get_sfloat





#----------------------------------SUBRUTINAS-----------------------------------------------#

get_sfloat: #Lee un flotante simple de la consola.
li $v0,6
syscall
jr $31


put_str:
li $v0,4 #Escribe una cadena de texto en la consola.
syscall
jr $31



fin:
li $v0,10 #Cierra consola y finaliza programa.
syscall




Creo que tengo todo y solo queda multiplicar y dividir, ge buscado como hacerlo en google y me sale ésto:
Código:
mult rs, rt 
Multiplicación R
 Multiplica el contenido de los registros rs y rt. Los 32 MSB
 del resultado se
almacenan en el registro HI y los 32 LSB
 en el registro LO

Mi duda es:¿Como uso el resultado de la multiplicacion? gracias
Com me dijisteis he aportado mi código.


Título: Re: Ayuda Volumen de una Esfera
Publicado por: xv0 en 12 Enero 2014, 12:02 pm
Hola

No se nada sobre la arquitectura Mips, pero si se que tienes que utilizar las instrucciones de como flotante para hacer eso, estas usando las de calculo general. Mirate esto.

Código:
http://www.doc.ic.ac.uk/lab/secondyear/spim/node20.html

Y sobre tu ultima pregunta, pues como estas utilizando las syscall del sistema, no se cual sera, enteoria seria cargar el resultado de la multiplicacion o division en el registro adecuado "parametro" y llamar a la syscall asi es como funciona en amd64, pero antes asegurate si la syscall soporta numeros decimales.

Un saludo.


Título: Re: Ayuda Volumen de una Esfera
Publicado por: muyayodeoz en 12 Enero 2014, 15:11 pm
Hola

No se nada sobre la arquitectura Mips, pero si se que tienes que utilizar las instrucciones de como flotante para hacer eso, estas usando las de calculo general. Mirate esto.

Código:
http://www.doc.ic.ac.uk/lab/secondyear/spim/node20.html

Y sobre tu ultima pregunta, pues como estas utilizando las syscall del sistema, no se cual sera, enteoria seria cargar el resultado de la multiplicacion o division en el registro adecuado "parametro" y llamar a la syscall asi es como funciona en amd64, pero antes asegurate si la syscall soporta numeros decimales.

Un saludo.

Gracias por responder :) ya lo tengo todo solucionado y el ejercicio hecho, ahora subo la respuesta.
Gracias a todos
PD:Syscall admite flotantes