This invention is a method of improving a data retention ability of a
semiconductor memory device having a plurality of nonvolatile memory
cells storing a plurality of memory states. The method includes the steps
of: (a) selecting the nonvolatile memory cells in a first memory group
each of which accumulates charges higher in level than a first threshold
from the plurality of nonvolatile memory cells; (b) extracting the
nonvolatile memory cells in a first sub-group each of which accumulates
the charges lower in level than a second threshold from the nonvolatile
memory cells in the first memory group; and (c) programming the
nonvolatile memory cells in the first sub-group until each of the
nonvolatile memory cells accumulates the charges higher in level than the
second threshold.