Es correcto. SHL y SHR desplazan los bits, pero inyectando ceros. No hacen rotación. Efectivamente, el resultado de desplazar los bits de un byte 8 lugares, ya sea a izquierda o a derecha, será 0.
Si quieres rotar a izquierda n bits:
a := (a shl n) or (a shr (8-n));
Si fuera un solo bit, quedaría:
a := (a shl 1) or (a shr 7);
Si quieres rotar a derecha n bits:
a := (a shr n) or (a shl (8-n));
Si fuera un solo bit, quedaría:
a := (a shr 1) or (a shl 7);
Espero que te sirva.
Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php