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
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
00003105Generado con MARS 4.0.1
El codigo fuente es:
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
0700292100003105Que corresponde con:
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.
En binario queda tal que
bgezal $t1, saltoY efectivamente no entra porque el registro que se comprueba es menor que 0
0xdeadbef6 es negativo (el bit más significativo está a 1): -559038730
Saludos