这似乎是常识,但我在互联网上找不到它(还)。
当程序有
call <JMP.&msvcrt.strcmp>
比较什么值?我不确定,因为对于 cmp 来说是这样的(cmp eax, ebp)。
我知道比较结果会返回到 EAX 寄存器中(如果有帮助的话)。
最佳答案
您正在尝试关联 strcmp
与组装指令cmp
。但它们是不同的东西。在处理器级别(汇编),cmp A, B
例如,比较 2 个不同的寄存器,并将结果设置在某些标志中。标志是可以由其他指令测试的位(例如 jz
、 jnz
),然后根据所需的意图重定向流程。
当您执行 call strcmp
时您实际上正在调用一个“高级函数”(高级,与汇编相比),它将执行很多操作来比较 2 个 C 风格字符串。一旦每个编译器/平台都会给出不同的机器指令结果,就很难知道将使用哪些寄存器(可能会使用其中许多寄存器)。
如果你理解了这一点,你就会发现事实上这并不重要,因为范式有点不同:
-
cmp
是一条汇编指令。 -
strcmp
不是汇编指令,而是函数。
关于assembly - strcmp 评估哪些寄存器? x86 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204405/