我有以下用MASM为i386处理器编写的简单程序:
TITLE BLA
.MODEL SMALL
.386
.STACK
.DATA
.CODE
MAIN PROC FAR
.STARTUP
MOV EBX,0FFFFFFFFH; (1)
MOV EAX,0EEEEEEEEH; (2)
.EXIT
MAIN ENDP
END
Run Code Online (Sandbox Code Playgroud)
我对EBX寄存器的行为感到困惑。在(1)指令之后,EBX设置为1-s:
执行(2)指令不仅会将值加载到EAX中,而且在EBX的上半部分也为零:
为什么实际上会发生?
如果您能向我解释以下含义,我将非常感激:
void bar(char *a, char *b, unsigned short c) // (2)
{
...
}
void (*foo(void))(char *, char *, unsigned short) // (1)
{
return bar;
}
Run Code Online (Sandbox Code Playgroud)
尤其,
void (*foo(void))意思?怎么可以*foo(void)是名字呢?return bar意思?返回bar源代码的地址,或者 的结果bar,或者其他?