Команды с явными операндами в памяти должны содержать указание на сегмент, содержащий операнд и смещение операнда относительно начала сегмента. Сегменты указываются при помощи префикса замены сегмента (байта, который помещается перед командой). Если сегмент не указывается явно, он выбирается автоматически согласно простому правилу. Смещение операнда в сегменте указывается одним из следующих способов:
Большинство команд, которые обращаются к памяти, содержат байт для указания метода адресации операнда. Байт, который называется modR/M, помещается после кода операции и указывает, где располагается операнд: в памяти или в регистре. Если операнд находится в памяти, его адрес получается исходя из содержимого сегментного регистра и следующих величин: регистра базы, регистра индекса, масштабирования и смещения. При использовании индексного регистра, байт modR/M следует за байтом, кодирующим индексный регистр и масштабирование. Такой способ адресации является наиболее гибким.
Некоторые команды используют неявные режимы адресации: Команда MOV, использующая в качестве операнда-источника или операнда назначения регистр AL или EAX, может использовать для адресации памяти двойное слово, закодированное в команде. Эта специальная форма команды MOV не позволяет использовать регистр базы, индексный регистр и масштабирование. Такая форма команды на один байт короче, чем при использовании других регистров общего назначения. Операции обработки строк используют для адресации памяти сегментный регистр DS и регистр ESI (команды MOVS, CMPS, OUTS, LODS и SCAS) или сегментный регистр ES и регистр EDI (команды MOVS, CMPS, INS и STOS). Операции работы со стеком используют для адресации памяти сегментный регистр SS и регистр ESP (команды, прерывания и исключения PUSH, POP, PUSHA, PUSHAD, POPA, POPAD, PUSHF, PUSHFD, POPF, POPFD, CALL, RET, IRET и IRETD).