Сегменты сборки в кодах операций

Я заметил, что в ассемблере в кодах операций используются сегменты.

Пример:

MOV DWORD PTR SS:[EBP-30],30

Я думаю, что «PTR SS:» используется для указания того, что EBP-30 исходит из стека? (SS: сегмент стека) Я прав или совершенно неправ? :) И не могли бы вы рассказать мне разницу между приведенным выше примером и

MOV DWORD PTR[EBP-30],30

А как насчет DS (сегмента данных), используемого в кодах операций?


person user1365914    schedule 30.05.2012    source источник


Ответы (2)


MOV DWORD PTR SS:[EBP-30],30

Здесь есть два отдельных модификатора, DWORD PTR и SS:.

Первый говорит нам, что мы хотим сохранить слово по указанному адресу. Это необходимо, когда ассемблер не может отличить это от операндов инструкции. Здесь 30 также может быть байтом для хранения.

SS: - это префикс сегмента, говорящий о том, что мы хотим использовать адрес относительно сегмента стека. В этом случае это не обязательно, потому что это значение по умолчанию при использовании регистров ESP или EBP. Так что вторая версия инструкции идентична первой.

Если бы вы использовали EBX вместо EBP, разница была бы!

person Bo Persson    schedule 31.05.2012
comment
Может ли кто-нибудь более подробно рассказать о том, какая разница EBX, как упомянуто в последнем предложении Бо? - person MightyInSpirit; 21.01.2021

  • SS - сегмент стека
  • DS - это сегмент данных
  • ПТР - указатель. Это адрес.

Когда ты делаешь

mov ax, some_variable

вы действительно заменяете эту форму "mov ax, ds:[pointer_to_variable]"

В случае SS вы получаете доступ к значению не из DS, а из стека :). Думайте о сегментных регистрах как о банках. Данные поступают из DS, данные стека из SS, данные кода из CS, дополнительный сегмент - это ES.

person lukas.pukenis    schedule 30.05.2012
comment
Спасибо, любая ссылка / ключевое слово, по которым я могу найти дополнительную информацию? - person user1365914; 31.05.2012
comment
Я не знаю ресурсов .. Я просто читал все, что мог найти в гугле, пока не понял :) - person lukas.pukenis; 31.05.2012
comment
@ user1365914: Загрузите руководства для процессоров Intel или AMD. Они объясняют все инструкции, сегменты, префиксы, все. За исключением, конечно, синтаксиса используемого ассемблера (MASM, TASM и т. Д.). Для этого вам нужно обратиться к документации вашего ассемблера. - person Alexey Frunze; 31.05.2012
comment
Спасибо за предложение, я скачаю эти два руководства как можно скорее. - person user1365914; 01.06.2012
comment
Насколько я помню, Intel бесплатно присылает печатные экземпляры своих книг. Я получил 5 за раз (3 инструкции по эксплуатации, базовая архитектура и руководство по оптимизации). Все книги были в высоту 17 см! - person lukas.pukenis; 01.06.2012