I have noticed that the Kiel compiler doesn't produce the correct interrupt vector if 8051 interrupt numbers are used. For example for external interrupt 0 (IE0), the interrupt number has to be 0, instead of 1 to produce a jump at location 1. Example:
void edge1 (void) interrupt 0{ /*produces correct code
while
void edge1 (void) interrupt 1{ /*produces wrong code
This is the case with all the interrupts I have used. My questions is what do you have to do to produce a reset vector? Reset is interrupt number 0 in 8051 numbering. Using -1 or 255 both produce a compile error.
"Keil assign numbers to the interrupt vectors which happen to be the priority level (as enumerated in the above table) minus one."
Pure coincidence?
More directly, Keil assign numbers to the interrupt vectors which happen to be the same as the enable bit positions in the IE register.
Probably the true rationale between the so-called "interrupt numbers" in Keil's C51 is that they are the position (index) of the vector within the vector table.
Hence the formula quoted by Erik.