2015-05-05 2 views
2

Я просто новичок на языке ассемблера и, вероятно, глупый вопрос. В чем разница между этими двумя линиями?Значение «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; 
} 

И он подтвердил мое предположение, так что прошу вас, ребята, если есть какая-то разница. Зачем нам нужны две инструкции, которые делают то же самое, но имеют разные коды операций по длине.

+1

'ds' - это сегмент по умолчанию в этом случае, поэтому действительно нет разницы, кроме дополнительного префиксного байта. Кроме того, в типичной ОС сегменты 'cs',' ds', 'es' и' ss' ссылаются на одну и ту же память. – Jester

+0

@ Jester просто интересно, что не типичная ОС с сегментами в разной памяти. – ST3

+0

Например, реальный режим, такой как DOS (если вы все еще можете назвать эту ОС). Кроме того, сегменты 'fs' и/или' gs' используются для специальных целей, таких как локальное хранилище потоков, и обычно они помещаются со смещением. – Jester

ответ

4

3E байт в первой команде является переопределение префикса DS сегмента (см «2.1.1 Инструкции префиксы» в руководстве корпорации Intel Software разработчика).

Группа 2
- Сегмент переопределения префиксов:
• 3EH-DS префикс замены сегмента (использование с любой командой перехода зарезервирован)

В данном случае это излишним, поскольку ds является сегмент по умолчанию для большинства обращений к памяти. Кроме того, если у вас есть плоское 32-битное пространство памяти, вы, как правило, никогда явно не указываете регистр сегментов, так как они настроены так, чтобы указывать на одну и ту же память.

+0

Огромное спасибо. Я думал, что-то подобное, но хорошо иметь подтверждение. – ST3

2

1) = DS ДАННЫХ Сегмент

2) Два различных опкоды, потому что два разных режима "адресация". 3) Это два разных типа x86 er, основанных так называемые «режимы адресации». Очень простой материал в ас.

а) https://cs.nyu.edu/courses/fall10/V22.0201-002/addressing_modes.pdf б) http://www.ic.unicamp.br/~celio/mc404s2-03/addr_modes/intel_addr.html

Смежные вопросы