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

标签 assembly x86

这似乎是常识,但我在互联网上找不到它(还)。

当程序有

call <JMP.&msvcrt.strcmp>

比较什么值?我不确定,因为对于 cmp 来说是这样的(cmp eax, ebp)。

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

最佳答案

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

当您执行 call strcmp 时您实际上正在调用一个“高级函数”(高级,与汇编相比),它将执行很多操作来比较 2 个 C 风格字符串。一旦每个编译器/平台都会给出不同的机器指令结果,就很难知道将使用哪些寄存器(可能会使用其中许多寄存器)。

如果你理解了这一点,你就会发现事实上这并不重要,因为范式有点不同:

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

关于assembly - strcmp 评估哪些寄存器? x86 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204405/

相关文章:

assembly - 尝试退出程序时调用错误

assembly - 什么在操作系统中强制执行内存保护?

c++ - 汇编乘法运算 64 位

C++ CodeBlocks 反汇编;代码太多了?

assembly - 当您禁用中断时会发生什么,以及如何处理您不知道如何处理的中断?

gcc - 为什么即使从未访问堆栈,arm-gcc 也会递减/递增堆栈指针?

assembly - 从汇编 x86 中的 JMP 返回?

c - 终端顶行未按预期清除

c++ - VC++,x86上的/volatile:ms

c - 带循环的反编译协助