What exactly is a register?
In the context of assembly language programming, a "register" is a primitive object in the ISA (instruction set architecture), which is what defines the interface between software and hardware. A register stores a single value, and the number of bits determines how many distinct values it can hold: N bits can hold 2N values.

Some instructions will allow you to set or modify the value stored in a register, either directly or through side-effects. Other instructions will use the value stored in the register as either data or addresses. All of this is defined in the instruction descriptions, also part of the ISA.

As a programmer, that's all you "need to know" &mdash; the ISA is specifically intended to hide the physical implementation details. The underlying hardware implementation could use any of a number of different circuit techniques (and many have been used over the years), but thinking of a register as a bank of flip-flops or latches (these two terms are equivalent at this level) is a useful mental model.