gpt4 book ai didi

c++ - asm 子例程处理来自 C++ 文件的 int 和 char

转载 作者:行者123 更新时间:2023-11-30 03:12:08 24 4
gpt4 key购买 nike

与 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com