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

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 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上