我正在尝试在程序集中创建一个子程序,它将在屏幕上绘制一个正方形.我不认为我可以像在C++中那样将参数传递给子程序,所以我想我可以使用堆栈来存储和访问参数(我不能使用公共数据寄存器,因为有太多变量到通过).
问题是(我记得在某处阅读)当我使用call命令到当前"程序"的地址时,它被保存在堆栈中,因此当它使用"ret"命令时它将知道返回的位置.但是,如果我存储在堆栈上的东西,然后调用函数,我必须保存在某个地方的地址(也就是在堆栈的顶部),然后安全地弹出的参数.然后在代码完成之后并且在调用"ret"之前,我将不得不推回地址.
我对吗?并且,如果是,我在哪里可以存储地址(我不认为地址只有1个字节长,因此它适合AX或BX或任何其他数据寄存器).我可以使用IP来执行此操作(虽然我知道这用于其他事情)?
这就是我的想象:
[BITS 16]
....
main:
mov ax,100b
push ax
call rectangle ;??--pushes on the stack the current address?
jml $
rectangle:
pop ax ;??--this is the addres of main right(where the call was made)?
pop bx ;??--this is the real 100b, right?
....
push ax
ret ;-uses the address saved in stack
Run Code Online (Sandbox Code Playgroud) MSDN表示GetDiBits在调用此函数之前,不应将用于的位图选择为DC.但是从我的经验来看,BitBlt我知道除非选择了位图,否则我无法绘制位图.
GetDiBits绕过这个?我可以使用未选择的,新创建的位图作为此函数的参数吗?GetDiBits并CreateDibSection返回一个数组.但是MSDN谈到了第一个功能:
"指定的兼容位图的位"
我认为DI代表DeviceIndependent.为什么会出现矛盾?这意味着,根据MSDN,GetDiBits只能用CreateCompatibleBitmap(哪个是DD)?然后我不能将这个数组发送到另一台机器来显示它,对吗?
CreateDibSection真的是DIndependent为什么它需要一个hDC?所有需要的信息都是通过bitmapinfoheader提供的......这些问题在论坛中得到的关注太少.
之前有人问过,但没有人抓住这个小细节.结果我不确定我做的是否正确:
简单的例子:
struct TEST {
bool a;
int b;
};
TEST func() {
return { false };
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?请注意,int值未初始化.虽然将其设置为0不会有问题,但会出现更多问题:
struct _FILE_MUTEX {
bool locked;
HANDLE handle;
};
Run Code Online (Sandbox Code Playgroud)
从向量,数组到函数指针,结构的最后一个成员可能变得越来越复杂.
返回内联初始化结构时,我可以将一些成员留空吗?