.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\ include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32 .lib includelib \masm32\lib\gdi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD;函数声明,将在后面进行函数的定义 RGB
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\ include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32 .lib includelib \masm32\lib\gdi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD;函数声明,将在后面进行函数的定义
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\ include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32 .lib includelib \masm32\lib\gdi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD;函数声明,将在后面进行函数的定义 RGB
.386 .model flat,stdcall option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32 \include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data ClassName db "SimpleWinClass",0
RadAsm配置 RadAsm配置环境 1.1 RadAsm下载安装,与Masm32下载安装 RadAsm下载可以去Github下载: https://github.com/mrfearless/RadASM2 不过你可以在开始菜单中找到(WIN10) Masm32编译器安装 想使用RadAsm就必须安装Masm32. 他会在盘符下面创建masm32文件夹. 注意,只能选择盘符.因为它不支持选择盘符下的xxx文件夹.不过不影响. 因为你没有设置路径.所以会导致你编译的时候出错 设置Masm32编译环境 选项->设置路径 如下图所示 ? 只需要设置两个路径即可.也就是上图画出来的. 一个是你刚刚安装好的 Masm32的根路径,比如我在盘符 "G"下面安装的,我就选择这个 另一个是你的调试器.因为编写的是32位汇编.所以我选择的是 x32Dbg.exe的路径.
.model flat,stdcall option casemap:none DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD include D:\masm32 \include\windows.inc include D:\masm32\include\user32.inc include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\user32.lib includelib D:\masm32\lib\kernel32.lib .data DlgName db 'MyDialog',0 AppName
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\ include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32 .lib includelib \masm32\lib\gdi32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD;函数声明,将在后面进行函数的定义 RGB
我用的IDE是masm32 官方网站是:http://www.masm32.com/ 下载的地址是:http://www.masm32au.com/masm32/m32v10r.zip (这个包适合中国人开发
希望得到大家的支持 .386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32 \include\windows.inc include D:\masm32\include\user32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32.lib WinMain proto :DWORD,:DWORD
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\ include\windows.inc include D:\masm32\include\user32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\kernel32.lib WinMain proto :DWORD,:DWORD
MASM32是国外的MASM爱好者Steve Hutchesson自行整理和编写的一个软件包,目前最高版本为11r版。 MASM32并非指Microsoft的MASM宏汇编器,而是包含了不同版本工具组建的汇编开发工具包。
inc文件格式,和.lib文件的说明 1..inc文件说明 上面我们使用了各种.inc文件,我们看下内部是什么,比如windows.inc 对于.inc文件,有个第三方出的工具,可以自动生成,我们看下(MASM32 然后看下面的代码,有个 add ESP,0X8,则表明strcpy是一个C调用约定 因为C调用约定必须外面平栈 2.静态的使用 静态的使用,则用libc.lib,这里面存放了代码,但是需要注意一下,我们提供的工具 MASM32 有这个, 而VC++6.0中也有,VS系列也有,至于使用那个版本,就看环境变量谁在前边了,(最好不用MASM32的) MASM32的libC不全,会导致我们编写代码出错,我们可以从其他位置拷贝一个,放到 MASM32的lib文件夹中 (因为我的环境变量他在最前边,所以优先找他,所以我要拷贝,或者你直接拷贝到根目录下) 静态使用分为两步 1.包含lib includelib libc.lib 2.对你使用的函数声明一下
上可以运行的DosBox和BC3.1 https://blog.csdn.net/doniexun/article/details/45438457-Windows10下搭建汇编语言开发环境(利用DOSBOX和MASM32
我写过 C89、MASM32、C#、PHP、Delphi、ActionScript、JavaScript、Erlang、Python、Haskell、D、Rust,以及令人闻风丧胆的脚本语言 InstallShield 第一个例子是用 MASM32 编写的。这是一个带有“if”和“while”的宏汇编器,用于编写原生Windows 应用程序。注意,不是以前有人这么写,而是至今仍在采用这种写法。 微软一直在积极维护Windows 与 Win32 API 的向后兼容性,因此所有以前编写的 MASM32 程序都可以在现代 PC 上正常运行。 但在 21 世纪,硬件架构的演变如此缓慢,我在 20 年前用 MASM32 写的程序如今仍然能完美运行,但我不敢确定去年用 CMake 3.21 构建的 C++ 应用程序今时今日能否用 CMake 3.25
可以继续优化,但是比如手动敲命令行了.注意,这里使用的masm32的link连接器 首先我们要去掉分区,因为这里的EXE主要是分区太多.所以去掉. 怎么去掉? 只需要把上面的汇编代码修改一下即可. 注意一下,这里我使用的是RadAsm集成开发环境, 编译器是Masm32的link连接器.
以前的版本则是你指定文件夹,默认的调试器是Ollydbg.exe,所以我们名字还要改为这个才可以 4.library: 库的路径,有时候你编写汇编程序,会使用lib库,也会使用inc文件,那么可以把我们昨天的MASM32 的库路径放到这里,也可以用高版本的,比如vc++6.0的,或者vs系列的都是可以的 注意: 上面配置的编译选项,以及连接选项,我们都是安装的MASM32的,也就是昨天提供的工具,我们把它的路径设置为环境变量 然后大家就把昨天安装的Masm32的路径配置一下即可 2.RadAsm的字体设置,以及中文乱码问题解决 关于RadAsm的字体,以及中文乱码,网上有很多解决方法,这里我只对当前最新版本的RadAsm3.0
130\Tools\Binn;C:\Program Files (x86)\Microsoft SQL Server\15 0\DTS\Binn;F:\masm32
好了,说了这么多,下面看一个实际的例子:(MASM32 8.2下编译通过) .386 .model flat,stdcall option casemap:none include windows.inc
add eax, v3 ret sum ENDP end ; main.asm 直接引用编译后的lib文件即可 ;这里的引入路径可以是全路径, 这里是相对路径 includelib /masm32
eax, v2 add eax, v3 retsum ENDPend; main.asm 直接引用编译后的lib文件即可;这里的引入路径可以是全路径, 这里是相对路径includelib /masm32