 This time we're going to be building a data path for a load word instruction. So a load word instruction wants to go fetch some data out of memory and store that back into a register. So there's a few things that are going to happen here. I will start with my instruction memory because this will tell me what my base address is, what the offset from that base address is, as well as where the destination is, where I should store my data. Now I will need to get the base address out of a register, so I'll go ahead and add my registers. That will give me a source and it will also give me a destination. Next I need to add the base address to my offset, which means I'll need an ALU and I can pass my base address into my ALU and the offset comes out of the instruction itself. Now I've calculated my target address and I need to go fetch that data out of memory. So I need a data memory now and my ALU contains the location of the piece of data that I want. So I can go over to memory, I can fetch that piece of data and then I can send it back to the registers. But as with the previous two examples, I don't just want to run one load word instruction, I'd like to be able to run lots of them. So I'm going to put in a program counter to index my instruction memory and then we're going to make sure that we can update this program counter. So each time through my loop I'll add four to my program counter and that will allow me to get the next instruction out of instruction memory. Then for each load word instruction I get, I get a base address and an offset. I pass both of those to my ALU to calculate my target address. I use that to go fetch some piece of data out of data memory and then I store that back to the selected register. And that's it.