Página 6 de 8

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 13:30
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.

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:01
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

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:17
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...

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:34
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.

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:39
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.

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:45
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.

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 14:51
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

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 15:01
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.

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 16:12
por m0skit0
Da igual, es lo mismo ;)

m0skit0 escribió:EDITO: BGEZAL perdón

Re: Dudas sobre el codigo fuente

Publicado: 04 Feb 2011, 17:02
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