Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.201.209] |
|
Сообщ.
#1
,
|
|
|
Подскажите чем отличается(пример кода) местонахождение операндов в памяти команд(в командах) и в памяти данных? И еще один вопрос, можно ли объявлять переменные в сегменте кода?
|
Сообщ.
#2
,
|
|
|
команды могут быть и в секции/сегменте данных, но для этого эти странцы должны иметь атттрибут PAGE_EXECUTE (см. ф-цию VirtualProtect), в сегменте кода переменную можно разместить очень просто, как два пальца...
|
Сообщ.
#3
,
|
|
|
а в в чем различие когда объявляем переменные в сегменте кода и в сегменте данных?
|
Сообщ.
#4
,
|
|
|
нивчем нет различия, синтакис ассемблера такой же
|
Сообщ.
#5
,
|
|
|
т е на структуре программы это никак не отразится?
|
Сообщ.
#6
,
|
|
|
никак. только не забывай страницам с кодом давать атрибуты ERW (ВыполнениеЧтениеЗапись), чтобы можно было обращаться к твоим переменным
|
Сообщ.
#7
,
|
|
|
а если нужно получить доступ к переменным в сегменте кода и в сегменте данных, т е переменные объявлены и там и там, то будет
.model small;определяет модель памяти, используемую программой .data;начало сегмента данных mass db 4,7,2,8,5;массив .code;начало сегмента кода x db 6;переменная begin: mov ax,@data;заносим адрес сегмента данных в регистр ax mov ds,ax; ax в ds mov ax,@code;заносим адрес сегмента кода в регистр ax mov cs,ax;ax в cs вот эти последние 2 строчки не знаю, подскажете? |
Сообщ.
#8
,
|
|
|
перед командой используй префикс селектора сегмента (кажется так!) - cs: или ds:
|
Сообщ.
#9
,
|
|
|
непонял))))
|
Сообщ.
#10
,
|
|
|
Цитата oop @ mov ax,@code;заносим адрес сегмента кода в регистр ax mov cs,ax;ax в cs Это бред и даже компилироваться не должно. Гугли ASSUME. |
Сообщ.
#11
,
|
|
|
oop
Прочти "СЕГМЕНТИРОВАНИЕ АДРЕСОВ" В КНИЖКЕ!!! Добавлено Например, mov ax, es:x |
Сообщ.
#12
,
|
|
|
Цитата oop @ Подскажите чем отличается(пример кода) местонахождение операндов в памяти команд(в командах) и в памяти данных? Вопрос поставлен некорректно. Единственное, могу сказать, что в современных ОС каждая секция имеет атрибуты "исполняемый", "чтение", "запись" и др. |
Сообщ.
#13
,
|
|
|
Цитата oop @ а в в чем различие когда объявляем переменные в сегменте кода и в сегменте данных? Если тебе нужна память для переменных, то нужно пользоваться стеком, т.е. пишеш sub esp,32 в конце кода add esp,32 и пользуешся ими, например mov ax,[esp] или mov eax,[esp+4], но если сделаеш push eax, то mov eax,[esp+4] станет mov eax,[esp+8]. Так делают языки высокого уровня для переменных в функции. Константы можно сделать и db 'Текст',0 между кодом, но лучше код с данными не перемешивать. |