x64 Assembly Tutorial 1 : Getting into x64 ASM from C++
VS2017中64位汇编设置
1) 新建一个Visual C++类型的空项目;
2)右键新建的空项目,选择“生成依赖项”---> “生成自定义”,勾选 “masm”,如下图所示:
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!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了