The MDR is the CPU's "what" register for memory. When memory is read, the word lands in the MDR. When memory is written, the word to store must be in the MDR first. The MAR says where; the MDR holds what.
In Tiny8 the MDR is loaded from one of two places, chosen by a mux:
- from memory, during F2 (an instruction word) and E1 of LOAD, ADD and SUB (an operand);
- from the ACC, during E1 of a STORE, ready to be written in E2.
Notice that the MDR carries both instructions and data. During fetch it holds the instruction word, which step F3 copies into the IR. Then it's free to hold the operand during execute.
Sizing rule: the MDR holds one whole memory word, so its width is the word size. Tiny8's words are 8 bits, so its MDR is 8 bits.