Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для Linux/Unix > адресация |
Автор: MAKCim 22.11.2006, 10:30 | ||||||||||||||
проясните ситуацию есть простой код
и его asm представление
что за адрес записывается в %eax в инструкции?
вроде как эффективный, т. е смещение внутри стека но если так, каким тогда образом отрабатывает инструкция?
если в %eax смещение, то какой тогда сегментный регистр используется для идентификации дескриптора в LDT? т. к программа естественно работает, получается что %ss, что не логично потому как если изменить программу таким образом
то меняются лишь 2 строчки вместо
и получаем все то же косвенное обращение через %eax но в данном случае уже к переменной в сегменте данных отсюда делаем вывод, что в leal в первом варианте и в movl во втором берется не смещение, а линейный адрес (база в соответствующем дескрипторе + смещение). Мои рассуждения верны? |
Автор: MAKCim 22.11.2006, 23:17 |
никто не знает? |
Автор: dumb 23.11.2006, 14:50 |
тонкости уже выпали из головы, но одно можно сказать точно: никого не интересует, и, мало того, в eax просто не влезет ![]() |
Автор: MAKCim 23.11.2006, 15:50 | ||
что значит не влезет? 32-ую адресацию никто не отменял |
Автор: MAKCim 23.11.2006, 16:34 | ||
по совету SergeCpp посмотрел через gdb регистры, никакого линейного адреса и не видно т. е в
берется значение EBP-12, т. е смещение ничего не понимаю ![]() ps. вопрос принципиальный |
Автор: SergeCpp 23.11.2006, 17:45 |
![]() http://www-128.ibm.com/developerworks/linux/library/l-memmod/ |
Автор: MAKCim 23.11.2006, 18:23 |
спасибо все за участие, вопрос решен |