strcmp评估哪些寄存器? x86汇编

时间:2015-01-28 23:29:59

标签: assembly x86

这似乎是常识,但我无法在互联网上找到它。但

当程序有

call <JMP.&msvcrt.strcmp>

比较什么值?我不确定,因为cmp它已经陈述了(cmp eax,ebp)。

我知道比较结果会在EAX寄存器中返回,如果有帮助的话。

1 个答案:

答案 0 :(得分:3)

您正尝试将strcmp与汇编指令cmp相关联。但它们是不同的东西。例如,在处理器级别(汇编)中,cmp A, B比较2个不同的寄存器,并将结果设置为某些标志。标志是可以通过其他指令(如jzjnz)测试的位,然后根据所需的意图重定向流。

当您执行call strcmp时,您实际上正在调用“高级函数”(高级别,与汇编相比),这将执行大量的事情来比较2 C-样式字符串。一旦每个编译器/平台给出不同的机器指令结果,就不容易知道将使用哪些寄存器(其中许多将被使用)。

如果你明白这一点,你会发现它实际上并不重要,因为范式有点不同:

  • cmp是汇编指令。
  • strcmp不是汇编指令,而是函数。