环境
- 当前
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所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Spdlog记述:一07/07
- ♥ COM组件_101/31
- ♥ C++_函数模板、类模板、特化、模板元编程、SFINAE、概念06/22
- ♥ STL_了解05/02
- ♥ C++并发编程 _ 内存模型原子操作08/07
- ♥ C++标准模板库编程实战_适配器12/07