与 C++ 程序链接后,如何在 asm 子例程中处理 int 和 char?例如extern "C"void LCD_ byte (char byte, int cmd_ data); LCD_ byte 如何处理“byte”和“cmd_ data”?如何访问汇编代码中的“byte”和“cmd_data”?
最佳答案
这在很大程度上取决于您使用的微处理器。如果是x86,会将char加宽为int,然后两个参数都入栈。您可以通过将执行调用的 C 代码编译成汇编代码并检查汇编代码来找到自己。
例如给定
void LCD_byte (char byte, int cmd_data);
void foo()
{
LCD_byte('a',100);
}
gcc 在 x86 Linux 上生成代码
foo:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl $100, 4(%esp)
movl $97, (%esp)
call LCD_byte
leave
ret
如您所见,两个值都被压入堆栈(因此“a”位于顶部),然后对目标例程进行调用指令。因此,目标例程可以在esp+4处找到第一个传入参数。
关于c++ - asm 子例程处理来自 C++ 文件的 int 和 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510064/