На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Местонахождение операндов , операнды
    Подскажите чем отличается(пример кода) местонахождение операндов в памяти команд(в командах) и в памяти данных? И еще один вопрос, можно ли объявлять переменные в сегменте кода?
      команды могут быть и в секции/сегменте данных, но для этого эти странцы должны иметь атттрибут PAGE_EXECUTE (см. ф-цию VirtualProtect), в сегменте кода переменную можно разместить очень просто, как два пальца... ;)
        а в в чем различие когда объявляем переменные в сегменте кода и в сегменте данных?
          нивчем нет различия, синтакис ассемблера такой же
            т е на структуре программы это никак не отразится?
              никак. только не забывай страницам с кодом давать атрибуты ERW (ВыполнениеЧтениеЗапись), чтобы можно было обращаться к твоим переменным
                а если нужно получить доступ к переменным в сегменте кода и в сегменте данных, т е переменные объявлены и там и там, то будет

                .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 строчки не знаю, подскажете?
                  перед командой используй префикс селектора сегмента (кажется так!) - cs: или ds:
                  Сообщение отредактировано: Бублик -
                    непонял))))
                      Цитата oop @
                      mov ax,@code;заносим адрес сегмента кода в регистр ax
                      mov cs,ax;ax в cs

                      Это бред и даже компилироваться не должно.
                      Гугли ASSUME.
                        oop
                        Прочти "СЕГМЕНТИРОВАНИЕ АДРЕСОВ" В КНИЖКЕ!!! ;)

                        Добавлено
                        Например, mov ax, es:x
                          Цитата oop @
                          Подскажите чем отличается(пример кода) местонахождение операндов в памяти команд(в командах) и в памяти данных?

                          Вопрос поставлен некорректно. Единственное, могу сказать, что в современных ОС каждая секция имеет атрибуты "исполняемый", "чтение", "запись" и др.
                            Цитата 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 между кодом, но лучше код с данными не перемешивать.
                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0343 ]   [ 14 queries used ]   [ Generated: 19.05.24, 13:29 GMT ]