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

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

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

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

参考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中找到对应函数。

参考下
https://www.jb51.net/article/276390.htm

参考GPT和自己的思路:

  1. 在cpp文件里使用asm汇编文件里的变量,可以通过在asm汇编文件中定义全局变量,然后通过extern关键字在cpp文件中声明该变量,即可在cpp文件中使用。例如:

在asm汇编文件中:

.data
myVar DWORD 0

.code
;其他代码

在cpp文件中:

extern DWORD myVar;

void myFunction(){
    //使用myVar
    myVar = 100;
}
  1. 在asm汇编文件中使用cpp文件里的变量,同样可以通过在cpp文件中定义全局变量,并通过extern关键字在asm汇编文件中声明该变量,即可在asm汇编文件中使用。例如:

在cpp文件中:

//定义全局变量
int myVar = 0;

//其他代码

在asm汇编文件中:

extern myVar: DWORD

.code
;使用myVar
mov eax, DWORD PTR myVar
  1. 在asm汇编文件中调用cpp文件里的函数,可以通过在cpp文件中定义函数,并通过extern关键字在asm汇编文件中声明该函数,即可在asm汇编文件中调用。例如:

在cpp文件中:

void myFunction(){
    //函数体
}

在asm汇编文件中:

extern myFunction: PROC

.code
;调用myFunction函数
call myFunction
  1. 在cpp文件中调用asm汇编文件里的函数,可以通过在asm汇编文件中定义全局标号或全局函数,并通过extern关键字在cpp文件中声明该函数或标号,即可在cpp文件中调用。例如:

在asm汇编文件中:

myFunction: PROC
;函数体
ret
myLabel:
;text section其他代码

在cpp文件中:

extern "C" void __cdecl myFunction();
extern "C" void __cdecl myLabel();

int main(){
    //调用myFunction函数
    myFunction();

    //跳转到myLabel标号
    _asm{
        jmp myLabel
    }

    return 0;
}

希望这些答复对你有所帮助。在使用x64汇编与C++代码互用时,还需要考虑编译器是否支持对应的语法及调用约定,以及是否需要手动设置对应的编译选项。建议你先熟悉语法和约定,再寻找相关的教程和示例代码进行学习和实践。