-
Объясните пожалуйста, от чего зависит размер данных, помещаемых/извлекаемых из стэка командами push/pop?
-
От размера данных?
-
от разрядности цп
-
> Поросенок Винни-Пух © (03.07.08 16:12) [2]
ЦП, на котором компилировали, или на котором запущено приложение?
-
От размера элемента стека, в случае х86 процессора - ширина машинного слова...
4(четыре) - это количество пальцев на одной руке человека без физических недостатков исключая большой...
-
> Sick (03.07.08 16:15) [3]
А есть разница? :)
-
Zeqfreed © (03.07.08 16:19) [5] В смысле?
-
> Sick (03.07.2008 16:02:00) [0]
От разрядности ОС и возможностями процессора, на 64 битном процессоре возможность 64 бита, но если ОС 32 бита, то и размер данных тоже 32 бита и это изменить нельзя.
-
> от разрядности цп
ъ?! это какэто? скажем, инструкции вида PUSH r16 / POP r16 выполнятся одинаково и на двестивосьмидесятнике, и на core2duo. что же насчёт помещения в стек одного байта - то под него резервируется аж двойное слово, и байт который нужно толкнуть в стек записывается в младший байт этого дв. слова конструкции типа PUSH/POP QWORD PTR [] пока не встречал. может быть, ia64 это и позволяет.
-
что же насчёт помещения в стек одного байта - то под него резервируется аж двойное слово, и байт который нужно толкнуть в стек записывается в младший байт этого дв. слова
Ты думаешь он спрашивал какой длины сам байт если его пушнуть в стек?
-
> [9] Поросенок Винни-Пух © (03.07.08 16:35)
По логике вещей, можно предположить что если запихнуть в стек 1 байт, то ESP тоже изменится всего на 1, а не на 4 сразу... может, вопрос был в этом? ©Telepator
-
> Anatoly Podgoretsky © (03.07.08 16:28) [7]
То есть выходит, зависит от ОС, на которой запущена программа, а от цп не зависит? Можно по-подробнее?
> Renegat (03.07.08 16:30) [8] > что же насчёт помещения в стек одного байта - то под него > резервируется аж двойное слово, и байт который нужно толкнуть > в стек записывается в младший байт этого дв. слова
Это я понимаю, вопрос в том, от чего зависит размер слова
-
а от цп не зависит?
Ты спросил безотносительно компилятора и вообще чего либо. Поэтому и было сказано, что от разрядности цп. На восьмибитном синклере один размер, на i386 другой. Либо задавай конкретные вопросы
-
> Поросенок Винни-Пух (03.07.2008 16:35:09) [9]
А ты думаешь он расскажет, что он спрашивал?
-
> То есть выходит, зависит от ОС, на которой запущена программа, > а от цп не зависит
зависит от целевой ОС, указанной при компиляции. Если компилируешь, скажем, под Win32, то на 64-битной винде программа запустится в подсистеме 32, и int там будет 32 бита Так же и 16-битные приложения работают в 16-битном эмуляторе (WOW) на вин32
-
Это НЕ зависит ни от модели проца, ни от типа ОСи. А только от той команды, что ты использовал для помещения в стек того или иного регистра / участка памяти. PUSH RAX заставит указатель стека сместиться на 8 байт PUSH EAX - на 4 PUSH AX - на 2 простите, байт втолкнуть непосредственно нельзя - просто это MASM брал на себя ответственность за MOVZX EAX, m8 -> PUSH EAX при компиляции макроса invoke
-
> clickmaker © (03.07.08 16:47) [14]
То есть если я компилирую на 32битной ос, но в настройках компилятора указываю 64битную, то на 64битной будет выделяться 4 байта, а на 32битной работать вообще не будет?
-
то есть 8 байт
-
Это НЕ зависит ни от модели проца, ни от типа ОСи. А только от той команды, что ты использовал для помещения в стек того или иного регистра / участка памяти. PUSH RAX заставит указатель стека сместиться на 8 байт PUSH EAX - на 4 PUSH AX - на 2
Остается найти в z80 PUSH EAX
-
[7] Anatoly Podgoretsky © (03.07.08 16:28) > От разрядности ОС и возможностями процессора,
Чего то я не пойму, разве размер данных зависет от ОС? 64 битные команды под 32 разрядной ОС, разве не выполняются?
|