Veamos, que un registro tenga una dirección no quiere decir en absoluto que este situado fisicamente junto al elemento que tiene la direccion precedente o a la posterior, o que tengan la misma estructura fisica, de hecho en el mismo data sheet puedes ver la representación de los diferentes puertos y como incluso dentro de un mismo puerto hay diferencias "fisicas".
En la representación por bloques se agrupan por direccion como si se tratara de una memoria RAM clasica, pero eso no es real, funciona asi solo desde el punto de vista de manejar los datos con instrucciones que direccionan (tipo mov, goto,...), de hecho si tubiese la estructura de una memoria RAM real no funcionaria puesto que hay registros cuyo valor se modifica sin depender en absoluto de que la CPU les este direcionando, como por ejemplo STATUS, TMR0, INTCON, y los puertos.
La representación en bloque es simplemente simbólica, es más real una serie de registros individuales junto a otros organizados con una estructura RAM y todos ellos con direcciones más o menos consecutivas, la diferencia entre unos y otros es que los individuales, de forma adicional a por instruciones (con la CPU direcionandolos y actuando sobre ellos), pueden ser afectados por señales propias (conexiones directas al exterior, TMROUT, flags aritméticos,...) sin necesidad de que la CPU los este direccionando en ese momento, pudiendo por tanto modificar su valor mientras la CPU apunta a otras direcciones, de hecho este modo de funcionar es lo que permite algo tan importante como las interrupciones.