MENU

VS 中 64 位内联汇编

February 9, 2022 • Read: 1184 • C/C++

一、在asm文件中单独编写功能函数

比如造一个加法函数:

ULONG64 myadd(ULONG64 u1, ULONG64 u2);

在源文件下添加一个asm文件

新建一个myadd.asm文件

二、在源文件中申明我们要用的函数

EXTERN_C ULONG64 add(ULONG64 u1, ULONG64 u2);

三、设置asm文件的生成方式

右键项目名,左键属性

从生成中排除:选择否
项类型:自定义生成工具

然后,我们继续对.asm文件进行设置,将其包含到项目工程中来编译链接。选中myadd.asm文件,右击选择属性,来到myadd.asm属性页进行设置。在 命令行 中输入ml64 /c %(fileName).asm,在 输出 中输入%(fileName).obj,其它保持默认即可,点击确定即可完成设置。

对于 64 位程序在.asm中写代码,需要遵循以下几个规则:
1.汇编文件.asm文件必须以关键字.CODE开始,关键字END结束,大小写都可以。

.code
    ; 此处写汇编指令代码
end

2.所有的汇编代码以函数方式组织在一起。也就是说,我们要将汇编代码封装成一个个汇编函数。要注意64位汇编中的函数声明以及调用约定

.code
  //myadd是汇编函数
myadd    proc
    //此处写汇编函数的代码
myadd    endp
end

其中,myadd是汇编函数的名称,proc是汇编函数的关键字,endp是汇编函数的结尾关键字。

四、在主函数中使用

#include <iostream>
#include <windows.h>
#include <tchar.h>

//声明引用外部函数
EXTERN_C ULONG64 myadd(ULONG64 u1, ULONG64 u2);

int main(int argc, _TCHAR* argv[])
{
    ULONG64 result = myadd(0x111111111, 0x333333333);
    printf("result = 0x%I64X\n", result);
    return 0;
}
回到上个页面 QR Code
QR Code for this page
Tipping QR Code