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 the most basic data storage device. Now these are the main differences.

A register file is generally a large collection of registers organised in such a way so that they are used for computations. In a modern processor, all computations are performed between values stored in several registers in a register file.

A hardware register generally refers to registers that store configuration and status information. This could be for the processor or some external hardware I/O device.

A programme register may refer to the programme counter, a special register that stores the memory location of the current instruction being executed by the processor.
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.