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

第0步 打开VS 2022 点击创建新项目

在这里插入图片描述

第1步 选择windows 桌面向导

在这里插入图片描述

第2步 配置项目

在这里插入图片描述

第3步 选择空项目

在这里插入图片描述

第4步 找到生成依赖项 选择生成自定义

在这里插入图片描述

第5步 勾选masm

在这里插入图片描述

第6步 新建文件

在这里插入图片描述

第7步 选择cpp文件并在下方手动指定asm后缀

在这里插入图片描述
输入如下代码

; AddTwo.asm - 两个32位整数相加
; 第三章示例

.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD

.code
main PROC
	mov eax, 5
	add eax, 6

	INVOKE ExitProcess, 0
main ENDP
END main

第8步 配置解决方案的平台

在这里插入图片描述

第9步 查看asm文件的属性页

在这里插入图片描述
若此处为ml64.exe ,则之后的运行会报错,因为用的是64位汇编,我们这里是32位。

第10步 为程序打上断点

在这里插入图片描述

第11步 点击F5开始调试

在这里插入图片描述

第12步 CTRL+ALT+G 打开寄存器

在这里插入图片描述

第13步 按F11逐步运行

在这里插入图片描述
可看到此处eax的值被修改,eip(extended instruction pointer)指令寄存器的值也发生了变化。

第14步 按F11继续运行

在这里插入图片描述
可看到EAX = 0Bh = 11d = 5d + 6d, 运行结果正确。

继续F11单步执行 程序结束

至此,第一个x86程序运行完毕。

可能遇到的问题

1.asm 文件没有被编译

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

2. 使用中断会触发异常

原因:Windows上的程序运行在保护模式下,在此模式只能触发系统定义的软中断,无法触发硬中断。

如果还有遇到的问题,可留言,尽力帮

小白一个,如有错误,还望指出。
简述一下配置过程和思路,如果能帮助到你那是最好。
起源为今天通过王爽那本学习完了16位的汇编语言。想更进一步学习32位。
毕竟现在基本上都是32和64位机器。
最开始打算先看看C代码得到的汇编代码。
于是写了一个简单的C代码。

gcc -s a.i -o a.s

得到的一个a.s文件。
然后就想打开看看,但是用VSCode尝试了半天也不行。
下了一堆插件,后来整烦了,,,(主要是不知道是什么编码)
于是就打算直接下链接器和汇编器,写32位代码。
但是下完了nasm和link后,没在指定的路径找到kernel32.dll,网上找的都是要C盘一块搜索,懒得找了。
就转VS了。
然后按照别人的流程来了一遍,总是报错。微软官方的错误提示页面没找到这个错误。
报错格式类似于

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 A2004 symbol type conflict tasm C:\Users\wulil\Desktop\研讨\tasm\tasm\t.asm 18
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 A4023 with /coff switch, leading underscore required for start address : main tasm C:\Users\wulil\Desktop\研讨\tasm\tasm\t.asm 66
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 MSB3721 命令“ml64.exe /c /nologo /Zi /Fo"Debug\t.obj" /W3 /errorReport:prompt /Tat.asm”已退出,返回代码为 1tasm D:\visualstudio\Common7\IDE\VC\VCTargets\BuildCustomizations\masm.targets 69

后来在别人文章的评论区找到了和我有相同问题的人,不过别人写的是16位代码。
后来突然明白了,这是因为汇编代码操作的机器和所采用的汇编器位数不对应,这才去修改了当前文件的机器 。
然后成功运行。

参考书籍

《汇编语言:基于X86处理器》
《汇编语言》王爽,3e

参考博文

VS2017写Intel32
WIN10写汇编的3种方法

进一步阅读

VS2017 写汇编调用C库函数
高亮插件

  • 33
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值