Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Push Es

419
30 июня 2003 года
Mitja Gladkih
284 / / 19.12.2002
Дурацкий вопрос: команда PUSH ES сколько байт в стек запихивает? Да нет, я-то знаю, просто сомневаюсь - я глючу, или компилятор...
1.8K
30 июня 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by Mitja Gladkih
дХТБГЛЙК ЧПРТПУ: ЛПНБОДБ PUSH ES УЛПМШЛП ВБКФ Ч УФЕЛ ЪБРЙИЙЧБЕФ? дБ ОЕФ, С-ФП ЪОБА, РТПУФП УПНОЕЧБАУШ - С ЗМАЮХ, ЙМЙ ЛПНРЙМСФПТ...



Все пуши и попы в 16-битном режиме 2-байтные, в 32-битном - 4-байтные. Независимо от размера операнда

419
30 июня 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by Lonesome


Все пуши и попы в 16-битном режиме 2-байтные, в 32-битном - 4-байтные. Независимо от размера операнда



Даже PUSH AX? :)
А почему ж тогда push ds - 2, а push es - 4?

395
01 июля 2003 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Mitja Gladkih


Даже PUSH AX? :)
А почему ж тогда push ds - 2, а push es - 4?


Ну блин, Митя, любишь ты из мухи слона делать :).
В 16-битном режиме sp сдвигается на 2 байта. В 32-х битном esp на 4... Кажись так... Давно я уже на асме правда не кодил, тем более в PM.

1.8K
01 июля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by Mitja Gladkih


Даже PUSH AX? :)



А чем так AX отличается от других возможных операндов пуша?

Цитата:

А почему ж тогда push ds - 2, а push es - 4?



Потому что push ds ты в 16-битном режиме замерял, а push es - в 32-битном :)

419
01 июля 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by Lonesome

А чем так AX отличается от других возможных операндов пуша?


Не знаю, чем уж вы руководствуетесь, а у меня перед глазами - дамп стека, push es -4, mov ax,es+push ax - 2, это АБСОЛЮТНО ТОЧНО!
А так спасибо.

419
01 июля 2003 года
Mitja Gladkih
284 / / 19.12.2002
Ах вот еще что: может при push ax fasm ставит префикс 16 разрядного операнда, а при push es не ставит?
419
01 июля 2003 года
Mitja Gladkih
284 / / 19.12.2002
To Lonesome:
Что-то у меня второй день lowlevel.ru не грузится...sorry for offtopic
1.8K
01 июля 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by Mitja Gladkih
Ах вот еще что: может при push ax fasm ставит префикс 16 разрядного операнда,



Больше скажу - его ставит не только фасм, но и все другие ассемблеры :)

push ax и push eax - это одна и та же команда и размер операнда зависит только от разрядности текущего режима.
То есть когда ты в 32-битном режиме пишешь push ax, то ассемблер транслирует это в 0x66 push eax

Это одна из причин, по которой 16-битные операции в 32-разрядном режиме выполняются медленнее чем 32-битные

Цитата:

а при push es не ставит?



А вот push es - другой случай - он и в 16-битном и в 32-битном режимах один и тот же (32-битных сегментных регистров-то нету :))

419
01 июля 2003 года
Mitja Gladkih
284 / / 19.12.2002
Ну это все и так ясно...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог