C (att汇编)如何比较字符串中的两个字符?

C (att汇编)如何比较字符串中的两个字符?,c,assembly,x86,att,cmp,C,Assembly,X86,Att,Cmp,我有char*str1和char*str2,分别通过%rdi和%rsi传递。 我循环遍历每个字节,但cmp不允许我执行内存到内存的比较cmp(%rdi),(%rsi) 还有cmpsb,我正在努力理解如何实际使用它。有没有其他方法可以将指针内容的相等性与指针的另一个内容进行比较?没错,除了专门设计的cmpsX指令系列之外,您不能比较同一条指令中的两个内存位置。但是你可以从一个地址加载,并与另一个地址进行比较。当你说我可以从一个地址加载,并与另一个地址进行比较时,你是说用cmp或cmpsx来实现这一

我有char*str1和char*str2,分别通过%rdi和%rsi传递。 我循环遍历每个字节,但cmp不允许我执行内存到内存的比较<代码>cmp(%rdi),(%rsi)


还有cmpsb,我正在努力理解如何实际使用它。有没有其他方法可以将指针内容的相等性与指针的另一个内容进行比较?

没错,除了专门设计的
cmpsX
指令系列之外,您不能比较同一条指令中的两个内存位置。但是你可以从一个地址加载,并与另一个地址进行比较。当你说我可以从一个地址加载,并与另一个地址进行比较时,你是说用cmp或cmpsx来实现这一点吗?你用
mov
从内存加载寄存器,并使用
cmp
@BlockoButter与另一个内存地址进行比较,正如Weather Vane所说:首先将一个操作数加载到寄存器中,然后将该寄存器与另一个操作数进行比较。例如,do
mov(%rdi),%al;cmp%al,(%rsi)
。查看一个C函数的(优化)编译器输出,该函数返回*p==*q或者什么的。movzbl加载一个,然后将字节与另一个内存操作数进行比较。