Сравнить два значения из стека?
Я застрял в своем коде ассемблера, где я хочу сравнить два значения стека.
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).
Это отличается от того, что кто-либо мог бы сделать это на практике. Другие ответы, представленные здесь (загрузить значение в регистр и сравнить), гораздо более практичны. Если ничего другого, то эти решения сжигают только один регистр, а этот хак - два.
Урок: у ассемблера почти всегда есть несколько способов обшить кошку.