Assembly 我可以创建一个1字节的局部变量吗?

Assembly 我可以创建一个1字节的局部变量吗?,assembly,x86,nasm,Assembly,X86,Nasm,我想在我的函数中创建一个1字节的局部变量,那么我可以这样做吗,或者我必须创建一个额外的3字节来对齐堆栈?不严格要求保持堆栈对齐,但这取决于您实际执行的操作。如果您的代码中有它,它可能就可以了。如果调用操作系统函数,可能会产生副作用。例如,我曾经在WindowsCreateFile中遇到一个奇怪的错误,这是由于堆栈对齐错误造成的,错误消息完全是错误的。我花了很长时间才弄明白到底出了什么问题 不过,体系结构本身并不需要它。创建您想要的任何东西,但是是的,您需要保持堆栈对齐。@Marc B确实对齐堆栈

我想在我的函数中创建一个1字节的局部变量,那么我可以这样做吗,或者我必须创建一个额外的3字节来对齐堆栈?

不严格要求保持堆栈对齐,但这取决于您实际执行的操作。如果您的代码中有它,它可能就可以了。如果调用操作系统函数,可能会产生副作用。例如,我曾经在Windows
CreateFile
中遇到一个奇怪的错误,这是由于堆栈对齐错误造成的,错误消息完全是错误的。我花了很长时间才弄明白到底出了什么问题


不过,体系结构本身并不需要它。

创建您想要的任何东西,但是是的,您需要保持堆栈对齐。@Marc B确实对齐堆栈是通过一个简单的
子esp,3
?如果您的代码正在调用您的代码,那么您可能不需要对齐堆栈,由您决定,虽然对性能来说不明智,但我不知道x86通常需要对齐的堆栈…也许有人可以纠正我的错误,堆栈对齐总是需要4字节的边界,还是取决于函数的调用约定?我还读到SSE需要16字节的堆栈对齐,这取决于所讨论的要求,因此不能用一般的方法来回答。