• VS2010 C语言内嵌汇编语言程序


    VS2010 C语言内嵌汇编语言程序

    2021年7月28日·席锦

    在visual studio 2010中C语言使用内联汇编写代码 ,它的格式有两种,

    一种是__asm 直接接汇编指令语句,比如:__asm int 3     // 软件中断

    另一种是加上花括号,类似于一个函数,比如

    __asm

    {

    mov eax, 1 ;1到eax

    mov ebx, 2 ;2到ebx

    add eax, ebx ;eax 和ebx相加,含义为:eax+=ebx

    }

    使用内联汇编有个好处可以直接使用C/C++中的变量 ,比如

    int a;

    __asm mov a, 2 // 可以使用变量,只有一条,含义为:给变量a赋值为2

    另外使用内联汇编最需要注意的是数组。比如:int b[2] = {1,2} ;

    不可以直接

    __asm

    {

    mov b[0], 1

    mov b[1], 2

    }

    这样是错误的, 需要

    __asm

    {

    mov b[0], 1

    mov b[4], 2

    }

    为什么是4呢?因为内联汇编转换后是数组a的地址偏移,而不是序号。

    下述是在VS2010中编译通过的示例代码

    1. #include
    2. int main()
    3. {
    4. printf("Hello, World!\n");
    5. __asm int 3 // 软件中断
    6. int a;
    7. __asm mov a, 2 // 可以使用变量,只有一条,含义为:给变量a赋值为2
    8. printf("a=%d\n", a);
    9. // 需要在调试模式(F5)中查看下述eax、ebx的值
    10. __asm
    11. {
    12. mov eax, 1 ;1到eax
    13. mov ebx, 2 ;2到ebx
    14. add eax, ebx ;eax 和ebx相加,含义为:eax+=ebx
    15. }
    16. int b[2] = {0, 1};
    17. __asm
    18. {
    19. mov b[0], 1
    20. mov b[4], 2
    21. }
    22. printf("bye, World!\n");
    23. return 0;
    24. }

    运行截图(F5进入调试模式可查看上文中叙述的变量值):

  • 相关阅读:
    12 克莱姆法则的几何解释
    Mybatis的各种查询功能
    10、MyBatis-Plus 多数据源
    一文了解“字符集”
    Docker网络
    机器人过程自动化(RPA)入门 2. 录制播放
    活动安排问题(贪心算法)
    Calibre-web电子书库创建
    BGFX多线程渲染
    力扣2578. 最小和分割
  • 原文地址:https://blog.csdn.net/xijinno1/article/details/133872894