Что делает эта линия сборки? - PullRequest
2 голосов
/ 18 декабря 2011

У меня есть эта строка сборки:

cmpb   $0x0,(%rax,%rcx,1)

Теперь, согласно ссылкам, cmpb немедленно сравнивает два байта.Таким образом, он сравнивает 0 с (%rax,%rcx,1).Может кто-нибудь объяснить, что это за второй аргумент?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 18 декабря 2011

Это синтаксис AT & T для

cmp BYTE PTR [rax+rcx*1], 0

Таким образом, он вычисляет адрес, используя rax + rcx, разыменовывает его, чтобы получить b yte, а затем c o mp с номером 0 .

5 голосов
/ 18 декабря 2011

Общий синтаксис для этого типа операнда памяти:

disp(base,offset,mult)

, который дает вам адрес:

base + disp + offset*mult

Так в вашем случае (disp = 0), cmpb сравнивает 0 и значение, хранящееся в:

%rax + (%rcx * 1)
...