Push Es
дХТБГЛЙК ЧПРТПУ: ЛПНБОДБ PUSH ES УЛПМШЛП ВБКФ Ч УФЕЛ ЪБРЙИЙЧБЕФ? дБ ОЕФ, С-ФП ЪОБА, РТПУФП УПНОЕЧБАУШ - С ЗМАЮХ, ЙМЙ ЛПНРЙМСФПТ...
Все пуши и попы в 16-битном режиме 2-байтные, в 32-битном - 4-байтные. Независимо от размера операнда
Все пуши и попы в 16-битном режиме 2-байтные, в 32-битном - 4-байтные. Независимо от размера операнда
Даже PUSH AX? :)
А почему ж тогда push ds - 2, а push es - 4?
Даже PUSH AX? :)
А почему ж тогда push ds - 2, а push es - 4?
Ну блин, Митя, любишь ты из мухи слона делать :).
В 16-битном режиме sp сдвигается на 2 байта. В 32-х битном esp на 4... Кажись так... Давно я уже на асме правда не кодил, тем более в PM.
Даже PUSH AX? :)
А чем так AX отличается от других возможных операндов пуша?
А почему ж тогда push ds - 2, а push es - 4?
Потому что push ds ты в 16-битном режиме замерял, а push es - в 32-битном :)
А чем так AX отличается от других возможных операндов пуша?
Не знаю, чем уж вы руководствуетесь, а у меня перед глазами - дамп стека, push es -4, mov ax,es+push ax - 2, это АБСОЛЮТНО ТОЧНО!
А так спасибо.
Что-то у меня второй день lowlevel.ru не грузится...sorry for offtopic
Ах вот еще что: может при push ax fasm ставит префикс 16 разрядного операнда,
Больше скажу - его ставит не только фасм, но и все другие ассемблеры :)
push ax и push eax - это одна и та же команда и размер операнда зависит только от разрядности текущего режима.
То есть когда ты в 32-битном режиме пишешь push ax, то ассемблер транслирует это в 0x66 push eax
Это одна из причин, по которой 16-битные операции в 32-разрядном режиме выполняются медленнее чем 32-битные
а при push es не ставит?
А вот push es - другой случай - он и в 16-битном и в 32-битном режимах один и тот же (32-битных сегментных регистров-то нету :))