c - 如何从 C 调用内联汇编中的函数
问题描述
我目前正在简单地玩在线游戏,但我有点卡住了。我设法调用了一个没有参数的函数,但是当涉及到调用一个有两个参数的函数时,我被卡住了。
我下面的代码应该调用一个(add)
将预定义数字加在一起的函数,它应该调用(add parameter)
带有两个参数的第二个函数,这些参数应该加在一起。
#include <stdio.h>
int c = 4;
int d = 5;
void add() {
int result = 1 + 2;
printf("Result: %d\n", result);
}
void add_parameter(int a, int b) {
int result = a + b;
printf("Result: %d\n", result);
}
int main()
{
__asm__ __volatile__ ( "call add" );
// __asm__ __volatile__(
// "mov eax, offset c"
// "push eax"
// "mov eax, offset d"
// "push eax"
// "call add_parameter"
// "pop ebx"
// "pop ebx"
// );
__asm__ __volatile__ ( "mov eax, offset c" );
__asm__ __volatile__ ( "push eax" );
__asm__ __volatile__ ( "mov eax, offset d" );
__asm__ __volatile__ ( "push eax" );
__asm__ __volatile__ ( "call add_parameter" );
__asm__ __volatile__ ( "pop ebx" );
__asm__ __volatile__ ( "pop ebx" );
return 0;
}
我目前的问题是,当我尝试编译程序时,我收到一条错误消息
p_function.c:31: Error: too many memory references for `mov'
p_function.c:33: Error: too many memory references for `mov'
在我的程序中,我尝试了两种方法,一种是单个 ASM 调用,其中包含整个 ASM 代码,另一种是我将每一行拆分为自己的 asm 调用。
不幸的是,我不确定这些方法中的哪一种是正确的,更不用说最有效的了,但是无论我使用哪种方法,我都会遇到同样的错误。如何解决此问题并调用该函数add_parameter
谢谢
解决方案
推荐阅读
- php - 对于我的特定场景,我应该怎么做才能使用 .htaccess 制作漂亮的 URL?
- django - django-session-timeout:如何自动断开连接(无需用户操作)
- node.js - MSSQL模块将返回值转换为int?
- reactjs - 在反应引导选项卡的标题旁边放置图片
- python - 用 Python 在特殊的 CSV 列中查找和替换
- android - 将值从 Activity 传递到 Fragment
- python-2.7 - 尝试在 python 中播放 AudioSegment 时权限被拒绝
- sql - 访问查询拉取值变化超过一定百分比的记录
- reactjs - Mobx React 组件在渲染时不更新
- bash - 如何在循环中运行 bash 脚本