When Arduino catch interrupt, is noInterrupts() called?
Looking at http://code.google.com/p/arduino/source/browse/trunk/hardware/arduino/cores/arduino/WInterrupts.c#155 you can see that your interrupt handling function is executed from within the interrupt handler's context.

Only one interrupt handler can be running at a time, so you can be sure that no interrupts will occur while your blink() routine is running. You do not need to call noInterrupts() or interrupts() from within your handler function.

Because your function will run in interrupt context, it is important to return as quickly as you can to allow other interrupts (and foreground) code to continue executing.

Any variable used in your interrupt handler, which is also used by non-interrupt code should be volatile. This tells the compiler that it must re-read the memory location on every access and not cache it. Without volatile, an interrupt handler might change the variable between instructions leaving foreground code with an invalid cached value.