Сравнить два значения из стека?

Я застрял в своем коде ассемблера, где я хочу сравнить два значения стека.

x86, синтаксис AT&T

cmpl -4(%ebp), 4(%ebp)

Ошибка: слишком много ссылок на память для `cmp'

Я думаю, что невозможно сравнить два значения на основе множителя и EBP. Какие-либо предложения?

1 ответ

Вы можете сравнить два значения в памяти, используя инструкцию CMPSD.

Op хочет сделать что-то эквивалентное:

  cmpl -4(%ebp), 4(%ebp)

Он может сделать это, поместив адреса интересующих ячеек памяти в ESI и EDI соответственно, а затем с помощью команды сравнения строк памяти в память CMPSD:

  lea   -4(%ebp), %esi
  lea    4(%ebp), %edi
  cmpsd

(прости меня за неэкспертное злоупотребление синтаксисом AT&T).

Это отличается от того, что кто-либо мог бы сделать это на практике. Другие ответы, представленные здесь (загрузить значение в регистр и сравнить), гораздо более практичны. Если ничего другого, то эти решения сжигают только один регистр, а этот хак - два.

Урок: у ассемблера почти всегда есть несколько способов обшить кошку.

Другие вопросы по тегам