Merge pull request #472 from MathyFurret/patch-1
Disassembler: Fix LDR/STR immediate offset
This commit is contained in:
commit
2fb06cf4cc
|
@ -2118,17 +2118,17 @@ return txt;}
|
|||
static char * OP_LDR_P_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
if(REG_POS(i,16) == 15)
|
||||
sprintf(txt, "LDR%s %s, [%08X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], (adr + 8 + (int)(i&0x7FF)));
|
||||
sprintf(txt, "LDR%s %s, [%08X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], (adr + 8 + (int)(i&0xFFF)));
|
||||
else
|
||||
sprintf(txt, "LDR%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_M_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
if(REG_POS(i,16) == 15)
|
||||
sprintf(txt, "LDR%s %s, [%08X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], (adr + 8 - (int)(i&0x7FF)));
|
||||
sprintf(txt, "LDR%s %s, [%08X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], (adr + 8 - (int)(i&0xFFF)));
|
||||
else
|
||||
sprintf(txt, "LDR%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDREX(u32 adr, u32 i, char * txt)
|
||||
|
@ -2178,12 +2178,12 @@ return txt;}
|
|||
|
||||
static char * OP_LDR_P_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDR%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_M_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDR%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_P_LSL_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2228,17 +2228,17 @@ return txt;}
|
|||
|
||||
static char * OP_LDR_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_P_IMM_OFF_POSTIND2(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDR%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDR%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDR_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2285,12 +2285,12 @@ return txt;}
|
|||
|
||||
static char * OP_LDRB_P_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_M_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_P_LSL_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
|
@ -2335,12 +2335,12 @@ return txt;}
|
|||
|
||||
static char * OP_LDRB_P_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_M_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_P_LSL_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2385,12 +2385,12 @@ return txt;}
|
|||
|
||||
static char * OP_LDRB_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRB%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRB%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRB_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2437,12 +2437,12 @@ return txt;}
|
|||
|
||||
static char * OP_STR_P_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STR_M_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STREX(u32 adr, u32 i, char * txt)
|
||||
|
@ -2492,12 +2492,12 @@ return txt;}
|
|||
|
||||
static char * OP_STR_P_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STR_M_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STR_P_LSL_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2542,12 +2542,12 @@ return txt;}
|
|||
|
||||
static char * OP_STR_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STR_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STR%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STR%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STR_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2594,12 +2594,12 @@ return txt;}
|
|||
|
||||
static char * OP_STRB_P_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s, #%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_M_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s, -#%X]", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_P_LSL_IMM_OFF(u32 adr, u32 i, char * txt)
|
||||
|
@ -2644,12 +2644,12 @@ return txt;}
|
|||
|
||||
static char * OP_STRB_P_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s, #%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_M_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s, -#%X]!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_P_LSL_IMM_OFF_PREIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2694,12 +2694,12 @@ return txt;}
|
|||
|
||||
static char * OP_STRB_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRB%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRB%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRB_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2747,12 +2747,12 @@ return txt;}
|
|||
#if 0
|
||||
static char * OP_LDRBT_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRBT%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRBT%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRBT_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "LDRBT%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "LDRBT%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_LDRBT_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
@ -2799,12 +2799,12 @@ return txt;}
|
|||
|
||||
static char * OP_STRBT_P_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRBT%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRBT%s %s, [%s], #%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRBT_M_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
{
|
||||
sprintf(txt, "STRBT%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0x7FF));
|
||||
sprintf(txt, "STRBT%s %s, [%s], -#%X!", Condition[CONDITION(i)], Registre[REG_POS(i,12)], Registre[REG_POS(i,16)], (int)(i&0xFFF));
|
||||
return txt;}
|
||||
|
||||
static char * OP_STRBT_P_LSL_IMM_OFF_POSTIND(u32 adr, u32 i, char * txt)
|
||||
|
|
Loading…
Reference in New Issue