Visual Studio 2022 MASM x64汇编hello world以及调试(Console版 + Windows版)

本文介绍使用Visual Studio 2022的MASM开发x64汇编程序hello world的环境配置和汇编代码,作为学习CPU指令的起点。分两个版本的hello world, 一个是console版本,另一个是windows版本。

第1步: 安装

首先安装visual studio community 2022,下载地址 https://visualstudio.microsoft.com/,安装时选择C++开发模块

第2步:新建项目,配置项目

安装好以后新建项目,项目类型选择C++  console  empty project

创建好项目以后右击项目,点击生成依赖项,生成自定义,勾选masm,确定

第3步:Windows版的hello world

接下来添加汇编源文件,在项目的源文件上右击添加新项目,选择C++文件,但是文件名使用.asm扩展名

然后在asm文件中填入代码:

extrn MessageBoxA: proc

;64位没有 .model 宏指令,不能指定内存模型和调用约定

.data
text db 'Hello World', 0
caption db 'Selph First x64 Application', 0

.code
WinMain proc
sub rsp,28h ; 函数调用前需要预留影子空间,对齐rsp
xor r9d,r9d
lea r8, caption
lea rdx, text
xor rcx,rcx
call MessageBoxA ; 函数调用使用fastcall
add rsp,28h
WinMain ENDP
END ; 最后直接end,不用指明符号

设置项目的类型为windows:右击项目,属性,链接器,系统,在子系统里选择窗口(/subsystem:windows)

并在链接器,高级里设置入口为WinMain

然后编译生成项目,生成前确保工具栏显示的是 debug - x64,运行生成出来的exe文件会看到弹出hello world 窗口。

第4步:Console版的hello world

接下来我们看一下console版的Hello world

将asm文件的内容改为:

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 WinAPI

exit:
; 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 ENDP

END

在项目,属性,链接器,系统,在子系统里选择控制台(/subsystem:console)

在链接器,高级里设置入口为main

右击项目,调试,调试前确保工具栏显示的是 debug - x64,会看到在控制台输出hello world

第5步:调试汇编程序

当我们在汇编代码中设置一个断点,然后开始调试,在这个断点停下时,visual studio的调试菜单的窗口里会多出一些选项,比如寄存器、反汇编、内存,点击寄存器,会显示出寄存器的值,点击反汇编,会在源代码中显示相应的机器码,点击内存能看到内存的内容,这些信息将帮助我们方便地调试。

参考资料

在win10 64位系统上使用visual studio2019创建汇编asm程序工程_enderwsp的博客-CSDN

https://blog.csdn.net/Ender__/article/details/93884634

使用 Visual Studio 2017 写纯 64 位汇编(intel 风格)_〇VEA的博客-CSDN博客_x64汇编书籍

https://blog.csdn.net/Alisebeast/article/details/79875620

使用VS2022编写x64汇编程序 - 我可是会飞的啊 (kn0sky.com)

https://www.kn0sky.com/?p=112

https://stackoverflow.com/questions/52796300/assembly-programming-winasm-vs-visual-studio-2017

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Visual Studio 2022支持使用MASMMicrosoft Macro Assembler)进行x64汇编开发。下面是一些关于在Visual Studio 2022中使用MASM x64汇编的基本步骤: 1. 安装Visual Studio 2022:首先,确保你已经安装了最新本的Visual Studio 2022。你可以从官方网站下载并安装Visual Studio 2022。 2. 创建一个新的空白项目:打开Visual Studio 2022,创建一个新的空白项目。选择合适的语言和平台(如C++和Windows),然后点击“下一步”。 3. 添加汇编源文件:在解决方案资源管理器中,右键单击项目,选择“添加” -> “新建项”。在弹出的对话框中,选择“汇编源文件”并命名它。这将为你创建一个以.asm为扩展名的汇编源文件。 4. 配置项目属性:右键单击项目,选择“属性”。在属性页中,选择“配置属性” -> “常规”。确保“字符集”设置为“使用多字节字符集”。 5. 编写汇编代码:打开汇编源文件,并开始编写你的x64汇编代码。使用MASM语法编写代码,并确保按照正确的指令格式和语义进行编写。 6. 构建和运行:保存汇编源文件后,按下F7键或选择“生成” -> “生成解决方案”来构建项目。如果没有编译错误,你可以运行生成的可执行文件来执行你的汇编代码。 这只是一个简单的指南,帮助你入门使用MASM x64汇编语言在Visual Studio 2022中进行开发。你可以查阅更多的文档和教程来深入了解和扩展你的汇编开发经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuzen

您的资助将帮助我创作更好的作品

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值