首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法将汇编代码插入到C中?

有没有办法将汇编代码插入到C中?
EN

Stack Overflow用户
提问于 2008-09-14 13:55:31
回答 4查看 94.3K关注 0票数 76

我记得当时使用旧的borland DOS编译器,你可以做这样的事情:

代码语言:javascript
复制
asm {
 mov ax,ex
 etc etc...
}

现在有没有一种半平台独立的方式来做到这一点?我需要进行BIOS调用,所以如果有一种方法可以在不使用asm代码的情况下实现这一点,那么它对我也同样有用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-14 14:05:31

使用GCC

代码语言:javascript
复制
__asm__("movl %edx, %eax\n\t"
        "addl $2, %eax\n\t");

使用VC++

代码语言:javascript
复制
__asm {
  mov eax, edx
  add eax, 2
}
票数 81
EN

Stack Overflow用户

发布于 2008-09-15 00:10:08

在GCC身上,还有更多的事情要做。在指令中,你必须告诉编译器发生了什么变化,这样它的优化器就不会搞砸了。我不是专家,但有时它看起来像这样:

代码语言:javascript
复制
    asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");

用C语言编写一些示例代码,然后让GCC生成汇编清单,然后修改代码,这是一个好主意。

票数 18
EN

Stack Overflow用户

发布于 2008-09-14 13:57:56

阅读这篇讨论C/C++内联汇编的文章是一个很好的开始:

http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx

文章中的示例:

代码语言:javascript
复制
#include <stdio.h>


int main() {
    /* Add 10 and 20 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                "movl $20, %ebx;"
                "addl %ebx, %eax;"
    );

    /* Subtract 20 from 10 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                    "movl $20, %ebx;"
                    "subl %ebx, %eax;"
    );

    /* Multiply 10 and 20 and store result into register %eax */
    __asm__ ( "movl $10, %eax;"
                    "movl $20, %ebx;"
                    "imull %ebx, %eax;"
    );

    return 0 ;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档