c语言-如何使用内嵌汇编引用c函数

问题描述

如何使用内嵌汇编引用c函数

main.c

 #include<stdio.h>
#include<stdlib.h>

extern int sum(int);

int main(int argc, char __stdcall**argv)
{
    int i;
    if (argc < 2) {
        printf("usage: main number
");
        return -1;
    }
    i = atoi(argv[1]);
    __asm {
        // 计算并输出sum(i)的值
    }
    return 0;
}

sum.c

 #include<stdio.h>
int sum(int num)
{
    __asm {
        // 返回 1+2+…+i的值
        mov eax, num
        add eax, 1
        imul num
        mov ebx, 2
        idiv ebx
        mov num, eax
    }
    printf("%d
", num);
    return num;
}

解决方案

 mov eax,i
            push eax
        call sum

我这样写的 会报错误

解决方案二:

问题解决了 谢谢楼上


解决方案三:

vs2005内嵌汇编的使用:标准的c/c++函数的调用和非标准的c/c++函数的调用以及变量的引用

时间: 2024-08-15 13:05:50

c语言-如何使用内嵌汇编引用c函数的相关文章

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例:        __asm__ __volatile__("hlt"); "__asm__&quo

Linux内核系列—C语言中内嵌汇编 asm __volatile__,asm__volatile_【转】

转自:http://www.bkjia.com/Androidjc/1109412.html 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编例:        __asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌

C语言内嵌汇编(arm-v7)----加减乘移位

在现代嵌入式操作系统中,汇编语言当然必不可少,汇编语言的优势就是执行速度快.如果在C语言的代码中,在关键的地方内嵌汇编,那么效率将会大大的提高,我们来看看代码: #include <stdio.h> int main(void) { int a = 10 ; int b = 20 ; int addsum ; int subsum ; // int mulsum ; __asm__ __volatile__ ( //传参 "mov r0 , %2 \n" //mov 执行是

C语言内嵌汇编API内存搜索引擎实例_C 语言

本文实例讲述了C语言内嵌汇编API内存搜索引擎的方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: // apisearchEngine.cpp : Defines the entry point for the console application.  //    #include "stdafx.h"  #include <Windows.h>     DWORD __stdcall GetStrLengthA(char* szName)  {   

GCC的内嵌汇编语法

1 Overview 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size.另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能.所以我们必须了解汇编语言,即使你有可能并不喜欢它.     如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只支持这种汇编语法.  本文只讨论AT&T的汇编语法,以及G

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什

VC内嵌汇编基础知识

http://www.cppblog.com/xingkongyun/archive/2008/12/21/70003.html 为了加速游戏,一提起汇编语言,大家也许会感到很神秘.其实如果你学起来就会发现,它并非想象中那样难.特别是内嵌汇编,由于它和C++紧密结合, 使你不必考虑很多烦琐的细节(例如输入输出函数的写法),学习起来比较容易.使用内嵌汇编,特别是使用MMX指令,可以大大提高各种游戏中常见特效的速 度,对于编出一个漂亮的游戏非常重要.学好汇编语言还有一个特别有趣的用处:可以观察和看懂

visual c++-Visual C++中内嵌汇编的问题

问题描述 Visual C++中内嵌汇编的问题 如下,是一个利用内嵌汇编实现的两整数交换的程序.输出结果是2,1;2,1;1,2;2,1.可以看到Swap2这个函数行不通,在函数内两个变量确实交换了,但是调用后a和b没有交换,仍然是2,1.就像是传值一样,而没有传址,令我很困惑. #include <cstdio> void Swap1(int &_int1, int &_int2); void Swap2(int &_int1, int &_int2); in

x64环境下,把内嵌汇编的汇编单独放在.asm文件中

问题描述 x64环境下,把内嵌汇编的汇编单独放在.asm文件中 void GDIRender::YUV_TO_RGB24(unsigned char *puc_y int stride_y unsigned char *puc_u unsigned char *puc_v int stride_uv unsigned char *puc_out int width_y int height_yint stride_out) { int y horiz_count;unsigned char *p