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 srcqm1 window — 16 bytes from the computed addresssrcq — the pointerdimmed — already passed by the pointer