[Ebp * 2] faz referência ao segmento DS ou SS?
O IDM diz que a operação da memória usa o segmento SS se o EBP for usado como registro base. Como um resultado,[ebp + esi]
e[esi + ebp]
faz referência aos segmentos SS e DS, respectivamente. Veja o documento do NASM:3.3 Endereço Efetivo.
Na mesma seção acima, o NASM mencionou como gerar um código de máquina mais curto, substituindo[eax*2]
com[eax+eax]
.
No entanto, o NASM também gera[ebp + ebp]
para[ebp*2]
(ou seja, sem registro de base).
Eu suspeito[ebp+ebp]
referencia o segmento SS e[ebp*2]
referencia o segmento DS.
Eu fiz a NASM esta pergunta. Eles pensam[ebp*2]
e[ebp+ebp]
são os mesmos, mas não faz sentido para mim. Obviamente,[ebp+ebp]
(ebp como registro base) faz referência ao segmento SS. Se são iguais,[ebp*2
também deve fazer referência a SS. Isso significa que o SS é referenciado desde queebp
é o registro base ou de índice, o que significa, por sua vez,[ebp + esi]
e[esi + ebp]
faça referência aos segmentos SS; portanto, eles devem ser os mesmos.
Alguém sabe qual segmento[ebp*2]
usa?