docs: def chunks(self, size=32, alignment=1):
          """Return chunks of the data aligned as given by `alignment`. `size`
          must be a multiple of `alignment`. Each chunk is returned as a
          named two-tuple of its address and data.
  
          """
  
          if (size % alignment) != 0:
              raise Error(
                  'size {} is not a multiple of alignment {}'.format(
                      size,
                      alignment))
  
          address = self.address
          data = self.data
  
          # First chunk may be shorter than `size` due to alignment.
          chunk_offset = (address % alignment)
  
          if chunk_offset != 0:
              first_chunk_size = (alignment - chunk_offset)
              yield self._Chunk(address, data[:first_chunk_size])
              address += (first_chunk_size // self._word_size_bytes)
              data = data[first_chunk_size:]
          else:
              first_chunk_size = 0
  
          for offset in range(0, len(data), size):
              yield self._Chunk(address + offset // self._word_size_bytes,
                                data[offset:offset + size])