Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как адрес посчитать в команде mov (asm)?

378
13 февраля 2006 года
KurL
171 / / 01.08.2005
я смотрю на код команды. смотрю по справочнику Юрова - там вроде всё нормально написано.

работаю в защищённом режиме.

смотрю на команду mov (пишу в память константу) - разбираю её код.


int ij;
ij = 2;
00401007 C7 45 EC 02 00 00 00 mov dword ptr [ij],2

(зачем, кстати dword ptr? без него вроде также всё)

все хорошо, но про адрес в памяти чуть не соображу. в книжке юрова (по коду команды) эффективный адрес приёмника считается "смещ_8[ebp]"
- на счёт защищённого режима не уточнено (для него так же считать?)

адрес своей ячейки я б считал так то, что в ebp + ЕС (то, что в команде)

ebp - 4 байта, а смещение в команде- 1 байт
так вот, если складывать только последний байт регистра ebp и смещение (не учитывая переполнение от этой операции)- адрес своей переменной получаю хороший, а если учесть перенос от сложения - промахиваюсь (как правильно считать адрес ячейки?)
1.7K
21 февраля 2006 года
alektrik
140 / / 16.01.2006
на счет dword ptr - указывает на то что первый операнд 32-разрядный, т.е. если б ij были типа char (1 байт), то mov записала в первый операнд (по адресу ij) всё равно 32-разрядное число не смотря на то, что ij 8-разраядное и получилось бы что 3 следующих байта (оносительно адреса ij) тоже были бы заполнены какими-то левыми значениями.

для защищенного режима система абсолютно другая - дескрипторы и т.д и т.п.

Так вот просвяти - на чем пишешь (ASM, ASM + c++ ...) и где (ДОС, Винда (она тоже работает в PM))... и если можно - кусок листинга выложи...
378
22 февраля 2006 года
KurL
171 / / 01.08.2005
Цитата:
Originally posted by alektrik
на счет dword ptr - указывает на то что первый операнд 32-разрядный, т.е. если б ij были типа char (1 байт), то mov записала в первый операнд (по адресу ij) всё равно 32-разрядное число не смотря на то, что ij 8-разраядное и получилось бы что 3 следующих байта (оносительно адреса ij) тоже были бы заполнены какими-то левыми значениями.

для защищенного режима система абсолютно другая - дескрипторы и т.д и т.п.

Так вот просвяти - на чем пишешь (ASM, ASM + c++ ...) и где (ДОС, Винда (она тоже работает в PM))... и если можно - кусок листинга выложи...



писал вставочку в .net (с++)
спасибо
разобрался по доке intel.com - складывать нуна со смещением, расширенным знаком

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог