he3691526 2023-03-19 22:56 采纳率: 100%
浏览 26
已结题

VS x64汇编 与C++ 代码互用

求帮忙:VS中使用x64汇编问题 求推荐教程

1在cpp文件里 咋使用 asm汇编文件里的【变量】
2在asm汇编文件里 咋使用 cpp文件里的【变量 】

3在asm汇编文件里 咋调用 cpp文件里的【函数】
4在cpp文件里 咋调用 asm汇编文件里的【函数】

  • 写回答

3条回答 默认 最新

  • lshen01 2023-03-19 22:58
    关注

    参考GPT和自己的思路:

    1. 在cpp文件里使用asm汇编文件里的变量,需要使用extern关键字声明该变量,示例代码如下:

    在asm汇编文件:

    GLOBAL myVariable     ; 声明变量
    SECTION .data
    myVariable  dd 10     ; 定义变量并赋初值10
    

    在cpp文件:

    extern int myVariable; // 声明变量
    myFunction() {
       int result = myVariable + 2; // 使用变量
    }
    
    1. 在asm汇编文件里使用cpp文件里的变量,需要在asm汇编文件中使用EXTERN关键字声明该变量,示例代码如下:

    在cpp文件中:

    int myVariable = 20;    //定义变量并赋值为20
    

    在asm汇编文件中:

    EXTERN myVariable  ; 声明变量
    SECTION .text
    myFunction:
       mov eax, [myVariable] ; 使用变量
       ...
    
    1. 在asm汇编文件里调用cpp文件里的函数,需要在asm汇编文件中使用EXTERN关键字声明该函数,示例代码如下:

    在cpp文件中:

    void myFunction() {
       // 函数实现
    }
    

    在asm汇编文件中:

    EXTERN myFunction  ; 声明函数
    SECTION .text
    main:
        call myFunction    ; 调用函数
        ...
    
    1. 在cpp文件里调用asm汇编文件里的函数,需要先在asm汇编文件中给函数定义一个全局标识符(global label),然后在cpp文件中使用extern关键字声明该全局标识符,示例代码如下:

    在asm汇编文件中:

    global myFunction    ; 定义全局标识符
    SECTION .text
    myFunction:
        ...
    

    在cpp文件中:

    extern "C" void myFunction();    // 声明全局标识符
    int main() {
        myFunction();    // 调用函数
        ...
    }
    

    需要注意的是,由于汇编代码一般都是基于c调用约定的,在cpp中使用asm时,需要注意将extern声明的函数加上"C"修饰符,避免函数名被Mangling导致无法在asm中找到对应函数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 软件定义网络mininet和onos控制器问题
  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。