Test program (way off)
I wrote a test program using a DAT section in spin. When I ran it the first time I had garbage in all three displays. I changed the way I'm trying to get a memory location to shiftout and extinguished my displays. My first guess at least had bad results instead of none.

Comments
It would actually help if you post code that compiles
SC
It looks like you want to output one or more bytes from an array, MSBPOST. If that's the case, this version of the method seems cleaner and easier to follow.
pub shiftout(pntr, count) | work '' pntr : address of byte(s) to shift out '' count : number of bytes to shift out '' '' assumes E_PIN, C_PIN, and D_PIN are set as outputs outa[E_PIN] := 0 ' enable repeat count work := byte[pntr++] ' get a byte repeat 8 outa[C_PIN] := 1 ' create clock pulse outa[C_PIN] := 0 outa[D_PIN] := work >> 7 ' MSB first work <<= 1 ' next bit ' outa[D_PIN] := work ' LSB first ' work >>= 1 outa[E_PIN] := 1 ' disableBy the way, I did some testing a few months ago and found that"
... is faster than: