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

2023-11-07

第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库函数
高亮插件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Visual Studio 2022 写纯32位汇编(intel风格) 的相关文章

随机推荐