Воскресенье
02.02.2025
16:52
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    OPEN SOURCE PROJECT

    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Стек
    andXreiДата: Суббота, 21.03.2009, 14:09 | Сообщение # 1
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Поисните пожалуйста для чего нужен стек>>?
     
    fasmДата: Суббота, 21.03.2009, 14:34 | Сообщение # 2
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    В основном для передачи параметров в процедуры, а еще для массивов, для локальных данных, в общем программист сам может придумать как ему использовать стек...
     
    andXreiДата: Суббота, 21.03.2009, 19:44 | Сообщение # 3
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Меня интересуют следующие вопросы по работе со стеком

    Quote (Код)
    myst dd ?
    prog_esp dd ?
    _esp dd ?
    size_of_programming_stack = 80*1024

    Что за параметр myst?

    Quote (Код)
    lea esp, [eax+size_of_programming_stack]

    значение а именно что делает lea

    Quote (Код)

    .code
    start:
    push size_of_programming_stack
    push 64

    Для чего нужно push 64

    Пример был взят с материала Стек полная версия PDF

     
    fasmДата: Воскресенье, 22.03.2009, 11:30 | Сообщение # 4
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    В том документе даны примеры для создания своего стека ... Вам оно надо? Если система сама вам дарит родной стек...

    Смотрим там же внимательно код и натыкаемся на:

    ; Выделяем память для нашего стека в размере 80 кб
    push SIZE_OF_PROGRAMMING_STACK
    push 64; режим реадврайт
    call [GlobalAlloc]
    mov [myst], eax

    Т.е. мы выделяем память для работы со стеком и сохраняем её указатель на первый байт в [myst]

    Quote
    lea esp, [eax+size_of_programming_stack]

    LEA - высчитывает адрес и загружает его в регистр, поскольку стек растет "с верху в низ" от большого адреса к меньшему, то этой строкой мы загружаем в esp адресс первого байта выделенного блока + размер стека и esp начинает указывать на последний байт этого блока, теперь при операциях push процессор будет выполнять:

    sub [myst], 4
    mov [myst], параметр

     
    • Страница 1 из 1
    • 1
    Поиск: