环境
- 当前
linux
环境是debian
,安装软件如下:gcc
make
nasm
1 |
sudo apt install gcc make nasm |
IDE
clion
CLion插件
NASM Assembly Language
- 文件识别
- 语法高亮
Cpp文件
- 这个
my_strlen
是汇编文件里面定义的 extern "C"
不可缺少
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> extern "C" int my_strlen(char*); int main() { std::cout << "Hello, World!" << std::endl; char * parm = "nasm dev ok."; auto len = my_strlen(parm); std::cout << len << std::endl; return 0; } |
Nasm文件
- 这里的
global
不可缺少 - 功能是计算字符串长度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[BITS 64] global my_strlen section .text my_strlen: push rbp mov rbp, rsp xor rcx, rcx loop: cmp BYTE [rdi + rcx], 0 jz end inc rcx jmp loop end: mov rax, rcx mov rsp, rbp leave ret |
Cmake文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
cmake_minimum_required(VERSION 3.26) project(test_nasm) set(CMAKE_CXX_STANDARD 17) enable_language(ASM_NASM) set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64) set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <INCLUDES> <FLAGS> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>") set_source_files_properties(test.asm PROPERTIES COMPILE_FLAGS "-g -Fdwarf") if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_ASM_NASM_FLAGS "${ASM_NASM_FLAGS} -g -Fdwarf") else () set(CMAKE_ASM_NASM_FLAGS "${ASM_NASM_FLAGS}") endif () add_executable(test_nasm test.nasm main.cpp) |
文件结构
1 2 3 4 5 6 |
├── cmake-build-debug │ ├── ... │ └── test_nasm ├── CMakeLists.txt ├── main.cpp └── test.nasm |
图示
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ C++编程规范101规则、准则与最佳实践 二01/07
- ♥ Boost 程序库完全开发指南:函数并发08/25
- ♥ Protobuf记述与使用01/24
- ♥ 包管理器:设计与实现09/18
- ♥ C++17_第二篇12/22
- ♥ C++17_第一篇12/20