|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - m0skit0
Páginas: 1 ... 39 40 [41] 42 43 ... 100
1001
« en: Jueves 4 de Junio de 2009, 10:29 »
JR sólo copia el registro indicado al registro PC. En este caso $ra. Cuando haces jal, la dirección de ejecución + 8 se guarda en el registro $ra, que sería la dirección de retorno. Es donde volvemos al hacer jr $ra. Y otra cosa a la hora de almacenar las salidas lo deberia hacer en procesar_noiguales, no? Yo no lo haría así. Haría otra función y la llamaría tras procesar(). Ya tienes el número de caracteres y el carácter, sólo habría que almacenar en la dirección de memoria correcta Bueno me he dispuesto a probarlo, y me salta el siguiente error al cargar el archivo: El PcSpim no es un programa ejemplar que digamos  Quítale los espacios tras las comas.
1002
« en: Jueves 4 de Junio de 2009, 09:43 »
Se ve que ha sucedido algo raro y estás ejecutando datos, ya que si te fijas la instrucción que te da el error es "code "  . Depúralo a ver dónde te equivocas. Y también mi consejo es que si vas a usar básicamente ensamblador (como en la función modo13h()), uses la función asm().
1003
« en: Miércoles 3 de Junio de 2009, 10:12 »
en $a0 tengo el primer caracter, para compararlo con el siguiente solamente tendría que compararlo con Entrance La comparacion no seria con entrance seria con $s0 Nop, tampoco  En $s0 tienes un puntero a un carácter, y en $a0 tienes un carácter. Tendrías que cargar el carácter en algún registro para compararlo. Lo que te aconsejo es que pases $s0 como parámetro a la función procesar(): .data Entrance: .space 80 encode1: .space 40 encode2: .space 40 decode: .space 80 msg1: .asciiz "Please insert the String: " msg2: .asciiz " " msg3: .asciiz "n String encode like: " msg4: .asciiz "n String decode like: " .text .globl main # # Main # main: ori $v0,$zero,4 la $a0,msg1 syscall #Almacenar el String en la matriz # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entrance # $a1 = tamaño a leer ori $a1,$zero,80 syscall #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,Entrance syscall # # Codificar # start: la $s0, Entrance sig_carac: lw $t0, 0($s0) beq $t0, $zero, fin # Si es el carácter de final de cadena, ya terminamos add $a0,$zero,$t0 # Pasando el primer parámetro a la función procesar() jal procesar # Si no, llamamos a la función procesar() addiu $a1,$s0,1 # Pasando el segundo parámetro a la función procesar() beq $zero,$zero,sig_carac # Siguiente carácter addiu $s0,$s0,1 # Apuntamos al siguiente carácter # # Exit # fin: ori $v0,$zero,10 # Terminamos con exit syscall # # Procesar (habría que poner un nombre más explicativo :) # # Recibe un carácter y el puntero a una cadena # Cuenta cuántos caracteres iguales al pasado consecutivos hay en la cadena # Devuelve en $v0 el número de caracteres iguales # y en $v1 el puntero al primer carácter diferente encontrado procesar: addiu $v0, $zero, $zero # Inicializamos valores de retorno addiu $v1, $zero, $a1 addiu $t1, $zero, $zero # Contador de caracteres iguales consecutivos procesar_iguales: lw $t0, 0($a1) # Cargamos el siguiente carácter a comparar bne $a0, $t0, procesar_noiguales # Si no son iguales, terminamos addiu $a1, $a1, 1 # Apuntamos al siguiente carácter beq $zero, $zero, procesar_iguales addiu $t1, $t1, 1 # Si son iguales, aumentamos el contador en uno procesar_noiguales: add $v0, $v0, $t1 # Ponemos los valores de retorno add $v1, $v1, $t1 # Volvemos de la función jr $ra nop
Esto empieza a ponerse más interesante, no?  Pruébalo a ver si funciona bien. Te aconsejo que pruebes paso a paso, así vas viendo lo que hacen las instrucciones, y ves los valores que hay en los registros, etc... Otra cuestión: eso que has puesto de jal sig_caract dentro de procesar  te va a montar follones como una casa. La función debe terminar con jr siempre.
1004
« en: Martes 2 de Junio de 2009, 13:37 »
Aquí tienes la evolución de los sueldos con los diferentes presidentes colombianos. Seguro que César Gaviria también te cae bien, ya que son del mismo partido ¿cierto?
1005
« en: Martes 2 de Junio de 2009, 12:45 »
No entiendo cuál es el problema ni que aporte esperas
1006
« en: Martes 2 de Junio de 2009, 10:13 »
1007
« en: Martes 2 de Junio de 2009, 10:02 »
Basta con eso ? Bueno, el free() lo haces a lista_temporal+i y el realloc() asigna a lista_temporal... Aunque yo no veo que uses realloc() ... Vale, soy gilipollas...
1008
« en: Lunes 1 de Junio de 2009, 20:36 »
No se si estoy en lo cierto, pero creo que la linea 37 me sobra porque realloc ya libera esa memoria. Estás en lo cierto a medias  Sólo debes liberar el último puntero devuelto por realloc(). http://www.manpagez.com/man/3/realloc/Aunque yo no veo que uses realloc()  ... Saludos
1009
« en: Lunes 1 de Junio de 2009, 20:30 »
 me parece que no has entendido cómo funcionan las llamadas al sistema con syscall... procesar: #Número de syscall ori $v0,$zero,4 syscall li $v0,4 la $a0,msg2 syscall # Volvemos de la función jr $ra nop
