当前位置: 首页 > news >正文

编写汇编代码

1.点击初始框右下方的 Create a new project
image
2.点击Empty Project 项目,设置项目名和项目位置
image
3.配置汇编环境
右键单击项目名称-->选择生成依赖项-->选择生成自定义
image
选择masm(.target.props),然后点击确定
image
4.新建汇编文件
右键点击项目名称-->选择添加-->新建项
image
选择C++文件(.cpp)-->修改名称.cpp为sum.asm
image
5.配置链接器,设置入口点
点击 linker 项-->找到 Advenced-->设置 Entry Point 为 main
image
6.检查文件项类型
右键点击sum.asm-->选择属性-->选择常规-->选择项类型-->更改项类型为Microsoft Macro Assembler
image
汇编例子1:打印"Hello,World!"

EXTERN GetStdHandle : PROC
EXTERN WriteFile : PROC
EXTERN ExitProcess : PROC.DATA?
hFile QWORD ?
BytesWritten DWORD ?.DATA
hello BYTE 'Hello world!', 13, 10.CODE
main PROC
; https://blogs.msdn.microsoft.com/oldnewthing/20160623-00/?p=93735
sub rsp, 40 ; Shadow space (4 * 8) & 1 parameter (8 bytes)
; https://docs.microsoft.com/en-us/cpp/build/stack-allocation
and spl, -16 ; Align to 16; https://msdn.microsoft.com/library/windows/desktop/ms683231.aspx
mov ecx, -11 ; DWORD nStdHandle = STD_OUTPUT_HANDLE
call GetStdHandle ; Call WinApi
mov hFile, rax ; Save returned handle; https://msdn.microsoft.com/library/windows/desktop/aa365747.aspx
mov rcx, hFile ; HANDLE hFile (here: Stdout)
lea rdx, hello ; LPCVOID lpBuffer
lea r9, BytesWritten ; LPDWORD lpNumberOfBytesWritten
mov r8d, LENGTHOF hello ; DWORD nNumberOfBytesToWrite
mov qword ptr [rsp+32], 0 ; LPOVERLAPPED lpOverlapped = NULL
call WriteFile ; Call WinAPIexit:
; https://msdn.microsoft.com/library/windows/desktop/ms682658.aspx
xor ecx, ecx ; Set RCX to null for return value
call ExitProcess ; Call WinAPI to exit
main ENDPEND

汇编例子2:MessageBox,打印“Hello,World!"

extrn MessageBoxA: proc;64位没有 .model 宏指令,不能指定内存模型和调用约定.data
text     db 'Hello World', 0
caption  db 'Selph First x64 Application', 0.code
main procsub rsp,28h		; 函数调用前需要预留影子空间,对齐rspxor r9d,r9dlea r8, captionlea rdx, textxor rcx,rcxcall MessageBoxA	; 函数调用使用fastcalladd rsp,28h
main ENDP
END				; 最后直接end,不用指明符号

备注:
为什么用vs2022编写汇编总会报错invalid character in file?
最常见的原因是当代码中包含中文注释或特殊字符时。
解决方案:

  • 点击 文件 → 另存为 → 保存按钮旁边的下拉箭头 → 编码保存
  • 选择 "Western European (Windows)"
  • 避免在汇编代码中使用中文注释
http://www.jsqmd.com/news/194817/

相关文章:

  • 基于Java的奖项评选智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • AI辅助产品开发全流程:从需求文档到代码生成的智能解决方案
  • 2025年行业内优秀的气动吊制造厂排名,气葫芦/75吨气动葫芦/HQ气动葫芦/3吨气动葫芦/30吨气动葫芦/吊钩式气动葫芦气动吊企业推荐榜 - 品牌推荐师
  • 深入理解 JVM 底层原理,从入门到大神的实战指南
  • 大模型的技术本质和发展趋势,非常详细收藏我这一篇就够了
  • AI工具人人会用,但这两大能力才是你的护城河(收藏必学)
  • 掌握AI大模型:从入门到精通的完整学习路线(必收藏)_AI大模型学习路线(非常详细)
  • 一文讲透智能体(AI Agent ),非常详细收藏我这一篇就够了
  • LaTeX 符号表大全
  • 大模型技术全景解析:从围观到宏观,从宏观到微观的系统学习之路_大模型技术学习过程梳理
  • 在debian13上如何解决macbook pro facetimehd摄像头不能用的问题
  • Amazon和UCLA团队突破传统界限,开启无监督智能训练新纪元
  • 2026年大模型转行攻略:避开3大误区,4大方向精准定位_基础能不能转大模型?到底怎么转?
  • 卡内基梅隆大学打造“神经侦探“:让AI像破案一样学会理解语音
  • JavaScript 中 Set 和 Map 的示例
  • C语言动态规划:最长公共子序列深度解析 - 指南
  • 第九课Open3D点云数据处理:直通滤波
  • 基于SpringBoot的音爆票务摇滚乐队演出购票网站毕业设计项目源码
  • 《智慧农业AI智能体,为农业智能化转型筑牢坚实基础》
  • 第十二课Open3D点云数据处理:半径-均值组合滤波
  • vLLM 优化- Pipeline Parallel Transformer block
  • Kotlin类代码实战
  • 基于SpringBoot的演唱会门票购票网站系统毕业设计项目源码
  • 深度学习毕设选题推荐:基于人工智能 python的人脸识别系统设计与实现
  • 基于SpringBoot的医院人事管理系统的设计与实现毕业设计项目源码
  • 系统架构设计师(软考高级)设计模式备考指南
  • 基于SpringBoot的服装商城销售系统毕业设计项目源码
  • 计算机深度学习毕设实战-基于python的人脸识别系统设计与实现人工智能
  • 基于SpringBoot的一站式公务员备考系统的设计与实现毕业设计项目源码
  • 会话(Session)与Cookie的原理、应用与安全实践