使用 Visual Studio 2017 写纯 64 位汇编(intel 风格)

asm 专栏收录该内容
5 篇文章 0 订阅

1. 新建个 Visual C++ 的空项目


关闭 [安全开发生命周期(SDL)检查],并选择空项目


2.生成依赖性


选择 masm 依赖项并生成 

注意:若先创建了 asm 文件再生成依赖项,asm 文件是不会被汇编软件编译的!解决方案在最后!


3.新建 asm 汇编文件


4.编写汇编语言


		.code			;代码段      !64 位没有 .model 宏指令,无法设置内存模型和生成的代码风格!
main proc				;main函数开始
	
	mov rax, 120
	add rax, 34
	sub rax, 130

	ret

main endp				;main函数结束
end
					;masm x64 没有指定入口点的宏指令!

关于 masm x64 没有指定入口点的宏指令 的问题,会在最后的参考博客中给出链接(国外论坛和微软官方的解答

5.将调试器位数换成 x64


6.选择 项目->属性 [配置属性->连接器->高级[入口点   输入您想入口的函数名]]

4 步骤中的汇编代码,我用 main 当作入口函数,所以这里填入的是 main

若想让入口点为 a 函数,即下面贴的汇编代码,则在入口点处填个 a (表示 a 函数是程序的入口点)

		.code			;代码段     !64 位无法使用 .model 宏指定内存模型和生成的代码风格!
a proc				        ;a函数开始
	
	mov rax, 120
	add rax, 34
	sub rax, 130

	ret

a endp				        ;a函数结束
end



7.在第一条语句打下断点,然后执行程序


8.在 调试->窗口->打开寄存器、内存、反汇编 之类的信息窗口(根据需要选择)

若没有这些选项,说明您没有(调试)运行程序 参照第七条

9.选择蓝圈中不同的执行方式,来调试您的汇编程序


提示:在上图左下 [寄存器] 显示框中,可右键选择您想显示的寄存器

结束






可能遇到问题的解决方案:(遇到其他问题,请留言,我会找解决方法)

一. asm 文件没有被编译

 原因:若先创建了 asm 文件再生成依赖项,已创建的 asm 文件是不会被汇编软件编译的,已创建的 asm 文件的属性是不能被编译的属性

    ①打开 .asm 文件的的属性


    ②在常规中更改 项选项 位 Microsoft Macro Assembler


二. error LNK2005: main 已经在 a.obj 中定义

( main 是您定义的入口点函数,若是定义的入口点函数 a,则异常是 error LNK2005: main 已经在 *.obj 中定义)

    原因:在一个项目里定义了多个 asm 文件,并具有相同的入口函数

    解决方案1:用项目分割不同的 asm 文件

    解决方案2:不同的 asm 文件定义不同的函数入口点,运行相应汇编程序时,照着步骤六修改项目的程序入口点为相应文件的入口函数


三. 为什么我使用中断会触发异常

    原因:Windows10 上的程序是运行在 CPU 保护模式下的,在此模式下只能触发系统定义的软中断,无法触发硬中断,若想触发硬中断,请使用 DosBox 模拟 CPU 实模式





推荐书籍:

《现代x86汇编语言程序设计》

汇编语言:基于x86处理器》


参考博文:

Visual Studio 2017 asm 高亮插件:

https://blog.csdn.net/sinat_27382047/article/details/70339455#comments

http://blog.csdn.net/maguanzhan7939/article/details/78608345

masm 宏定义规则:

https://msdn.microsoft.com/en-us/library/wxy1fb5k.aspx

关于 masm x64 没有指定入口点的宏指令 的问题:

https://docs.microsoft.com/zh-cn/cpp/assembler/masm/masm-for-x64-ml64-exe

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2107f634-1152-4a85-ae48-0d580aaf3f02/why-does-64bit-masm-not-accept-an-entry-point-address-on-the-end-directive?forum=vcgeneral


推荐阅读:

使用 Visual Studio 2017 写纯 32 位汇编(intel 风格)

https://blog.csdn.net/alisebeast/article/details/79875393

评论 22 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

〇VEA

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值