Я просто новичок на языке ассемблера и, вероятно, глупый вопрос. В чем разница между этими двумя линиями?Значение «ds:» в языке ассемблера
3e 8b 06 mov eax,DWORD PTR ds:[esi]
8b 06 mov eax,DWORD PTR [esi]
На мой взгляд, это то же самое, я тоже попробовал эту программу:
int main()
{
__asm
{
mov esi, ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR ds:[esi]
}
return 0;
}
И он подтвердил мое предположение, так что прошу вас, ребята, если есть какая-то разница. Зачем нам нужны две инструкции, которые делают то же самое, но имеют разные коды операций по длине.
'ds' - это сегмент по умолчанию в этом случае, поэтому действительно нет разницы, кроме дополнительного префиксного байта. Кроме того, в типичной ОС сегменты 'cs',' ds', 'es' и' ss' ссылаются на одну и ту же память. – Jester
@ Jester просто интересно, что не типичная ОС с сегментами в разной памяти. – ST3
Например, реальный режим, такой как DOS (если вы все еще можете назвать эту ОС). Кроме того, сегменты 'fs' и/или' gs' используются для специальных целей, таких как локальное хранилище потоков, и обычно они помещаются со смещением. – Jester