The addressing formula: [base + scale·index + disp]

Every iteration m0 reads sequentially from the pointer, while m1 aims via the full formula. Hit "Step" and watch the address assemble itself.

[base+scale·index+disp]
base — a pointer register (here: srcq) scale — only 1, 2, 4 or 8 · index — a register (here: r1q) disp — a constant known at assembly time (here: 3+mmsize)

    
Address calculator — where m1 reads from
[
base · srcq
+
2 · r1q
+
disp · 3+1619
] =
address
disp 3 + mmsize is arithmetic between constants: the assembler folded it into 19 at build time. The CPU receives a ready-made number.
Memory (RAM) — bytes at addresses 1000–1079
CPU — registers
srcq
base — "where from"
1000
r1q
index and counter
?
after dec
m0empty
m1empty
m0 window — 16 bytes from srcq m1 window — 16 bytes from the computed address srcq — the pointer dimmed — already passed by the pointer