Esto es lo que has puesto en la función procesar. Ten en cuenta que los registros $aX se usan para pasar los parámetros a la función, siendo $a0 el primer parámetro, $a1 el segundo, etc... Pues nuestra función procesar recibe un solo parámetro, en $a0 como hemos dicho, y es el carácter (cuando hacemos add $a0,$zero,$t0 copiamos $t0 en $a0, y $t0 tiene el carácter que estamos procesando). Ahora, al hacer: al entrar en la función procesar, ¿qué estás haciendo? La llamada al sistema 4 imprime un cadena de caracteres, cuyo puntero es $a0. Pero en $a0... ¡¡tenemos un carácter (el código ASCII del carácter)!!. Y claro, en esa dirección de memoria no hay nada, por tanto no imprime nada  Y luego imprimes msg2 que es un espacio. Ahora la cuestión es ¿cómo imprimir un solo carácter si la única función que tenemos es para imprimir cadenas? No olvides que las cadenas acaban con un carácter nulo...
1010
« en: Lunes 1 de Junio de 2009, 18:07 »
Puedes leer todas las palabras del fichero y almacenarlas en un array. Esto te vale siempre y cuando el fichero no sea muy gordo. También puedes guardar un array de punteros de fichero, es decir, los desplazamientos dentro del fichero donde se encuentran las palabras. Menos memoria y no hace falta repetir la información (ya que las cadenas las tienes en el fichero)
1011
« en: Lunes 1 de Junio de 2009, 17:49 »
yo usaba la sentencia li entre el registro y el numero, vamos que supongo que es lo mismo. Bueno, li es una pseudoinstrucción, es decir, realmente no existe como tal, sino que se traduce en 2 instrucciones: lui + ori. Si te fijas en el código que ejecuta el SPIM lo verás. De todas formas, no importa mucho, hazlo como mejor te venga, aunque es útil practicar con varias formas porque así se coge más soltura con ensamblador Ahora se supone que en Entrance, tengo el String, no es asi? Sí señor  después del primer syscall que puse. pero para acceder al primer elemento del string, puedo acceder a el inmediatamente o tengo que hacer un desplazamiento asi No, para el primer elemento no debes hacer ningún desplazamiento. Entrance es un puntero al primer carácter de la cadena. Puedes acceder a él así, por ejemplo: # Puntero de cadena a $s0 la $s0,Entrance # Cargamos el primer carácter en $s0 lw $t0,0($s0)
Ojo, si tienes puesto el "delayed load" como opción en el PCSPIM, el registro destino de las instrucciones load (lw, lb, etc...) tardará una instrucción más en cargarse. Con poner un nop después del load lo apañas. Para ir accediendo a todos los caracteres de la cadena, es bastante fácil (supondré que no hay "delayed load", pero sí "delayed jump"): start: la $s0, Entrance sig_carac: lw $t0, 0($s0) beq $t0, $zero, fin # Si es el carácter de final de cadena, ya terminamos nop la procesar,$v0 jal $v0 # Si no, llamamos a la función procesar() add $a0,$zero,$t0 # Pasando el primer parámetro a la función procesar() beq $zero,$zero,sig_carac # Siguiente carácter addiu $s0,$s0,1 # Apuntamos al siguiente carácter fin: nop procesar: [...] # Volvemos de la función jr $ra nop
PD: todo esto lo escribo ahora de pasada, está sin probar, así que si falla algo, dímelo
1012
« en: Lunes 1 de Junio de 2009, 12:49 »
syscall es una llamada al sistema, que por lo que veo, lo que hace depende de la sentencia anterior. Bueno, te aclaro. syscall no hace lo que dice la sentencia anterior. Funciona así: http://www.inf.pucrs.br/~eduardob/disci ... codes.htmlVolviendo a tu código, generalmente se pone la sección de datos depués de la de texto (código), pero bueno, no importa. Para leer una cadena, fíjate en la tabla la llamada número 8. Debes poner en $a0 la dirección del buffer y en $a1 en número de caracteres que se van a leer + 1, algo que no haces, y que vendría a ser: # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entrance # $a1 = tamaño a leer ori $a1,$zero,80 syscall
Ahora ya tienes almacenada la cadena (máximo 80 caracteres) en Entrace. Para imprimirla, es el syscall 4 con la dirección de la cadena en $a0, por tanto: # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,Entrance syscall
Tiene buena pinta no?
1013
« en: Lunes 1 de Junio de 2009, 12:22 »
A ver, primero... ¿Estás usando un simulador de MIPS (PCSPIM ¿?), o cómo? Porque entonces tienes que explicarme qué hace cada syscall, o postear la documentación del manejador de excepciones, que no soy adivino
1014
« en: Lunes 1 de Junio de 2009, 10:42 »
Lógico, en el segundo ejemplo que pones, Reg es un puntero, no es un objeto GRegister. Prueba con std::string value = *Reg["Root"];
A ver qué tal
1015
« en: Lunes 1 de Junio de 2009, 10:03 »
La duda que me queda es qué es más recomendable el memcpy o el strncpy. Depende. memcpy() copia bytes, sin importarle nada más. strncpy() actúa como copia de cadenas de caracteres, esto es, si encuentra un byte nulo en el buffer origen, a partir de ahí ya rellena con ceros el buffer destino hasta completar el tamaño requerido. Usa memcpy() para copiar buffers y strncpy() para cadenas de caracteres. Saludos
1016
« en: Lunes 1 de Junio de 2009, 09:57 »
Explícate un poco mejor, por favor, no he entendido cuál es el problema...
1017
« en: Lunes 1 de Junio de 2009, 09:54 »
Asigna una lista dinámica con los vértices a los que apunta a cada uno de los vértices.
1018
« en: Domingo 31 de Mayo de 2009, 14:41 »
Primero, antes de coger cualquier dominio, fíjate en que tu servidor funciona correctamente. Abre el navegador y pon en la barra de direcciones (no te hace falta saber tu IP  ): localhost (o 127.0.0.1 si quieres ser muy friki  ). Ahí te debería aparecer la página de prueba de Apache. Ojo, esto sólo te sirve desde tu propio PC, no desde otro. Para el dominio, ya te comenta locazopro, y no olvides configurar el hardware como bien dice F_Tanori.
1019
« en: Domingo 31 de Mayo de 2009, 14:36 »
Vaya follón Aer, ¿qué necesitas hacer exactamente? Me parece que con este código te vas por las ramas un poco...
1020
« en: Domingo 31 de Mayo de 2009, 14:33 »
bueno en primer lugar el vector no lo declaras bien vector<int> v(50); debería ser así para darle tamaño 50 y no con corchetes, los corchetes son el operador de acceso a los elementos Falso. Puedes declarar perfectamente un vector de enteros de tamaño 50 así: int v[50]Basándonos en esto, las declaraciones de funciones: void promedio(int v[],int n).
1021
« en: Domingo 31 de Mayo de 2009, 14:31 »
El objetivo de utilizar memoria dinámica es porque las posiciones de v que no se ocupan se pueden borrar?, la asignacion y todol o demás es idéntico que con los vectores estáticos? No, las variables locales se reservan en la pila, la asignación de memoria se reserva del montículo (heap). ahora estoy reservando 100 posiciones para un TAfd, pero las que no se usan, tengo que hacer delete? Si la reservas en lo mismo que usarla y por tanto debes hacer delete. Si no las usas, no las reserves y asi optimizas tu programa. ahora como lo meto como parámetro? tengo que cambiar la notacion ?cual sería la correcta? No hay diferencia con antes.
1022
« en: Sábado 30 de Mayo de 2009, 20:46 »
Una palabra: APACHE
1023
« en: Sábado 30 de Mayo de 2009, 20:45 »
Bueno, yo tampoco pretendo que seas Stallman, pero me refería a esto: if(valor==49) *cadena1=1; if(valor==50) *cadena1=2; if(valor==51) *cadena1=3; if(valor==52) *cadena1=4; if(valor==53) *cadena1=5; if(valor==54) *cadena1=6; if(valor==55) *cadena1=7; if(valor==56) *cadena1=8; if(valor==57) *cadena1=9; if(valor==58) *cadena1=0;
¿No ves que valor - 48 te da el resultado que quieres sin necesidad de tantas comparaciones? Así reduces considerablemente el número de comparaciones. ¿Te fijaste en el código que te puse?
1024
« en: Sábado 30 de Mayo de 2009, 12:59 »
Vamos a ver... Algunos dicen que programar es para Intel A quien te haya dicho eso ya le puedes ir metiendo un buen par de collejas  . Para programar da lo mismo el procesador, incluso un 386 te tiraría bien, porque no creo que vayas a programar un simulador médico o astrofísico... en cuyo caso no te valdría ni uno ni otro y los gráficos se lo dejamos al AMD Para los gráficos necesitas principalmente una buena tarjeta de vídeo. El procesador influye, cierto, pero sobre todo es importante una buena tarjeta gráfica ya que hoy en día los juegos tiran de la GPU. No hay buena tarjeta, no hay buenos juegos, esto es así. Así que ve incluyendo en tu gasto esto, que te puede costar unos 100$ una medianamente buena Memoria Kingston DDR2 2GB 800 Si tienes para gastar un poco más, coge una placa base DDR3 y memoria DDR3, lo agradecerás en los tiempos de carga y la velocidad en general. no tengo mucho de haber oído sobre tarjetas Madre MSI Son buenas, yo tengo una y tira perfectamente. Vamos, tira de tampoco estoy seguro de si me combiene un procesador AMD. La diferencia entre Intel y AMD es que Intel siempre lleva ligeramente la delantera tecnológica, aunque AMD suele tener procesadores que a igual velocidad tienen más rendimiento, aunque eso sí, se calientan bastante más que los de Intel.
1025
« en: Sábado 30 de Mayo de 2009, 12:50 »
Inicializa el valor de m...
Páginas: 1 ... 39 40 [41] 42 43 ... 100
|
|
|