I can't imagine the amount of time you are wasting of clicking enter on messages from ShowMessage, do yourself a favor and use some logging method.
The file you are loading, where did it come from ?
What is its format ?
If it is yours or not, check data aligning for that TInstruction record, you might need to declare that record as packed, just make sure it is the same size with the same padding.
You have potential problem with "p" you are starting it with -1 then using p, p+1 so this an
AV waiting for you when things will start work and you need more than 4.
Not sure about your question to be honest, but sizeof(Instructions[p]) should never change and it is constant, so double checking it with p+1 is useless.