У меня есть эта строка сборки:
cmpb $0x0,(%rax,%rcx,1)
Теперь, согласно ссылкам, cmpb немедленно сравнивает два байта.Таким образом, он сравнивает 0 с (%rax,%rcx,1).Может кто-нибудь объяснить, что это за второй аргумент?
cmpb
(%rax,%rcx,1)
Спасибо!
Это синтаксис AT & T для
cmp BYTE PTR [rax+rcx*1], 0
Таким образом, он вычисляет адрес, используя rax + rcx, разыменовывает его, чтобы получить b yte, а затем c o mp с номером 0 .
rax + rcx
Общий синтаксис для этого типа операнда памяти:
disp(base,offset,mult)
, который дает вам адрес:
base + disp + offset*mult
Так в вашем случае (disp = 0), cmpb сравнивает 0 и значение, хранящееся в:
%rax + (%rcx * 1)