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

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

Is there a way to insert assembly code into C?

我记得当初使用旧的borland DOS编译器时,您可以执行以下操作:

1
2
3
4
asm {
 mov ax,ex
 etc etc...
}

现在是否有一种半平台独立的方式来执行此操作?我需要进行BIOS调用,因此,如果有一种方法可以在没有asm代码的情况下进行此操作,那对我同样有用。


使用GCC

1
2
3
4
__asm__("movl %edx, %eax\
\\t"

       "addl $2, %eax\
\\t"
);

使用VC

1
2
3
4
__asm {
  mov eax, edx
  add eax, 2
}

在海湾合作委员会,还有更多的东西。在指令中,您必须告诉编译器进行了哪些更改,以便其优化程序不会出错。我不是专家,但有时看起来像这样:

1
    asm ("lock; xaddl %0,%2" :"=r" (result) :"0" (1),"m" (*atom) :"memory");

最好用C编写一些示例代码,然后要求GCC生成程序集列表,然后修改该代码。


阅读本文有关在C / C中进行内联汇编的一个很好的开始:

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

文章示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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 ;
}

对于Microsoft编译器,仅x86支持内联汇编。对于其他目标,您必须在单独的汇编源文件中定义整个函数,然后将其传递给汇编器并链接生成的对象模块。

您极不可能在保护模式操作系统下调用BIOS,并且应使用该系统上可用的任何功能。即使您处于内核模式,也可能不安全-如果这样做,BIOS可能无法正确地相对于操作系统状态进行同步。


推荐阅读

    linux分辨率操作命令?

    linux分辨率操作命令?,系统,情况,分辨率,底部,状态,命令,屏幕,屏幕分辨率,

    linux定时执行命令?

    linux定时执行命令?,时间,系统,服务,任务,工作,标准,情况,周期性,工具,命令,l

    linux看命令执行过程?

    linux看命令执行过程?,系统,服务,状态,软件,时间,数据,地址,命令,进程,情况,l

    linux登陆执行命令?

    linux登陆执行命令?,系统,服务,工具,地址,密码,百度,管理,检测,网络,第一,怎

    linux常见操作命令?

    linux常见操作命令?,系统,工作,信息,管理,地址,命令,目录,单位,数据,标准,lin

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    linux下执行命令行?

    linux下执行命令行?,工作,系统,信息,单位,命令,基础,地址,设备,权威,标准,mv

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux汇编语言命令?

    linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    红帽子linux操作命令?

    红帽子linux操作命令?,服务,系统,密码,环境,信息,通用,软件,状态,设备,命令,

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux汇编语言命令?

    linux汇编语言命令?,系统,地址,代码,数据,网络,平台,平均,位置,灵活,工作,汇

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux执行两条命令?

    linux执行两条命令?,单位,工作,地址,命令,连续,系统,分行,权威,信息,目录,Lin

    linux执行pl命令?

    linux执行pl命令?,代码,服务,工具,位置,标准,系统,首页,数据,操纵,环境,perl

    linux命令执行10次?

    linux命令执行10次?,地址,工作,信息,系统,命令,目录,标准,设备,发行,文件,Lin

    linux执行命令后无号?

    linux执行命令后无号?,系统,环境,信息,工具,状态,数据,命令,文件,字符集,环