Я знаю, что есть другие вопросы, похожие на это, но мне все еще трудно понять часть(). Может ли кто-нибудь записать этот синтаксис для меня? Благодарю.Что означает cmp% eax, 0x80498d4 (,% ebx, 4)?
ответ
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 сборки.
В синтаксисе Intel будет понятнее: 'cmp [ebx * 4 + 0x80498d4], eax' –