Data registers - can be assigned to a variety of functions by the programmer. They can be used with any machine instruction that performs operations on data. Address registers - contain main memory addresses of data and instructions or they contain a portion of the address that is used in the calculation of the complete addresses.