как адрес посчитать в команде mov (asm)?
работаю в защищённом режиме.
смотрю на команду 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 и смещение (не учитывая переполнение от этой операции)- адрес своей переменной получаю хороший, а если учесть перенос от сложения - промахиваюсь (как правильно считать адрес ячейки?)
для защищенного режима система абсолютно другая - дескрипторы и т.д и т.п.
Так вот просвяти - на чем пишешь (ASM, ASM + c++ ...) и где (ДОС, Винда (она тоже работает в PM))... и если можно - кусок листинга выложи...
Цитата:
Originally posted by alektrik
на счет dword ptr - указывает на то что первый операнд 32-разрядный, т.е. если б ij были типа char (1 байт), то mov записала в первый операнд (по адресу ij) всё равно 32-разрядное число не смотря на то, что ij 8-разраядное и получилось бы что 3 следующих байта (оносительно адреса ij) тоже были бы заполнены какими-то левыми значениями.
для защищенного режима система абсолютно другая - дескрипторы и т.д и т.п.
Так вот просвяти - на чем пишешь (ASM, ASM + c++ ...) и где (ДОС, Винда (она тоже работает в PM))... и если можно - кусок листинга выложи...
на счет dword ptr - указывает на то что первый операнд 32-разрядный, т.е. если б ij были типа char (1 байт), то mov записала в первый операнд (по адресу ij) всё равно 32-разрядное число не смотря на то, что ij 8-разраядное и получилось бы что 3 следующих байта (оносительно адреса ij) тоже были бы заполнены какими-то левыми значениями.
для защищенного режима система абсолютно другая - дескрипторы и т.д и т.п.
Так вот просвяти - на чем пишешь (ASM, ASM + c++ ...) и где (ДОС, Винда (она тоже работает в PM))... и если можно - кусок листинга выложи...
писал вставочку в .net (с++)
спасибо
разобрался по доке intel.com - складывать нуна со смещением, расширенным знаком