Question: I am having trouble understanding what this does:

```
shr [ebp + 8], 1

```

I get that it shifts the bits to the right, but what the heck is `ebp + 8` doing and/or targeting?

Answer: 
EBP is the stack base pointer. Usually when you see something like `ebp + 8` that would be referring to a local variable or a function argument. Typically arguments have positive offsets from `ebp` and local variables have negative offsets.

I suggest you read Matt Pietrek's MSDN article: [Matt's Just Enough Assembly Language to Get By](http://www.microsoft.com/msj/0298/hood0298.aspx).
It means whatever is at location `EBP+8` (so 8 bytes higher in memory than `EBP`). Typically, `EBP` is a copy of the stack pointer [aka "Frame pointer", pointing at the "current stack frame] at the beginning of the function, but it's just another register, so it may contain ANYTHING. In fact, code relying on `EBP` having a particular value is generally a bad thing. 

When using `EBP` as a frame-pointer, positive offsets means arguments, negative offsets means local variables (as they go on the stack "above" [stack grows towards address zero] the arguments) - you have to also take into account the saving of `EBP` itself at the start of the function [as we need to restore it before returning, so the calling function gets it's `EBP` back to "normal"] and the return address, so `EBP+8` would normally mean the first argument to the function. 

`shr` is a shift right, in this case by `1`, so the same as a divide by 2.