Dudas sobre el codigo fuente

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

arisma escribió:Quiero decir que si regGenericos[regRi[0].tipoI.rS] > 0 no se envuelve entre paréntesis nunca entra

Pues será porque el rS es <= 0 :roll: No veo ninguna razón para que falle eso. ¿Cómo lo estás probando? ¿Qué instrucción BGTZ exactamente le estás pasando?

arisma escribió:NotWordValue comprueba si los bits 63..32 son iguales o no al bit 31. Creo que intenta descubrir si la palabra de 64bit contiene una de 32bit correcta.

No nos importa, no trabajamos con registros de 64 bits.

Saludos.
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Dudas sobre el codigo fuente

Mensaje por arisma »

Intento ver con qué valores en el fichero, entra en esa instrucción.

Lo compruebo depurando desde Eclipse Helios(OpenSuse 11.3). Y creo que el valor para rS era 24.

EDITO
Cómo estoy en ello y por no dejarlo pasar mucho, mientras probaba he encontrado la siguiente->

Código: Seleccionar todo

Name : regRi
   Details:{{valor = 118558993, generico = {opcode = 1}, tipoR = {func = 17, sa = 4, rD = 2, rT = 17, rS = 24},
tipoI = {imm = 4369, rT = 17, rS = 24},
tipoJ = {off = 51450129, tipo = 1}, tipoCP = {func = 17, rD = 4, rS = 2, rT = 17, fmt = 24, cpN = 1}}, {valor = 0, generico = {opcode = 0}, tipoR = {func = 0, sa = 0, rD = 0, rT = 0, rS = 0}, tipoI = {imm = 0, rT = 0, rS = 0}, tipoJ = {off = 0, tipo = 0}, tipoCP = {func = 0, rD = 0, rS = 0, rT = 0, fmt = 0, cpN = 0}}}
   Default:0xbfffe878
   Decimal:3221219448
   Hex:0xbfffe878
   Binary:10111111111111111110100001111000
   Octal:027777764170


Para->

Código: Seleccionar todo

case INST_RIMM_BGEZAL:
         if ((signed)regGenericos[regRi[0].tipoI.rS] >= 0)
         {
            regGenericos[31] = regPc;
            regPc += ((signed)regRi[0].tipoI.imm<<2);
         }
         break;


El fichero preipl.bin contiene 11111107
Última edición por arisma el 04 Feb 2011, 14:25, editado 1 vez en total.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

Vamos a ver... Primero, ¿con qué estás generando el código de preipl.bin? No me digas que pones valores al azar... Además, ¿qué valor tiene rS? Para generar código, usa el MARS y exporta la sección de código a un fichero.

EDITO: por favor, intenta hacer capturas más pequeñas...
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Dudas sobre el codigo fuente

Mensaje por arisma »

Perdón.

Para

Código: Seleccionar todo

      case INST_RIMM_BGEZAL:
         if ((signed)regGenericos[regRi[0].tipoI.rS] >= 0)
         {
            regGenericos[31] = regPc;
            regPc += ((signed)regRi[0].tipoI.imm<<2);
         }
         break;


El valor del fichero es 00003105
Generado con MARS 4.0.1
El codigo fuente es:

Código: Seleccionar todo

      .data
      .text
   bgezal $t1, salto
salto:


Lo sé t1 debe tener valor 0, lo que ocurre es que luego rS verás que tiene(creo recordar) 24.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

Hm, esa instrucción no corresponde a BGTZAL. El opcode de BGTZAL debe ser 1 (REGIMM).

EDITO: BGEZAL perdón

EDITO2: de todas formas, las Branch and Link no son muy comunes. Yo me centraría primero en las instrucciones comunes (probrando varios registros y valores) antes de probar instrucciones raras.
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Dudas sobre el codigo fuente

Mensaje por arisma »

preipl.bin
0700292100003105

Que corresponde con:

Código: Seleccionar todo

      .data
      .text
   add $t1,$t1,7
   bgezal $t1, salto
salto:


Addi parece que lo ejecuta correcto, pero bgezal vuelve a saltar.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

Sigo en mis trece:

m0skit0 escribió:esa instrucción no corresponde a BGTZAL. El opcode de BGTZAL debe ser 1 (REGIMM).

Ahora lo pruebo en casa.

Saludos
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: Dudas sobre el codigo fuente

Mensaje por arisma »

m0skit0 escribió:Sigo en mis trece:

m0skit0 escribió:esa instrucción no corresponde a BGTZAL. El opcode de BGTZAL debe ser 1 (REGIMM).

Ahora lo pruebo en casa.

Saludos


Pero si pone bgezal xD.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

Da igual, es lo mismo ;)

m0skit0 escribió:EDITO: BGEZAL perdón
Imagen

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Dudas sobre el codigo fuente

Mensaje por m0skit0 »

Ya lo he probado. Funciona correctamente.

Código: Seleccionar todo

add $t1,$t1,7
bgezal $t1, salto

salto:
add $t2, $t1, $zero

En binario queda tal que

Imagen

bgezal $t1, salto

Imagen

Y efectivamente no entra porque el registro que se comprueba es menor que 0

Imagen

0xdeadbef6 es negativo (el bit más significativo está a 1): -559038730

Saludos
Imagen

Responder