Jag är inte helt säker på min sak, men det här är vad jag antar efter några minuters kikande i Intels manualer:
Eftersom R/M-delen i en ModR/M-byte endast kan innehålla 8 olika värden och det finns åtta register man kan använda men samtidigt måste R/M kunna visa att en SIB-byte kommer efter (då MOD != 11B), kan man inte använda [esp] i R/M utan bara i en SIB-byte. Vill man då använda [esp] utan något index finns bara möjligheten att använda en SIB-byte med Index 100B (None).
Det är uppenbart att det blir en del redundans, eftersom alla instruktioner med ModR/M-byte som inte vill använda [esp] i R/M kan uttryckas på två olika sätt. (ebp är dock ett specialfall)
T.ex. "mov eax, [eax]" kan uttryckas som både
0x8b (mov r32,r/m32) 0x00 (REG = eax, MOD = 00B, R/M = eax)
och
0x8b (mov r32,r/m32) 0x04 (REG = eax, MOD = 00B, R/M = SIB) 0x20 (SS = 00B, Index = None, Base = eax)
Medan "mov eax, [esp]" bara kan uttryckas som
0x8b (mov r32,r/m32) 0x04 (REG = eax, MOD = 00B, R/M = SIB) 0x24 (SS = 00B, Index = None, Base = esp)
Eftersom Index i SIB har ett värde för att uttrycka att inget index ska användas är det även där ett register som försvinner; esp igen. Dock är det nog ganska ovanligt att vilja använda instruktioner som "mov eax, [ecx+esp*4]", där esp är index. Men instruktioner där [esp] används som R/M är ganska vanliga vid manipulering av stacken.
(Jag kan ha varit överdrivet utförlig i hopp om att även de som inte kan detaljerna i uppbyggnaden av x86-instruktioner kan lära sig något)