Я изучаю сборку x86 в классе, и я очень потерял то, как вы различаете, что такое операнд регистров и что делает ссылка на память. У меня было несколько путаниц, которые я надеялся прояснить.x86 mov/add Инструкции и память Адресация
Следующий код является то, что мой учебник говорит, это длинный путь, чтобы сделать толчок и поп соответственно:
subl $4, %esp
movl %ebp, (%esp)
movl (%esp), %eax
addl $4, %esp
Так в инструкции subl, мы можем всегда рассчитывать% особ удерживать значение адреса?
Также в чем разница между двумя функциями movl? Может ли первый быть указан как
movl (%ebp), %esp
? А для второго movl это перемещает адрес% esp или перемещает значение, на которое указывает% esp?
В качестве продолжения, почему мы не можем иметь источник и место назначения как ссылки на память?
movw (%eax), 4(%esp)
И, наконец, для следующего кода:
movb (%esp, %edx, 4), %dh
если источник является более чем 1 байт (размер% йк), то, что происходит? Это просто усекает значение?
Извините, это была тонна вопросов, но любая помощь была бы принята с благодарностью.
Проверьте свои объяснения 'movl (% ebp),% esp', я не думаю, что это правильно – harold
Спасибо! Это было очень подробно и полезно. Я на самом деле собирался спросить об этом. Разве это не будет копировать значение, на которое указывает% ebp на% esp? –
Ах! Правильно! Я сделал себе беспорядок с EBP и ESP. Исправлена! –