Interpretation of svc.n #imm instruction in ARM

226 Views Asked by At

I am not able to figure out what does different imm value after svc mean. e.g.

svc.n #c6
svc.n #ac

Can anyone please help?

1

There are 1 best solutions below

5
cooperised On BEST ANSWER

The immediate does nothing at all. It's just encoded into the instruction, so if you want it you can get it.

So, if you only have a single SVC handler, the immediate is arbitrary. If you have multiple handlers and need to invoke the right one, you need to find the instruction that generated the SVC IRQ and dismantle it to find the immediate.

For example, on ARMv7m:

SVC_Handler
    ; Link register contains the 'exit handler mode' code
    ; Bit 2 tells whether the MSP or PSP was in use
    TST     lr, #4
    MRSEQ   r0, MSP
    MRSNE   r0, PSP
    ; r0 now contains the SP that was in use
    ; Return address is on the stack: load it into r1
    LDR     r1, [r0, #24]
    ; Use the return address to find the SVC instruction
    ; SVC instruction contains an 8-bit code
    LDRB    r1, [r1, #-2]
    ; Immediate from the SVC instruction is now in r1 to do whatever with

You could then use the immediate to index into a jump table, for example.