принцип работы стека знаешь? надеюсь, что знаешь)
но на всякий случай — первый пришел, последний ушел.
допустим мы стек бросаем значения
1, 2, 3, 4.
на вершине стека у нас значение 4.
что бы достать значение 1, то надо стек разобрать в обратном порядке — достаем 4,3,2,1
Я так понял, там какая-то работа со стеком, но не очень допер, что и как реально работает.
Артем, смотри — объясню как умею и понимаю:
когда процессор встречает команду call <адрес>, то он бросает на стек содержимое регистра PC+3, меняет значение PC на <адрес> и продолжает выполнение. т.е. следующая команда будет браться уже из <адрес>. а когда встречается команда ret, то берется значение с вершины стека и пихается в PC, потом опять же идет продолжение выполнения программы.
командами push/pop ты сохраняешь/восстанавливаешь значения регистров в стек/ из стека. и соответственно косвенно изменяешь значение регистра SP (указатель на вершину стека). и если ты запихал в стек допустим 2 регистра, а восстановил 1, то при выполнении команды ret со стека возьмется что? правильно — хрень! и выполнение программы начнеться по направлению неведомой черной дыры :)
вот как-то так
incbin "..." — инклудит бинарные данные
include "..." — инклудит другой файл асм
в бинарниках у тебя может быть картинка, музыка, что-то еще (прекалк)
ну а в амсах могут быть отдельные процедуры, которые не стоит копировать из проекта в проект, а проще приинклудить из какой-то общей папки
слона-то я и не приметил!)))
этож красивее и умнее можно сделать!))
как минимум проверять на маке. бат и запускать его если имеется, иначе по дефолту сделать как у меня.
/me потирает руки
естественно на абсолютную истину не претендую)))
просто мне, как мегаленивому и стольже полоротому, лень в текстах писать имя проекта
типа
spgbld.exe -b spgbld.ini zifi.spg
имя проекта пишу 1 раз, когда создаю папку проекта.
потом ctrl+b, все компиляется с нужными именами, собирается в трдэшник, киляется существующий экземпляр анрила, и запускается новый.
тогда уж давайте придумаем универсальный скрипт
я вообще как кот Леопольд — люблю мирных друзей)
но на всякий случай — первый пришел, последний ушел.
допустим мы стек бросаем значения
1, 2, 3, 4.
на вершине стека у нас значение 4.
что бы достать значение 1, то надо стек разобрать в обратном порядке — достаем 4,3,2,1
Артем, смотри — объясню как умею и понимаю:
когда процессор встречает команду call <адрес>, то он бросает на стек содержимое регистра PC+3, меняет значение PC на <адрес> и продолжает выполнение. т.е. следующая команда будет браться уже из <адрес>. а когда встречается команда ret, то берется значение с вершины стека и пихается в PC, потом опять же идет продолжение выполнения программы.
командами push/pop ты сохраняешь/восстанавливаешь значения регистров в стек/ из стека. и соответственно косвенно изменяешь значение регистра SP (указатель на вершину стека). и если ты запихал в стек допустим 2 регистра, а восстановил 1, то при выполнении команды ret со стека возьмется что? правильно — хрень! и выполнение программы начнеться по направлению неведомой черной дыры :)
вот как-то так
include "..." — инклудит другой файл асм
в бинарниках у тебя может быть картинка, музыка, что-то еще (прекалк)
ну а в амсах могут быть отдельные процедуры, которые не стоит копировать из проекта в проект, а проще приинклудить из какой-то общей папки
этож красивее и умнее можно сделать!))
как минимум проверять на маке. бат и запускать его если имеется, иначе по дефолту сделать как у меня.
/me потирает руки
просто мне, как мегаленивому и стольже полоротому, лень в текстах писать имя проекта
типа
имя проекта пишу 1 раз, когда создаю папку проекта.
потом ctrl+b, все компиляется с нужными именами, собирается в трдэшник, киляется существующий экземпляр анрила, и запускается новый.