Question: I've heard the terminologies: register, hardware register, program register,register file.

What's the difference between all these? And in assebmly, what is the type of the EAX register? Program register?

Answer: 
A register is a storage area inside the CPU. Here are some definitions:

* A register file is an array of registers - see <http://en.wikipedia.org/wiki/Register_file> for a full description.
* The eax register is the accumulator register of the Intel x86 family of CPUs - it's the place where integer maths gets done.
* The program register (I think you mean program counter) is a special purpose register which contains the address of the next machine code instruction to be executed
In relation to the question, there are two general types of registers that you should consider: 

* program registers
* hardware registers

The hardware registers are clocked (updated on clock ticks) and are used in the **physical** design of processor circuitry. 

The program registers are random-access memory and are held in a register file located in the CPU. Assembly/machine code instructions access these registers through names like %eax, %esp, %rdi, %edi, etc.