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
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.