Конференция "Прочее" » Вопрос по стэку
 
  • Sick (03.07.08 16:02) [0]
    Объясните пожалуйста, от чего зависит размер данных, помещаемых/извлекаемых из стэка командами push/pop?
  • AndreyV © (03.07.08 16:12) [1]
    От размера данных?
  • Поросенок Винни-Пух © (03.07.08 16:12) [2]
    от разрядности цп
  • Sick (03.07.08 16:15) [3]

    > Поросенок Винни-Пух ©   (03.07.08 16:12) [2]

    ЦП, на котором компилировали, или на котором запущено приложение?
  • han_malign © (03.07.08 16:18) [4]
    От размера элемента стека, в случае х86 процессора - ширина машинного слова...

    4(четыре) - это количество пальцев на одной руке человека без физических недостатков исключая большой...
  • Zeqfreed © (03.07.08 16:19) [5]
    > Sick   (03.07.08 16:15) [3]

    А есть разница? :)
  • Sick (03.07.08 16:26) [6]
    Zeqfreed ©   (03.07.08 16:19) [5]
    В смысле?
  • Anatoly Podgoretsky © (03.07.08 16:28) [7]
    > Sick  (03.07.2008 16:02:00)  [0]

    От разрядности ОС и возможностями процессора, на 64 битном процессоре возможность 64 бита, но если ОС 32 бита, то и размер данных тоже 32 бита и это изменить нельзя.
  • Renegat (03.07.08 16:30) [8]
    > от разрядности цп

    ъ?! это какэто? скажем, инструкции вида
    PUSH r16 / POP r16


    выполнятся одинаково и на двестивосьмидесятнике, и на core2duo.

    что же насчёт помещения в стек одного байта - то под него резервируется аж двойное слово, и байт который нужно толкнуть в стек записывается в младший байт этого дв. слова

    конструкции типа
    PUSH/POP QWORD PTR []

    пока не встречал. может быть, ia64 это и позволяет.
  • Поросенок Винни-Пух © (03.07.08 16:35) [9]
    что же насчёт помещения в стек одного байта - то под него резервируется аж двойное слово, и байт который нужно толкнуть в стек записывается в младший байт этого дв. слова

    Ты думаешь он спрашивал какой длины сам байт если его пушнуть в стек?
  • Renegat (03.07.08 16:39) [10]
    > [9] Поросенок Винни-Пух ©   (03.07.08 16:35)

    По логике вещей, можно предположить что если запихнуть в стек 1 байт, то ESP тоже изменится всего на 1, а не на 4 сразу... может, вопрос был в этом? ©Telepator
  • Sick (03.07.08 16:39) [11]

    > Anatoly Podgoretsky ©   (03.07.08 16:28) [7]

    То есть выходит, зависит от ОС, на которой запущена программа, а от цп не зависит? Можно по-подробнее?


    > Renegat   (03.07.08 16:30) [8]
    > что же насчёт помещения в стек одного байта - то под него
    > резервируется аж двойное слово, и байт который нужно толкнуть
    > в стек записывается в младший байт этого дв. слова

    Это я понимаю, вопрос в том, от чего зависит размер слова
  • Поросенок Винни-Пух © (03.07.08 16:43) [12]
    а от цп не зависит?

    Ты спросил безотносительно компилятора и вообще чего либо.
    Поэтому и было сказано, что от разрядности цп.
    На восьмибитном синклере один размер, на i386 другой.
    Либо задавай конкретные вопросы
  • Anatoly Podgoretsky © (03.07.08 16:44) [13]
    > Поросенок Винни-Пух  (03.07.2008 16:35:09)  [9]

    А ты думаешь он расскажет, что он спрашивал?
  • clickmaker © (03.07.08 16:47) [14]
    > То есть выходит, зависит от ОС, на которой запущена программа,
    > а от цп не зависит

    зависит от целевой ОС, указанной при компиляции.
    Если компилируешь, скажем, под Win32, то на 64-битной винде программа запустится в подсистеме 32, и int там будет 32 бита
    Так же и 16-битные приложения работают в 16-битном эмуляторе (WOW) на вин32
  • Renegat (03.07.08 16:49) [15]
    Это НЕ зависит ни от модели проца, ни от типа ОСи. А только от той команды, что ты использовал для помещения в стек того или иного регистра / участка памяти.
    PUSH RAX

    заставит указатель стека сместиться на 8 байт
    PUSH EAX

    - на 4
    PUSH AX

    - на 2

    простите, байт втолкнуть непосредственно нельзя - просто это MASM брал на себя ответственность за MOVZX EAX, m8 -> PUSH EAX при компиляции макроса invoke
  • Sick (03.07.08 16:59) [16]

    > clickmaker ©   (03.07.08 16:47) [14]

    То есть если я компилирую на 32битной ос, но в настройках компилятора указываю 64битную, то на 64битной будет выделяться 4 байта, а на 32битной работать вообще не будет?
  • Sick (03.07.08 17:01) [17]
    то есть 8 байт
  • Поросенок Винни-Пух © (03.07.08 17:04) [18]
    Это НЕ зависит ни от модели проца, ни от типа ОСи. А только от той команды, что ты использовал для помещения в стек того или иного регистра / участка памяти.
    PUSH RAX заставит указатель стека сместиться на 8 байт
    PUSH EAX - на 4
    PUSH AX - на 2


    Остается найти в z80 PUSH EAX
  • atruhin1 (03.07.08 17:09) [19]
    [7] Anatoly Podgoretsky ©   (03.07.08 16:28)
    > От разрядности ОС и возможностями процессора,

    Чего то я не пойму, разве размер данных зависет от ОС?
    64 битные команды под 32 разрядной ОС, разве не выполняются?
 
Конференция "Прочее" » Вопрос по стэку
Есть новые Нет новых   [134439   +35][b:0][p:0.001]