2015-03-02 2 views
0

Я знаю, что есть другие вопросы, похожие на это, но мне все еще трудно понять часть(). Может ли кто-нибудь записать этот синтаксис для меня? Благодарю.Что означает cmp% eax, 0x80498d4 (,% ebx, 4)?

+0

В синтаксисе Intel будет понятнее: 'cmp [ebx * 4 + 0x80498d4], eax' –

ответ

2
cmp %eax,0x80498d4(,%ebx,4) 

CMP является инструкция по монтажу сравнения. Он выполняет сравнение двух аргументов путем вычитания правого аргумента слева и устанавливает регистр CPU EFLAGS. Этот регистр EFLAGS, может затем использоваться, чтобы сделать условное ветвление/перемещение и т.д.

Первый аргумент: `% EAX (значение в регистре EAX%)

Второй аргумент: 0x80498d4 (,% EBX, 4). Это читается как offset (base, index, scale) В вашем примере значением второго аргумента является смещение ячейки памяти 0x80498d4 + base (which I believe defaults to zero if not included) + value in %ebx register * 4 (scaling factor).

Примечание: Я считаю, что база здесь пусто и по умолчанию значения 0.

Вы посмотрите на http://docs.oracle.com/cd/E19120-01/open.solaris/817-5477/ennby/index.html можно получить дополнительную информацию о синтаксисе для получения инструкций Intel x86 сборки.