我有一个简单的函数,只返回一个布尔值(现在设置为返回true).我正在尝试编写一个将调用它的汇编函数,并根据返回值进行跳转.
可悲的是,我的函数返回0xCCCCCC01而不是预期的0x01.这是stdcall的一些隐藏功能吗?
在_stdcall,传入返回值EAX.
但是,如果您从函数返回一个布尔值,并且您的布尔值只有一个字节[*],则不能用于CMP EAX,...比较返回值!
幸运的是,你可以解决最低的EAX通过AL(它不是一个单独的寄存器,但部分EAX):
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
----------------EAX----------------
--------AX-------
---AH--- ---AL---
Run Code Online (Sandbox Code Playgroud)
[*]这是通常的惯例,因为它是您通过字节指针正确处理布尔值所需的最小量.如果你想出了自己的语言,你可以自由地要求布尔大小必须与机器寄存器大小相匹配.