x64 Assembly Tutorial 1 : Getting into x64 ASM from C++

VS2017中64位汇编设置
1) 新建一个Visual C++类型的空项目;
2)右键新建的空项目,选择“生成依赖项”---> “生成自定义”,勾选 “masm”,如下图所示:
setup_masm    setup_masm_2
3) 在项目"源文件"右键选择添加C++源文件,为文件命名时,选择.asm后缀,即可开始在该asm文件中填写汇编代码了。用该方法添加code.asm文件,编写如下汇编代码:

复制代码
.code

GetValueFromASM proc
    mov rax, 1234
    ret
GetValueFromASM endp

end
复制代码

注意,必须先作MASM设置,然后添加asm汇编源文件,否则会报错。

4) 在项目中添加main.cpp, 代码如下:

复制代码
#include <iostream>
using namespace std;

extern "C" int GetValueFromASM();

/*
// 32bits asm code, NOT work for x64 asm
int GetValueFromASM32bits
{
    _asm
    {
        mov eax, 32
    }
}
*/

int main()
{  
    cout << "Value is: " << GetValueFromASM() << endl;
    int id;
    cin >> id;
}
复制代码

5) 编译运行程序!


x64 Assembly Integer Data Types - x64汇编中的数据长度

Type bits Bytes C++ Type unsigned or signed Other
Bit
1
- bit - -
byte
8
1 char yes -
word
16
2 short yes -
dword (double word)
32
4 int yes -
qword (quad word)
64
8 long long yes -
xmmword
128
16 - - SSE support
ymmword
256
32 - - AVX support

x64 Register Set
rax : eax, ax, ah, al
rbx : ebx, bx, bh, bl
rcx : ecx, cx, ch, cl
rdx : edx, dx, dh, dl
rsi : esi, si
rdi : edi, di
rbp : ebp, bp
rsp : esp, sp
rip: eip, ip

x64 new general purpose register:
r8, r9, r10, r11, r12, r13, r14, r15
each of them can be used as:
r8: r8d, r8w, r8b

NO ds, es or ss in x64 register set!

posted @   opencoder  阅读(651)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示