Короткий ответ - нет.
Если вы используете программу, использование eip в качестве реестра общего назначения, безусловно, невозможно, как если бы вы «писали» в eip, ваша программа будет переходить на выполнение инструкций по этому адресу (примерно), что, вероятно, не будет работа. Что касается EFLAGS, у него есть несколько бит, которые либо зарезервированы, либо управляют различными вещами, которые вы не хотите менять, а это значит, что это не будет работать как регистр общего назначения. Поскольку вы, похоже, намерены не использовать память для сохранения значений, вы можете использовать esp и ebp (будьте осторожны, если вы вообще используете стек). Помимо этого, большинство регистров, которые, как я полагаю, вы используете, требуют уровня разрешений 0 для записи и снова, имели бы весьма вероятные отрицательные последствия, если бы вы использовали их в качестве регистров общего назначения.
Здесь могут быть некоторые специальные регистры, специфичные для вашего процессора, но код не будет переносимым между процессорами, если вы будете использовать их.
Вы можете написать 'eip', выполнив' jmp value'. И вы можете прочитать из него 'call foo; foo: pop eax; 'Но у первого, вероятно, есть побочные эффекты, которые вам не нужны. :) Короче говоря, вы не сможете использовать 'eip' и' eflags' для других целей. (и большинство арифметических инструкций будут неявно записываться в 'eflags') – Mysticial
Практически вы не можете использовать регистры не по назначению.Если вы новичок в ассемблере, вы, вероятно, еще не знаете, как организовать свой код, чтобы свести к минимуму давление в регистре. И в некоторых местах вы просто придерживаетесь требований конкретного алгоритма. Как правило, если вы тщательно кода, ваш код будет в основном работать достаточно быстро. Код разумно, сначала запустите его, * затем * беспокойтесь о том, слишком ли он медленный. –
Вы можете сохранить некоторые бит 'ah'' 'eflags' с' sahf', и вы можете загрузить их в 'ah' с' lahf'. Вы также можете хранить данные в виде флагов с 'popf', но это может иметь нежелательные побочные эффекты. И в коде реального режима (устаревший или загрузчик) вы можете блокировать прерывания с помощью 'cli', а затем хранить' esp' где-то, использовать 'esp' в качестве общего назначения, загружать исходное значение' esp' и разрешать прерывания с помощью 'sti'. Вы можете использовать 'eip' для хранения некоторых данных, например. с 'jmp eax' /' call eax', если все используемые значения (цели перехода) имеют действительный код. Во всяком случае, для практических целей вам лучше следовать совету Иры Бакстер. – nrz