这个装配线做什么?

ryy*_*yst 2 assembly x86-64

我有这个装配线:

cmpb   $0x0,(%rax,%rcx,1)
Run Code Online (Sandbox Code Playgroud)

现在,根据那里的引用,cmpb立即比较两个字节.所以它将0与0进行比较(%rax,%rcx,1).有人可以解释第二个论点是什么/做什么?

谢谢!

ken*_*ytm 8

这是AT&T的语法

cmp BYTE PTR [rax+rcx*1], 0
Run Code Online (Sandbox Code Playgroud)

所以它计算地址使用rax + rcx,取消引用它以获得一个b,然后 c o mp是数字0.


Mat*_*Mat 5

此类内存操作数的一般语法是:

disp(base,offset,mult)
Run Code Online (Sandbox Code Playgroud)

它给你的地址:

base + disp + offset*mult
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下(disp为0),cmpb比较0和存储在的值:

%rax + (%rcx * 1)
Run Code Online (Sandbox Code Playgroud)