Pointer offset trickery: один регистр — и смещение, и счётчик
Указатели сдвигаем на конец буфера, width уводим в минус — и цикл крутится, пока widthq не доползёт до нуля. Ни cmp, ни отдельного счётчика.
Куда смотрит загрузка — [srcq + widthq]
[
srcq—
+
widthq—
]
=
адрес—
srcq заранее сдвинут за конец буфера, поэтому отрицательный widthq возвращает адрес внутрь. widthq растёт к нулю — окно едет вправо.
Память — буфер src, 32 байта (1000–1031) · src2 = константы 10 (не показан)
CPU — регистры
srcq
указатель src1000
src2q
указатель src22000
widthq
смещение и счётчик32
FLAGS:—
окно чтения [srcq+widthq]
записано обратно (+10)
метка окна