Volatile would be a hint to the compiler to re-read the variable because it could have been changed by the ISR. For example, if your main code was counting 'x' upwards and your ISR changed the value of 'x', it is possible that the compiler might optimize the code and not notice 'x' had been changed elsewhere. Bear in mind that the compiler might hold its value in a temporary variable while working with it. Making it volatile doesn't change its type or operation, it just tells the compiler not to optimize it and if necessary read its value again before carrying out any operation with it.
Brian.