| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| спасибо все за участие, вопрос решен |