strcmp 计算哪些寄存器? x86 汇编
What registers does strcmp evaluate? x86 Assembly
这似乎是常识,但我在互联网上找不到它(还)。
当程序有
call <JMP.&msvcrt.strcmp>
比较的是什么值?我不确定,因为在 cmp 中说明了 (cmp eax, ebp)。
我知道如果有帮助,比较结果会返回到 EAX 寄存器中。
您正试图将 strcmp
与汇编指令 cmp
相关联。但它们是不同的东西。例如,在处理器级别(汇编)中,cmp A, B
比较 2 个不同的寄存器,并将结果设置在一些标志中。标志是可以由其他指令(如 jz
、jnz
)测试的位,然后根据所需的意图重定向流。
当您执行 call strcmp
时,您实际上是在调用 "high level function"( 高级,与汇编 相比)将执行很多操作比较 2 个 C-Style 字符串。要知道将使用哪些寄存器并不容易(可能会使用其中许多),每个 compiler/platform 都会给出不同的机器指令结果。
如果你理解了这一点,你会发现其实这并不重要,因为范式有点不同:
cmp
是汇编指令。
strcmp
不是汇编指令,而是函数
这似乎是常识,但我在互联网上找不到它(还)。
当程序有
call <JMP.&msvcrt.strcmp>
比较的是什么值?我不确定,因为在 cmp 中说明了 (cmp eax, ebp)。
我知道如果有帮助,比较结果会返回到 EAX 寄存器中。
您正试图将 strcmp
与汇编指令 cmp
相关联。但它们是不同的东西。例如,在处理器级别(汇编)中,cmp A, B
比较 2 个不同的寄存器,并将结果设置在一些标志中。标志是可以由其他指令(如 jz
、jnz
)测试的位,然后根据所需的意图重定向流。
当您执行 call strcmp
时,您实际上是在调用 "high level function"( 高级,与汇编 相比)将执行很多操作比较 2 个 C-Style 字符串。要知道将使用哪些寄存器并不容易(可能会使用其中许多),每个 compiler/platform 都会给出不同的机器指令结果。
如果你理解了这一点,你会发现其实这并不重要,因为范式有点不同:
cmp
是汇编指令。strcmp
不是汇编指令,而是函数