MASM32是一个免费的软件程序,让您编辑Microsoft宏汇编程序(MASM)代码从一个基本的文本界面。它强调MASM代码各部分以不同的颜色,使其更容易扫描和检测错误。它提供了一个简单的布局程序员手动编辑代码,没有任何花哨的功能或选项的常规Microsoft宏汇编。注意MASM32编辑器实际上并没有让你运行或编译的代码。对于这一点,你仍然需要Microsoft宏汇编程序

1,下载并安装MASM32。

2,MASM32文件夹中打开的editor.exe文件。

3,点击“浏览”。

4,选择的的MASM代码文件,你想编辑,然后单击“打开”。“这将显示你的代码,自动突出显示根据MASM32计划(命令一个颜色,文本另一种颜色,等等)。

5,进行更改,然后单击“保存”。

   这几天读了CSDN上人气相当旺的《疯狂的程序员》,有感于汇编语言入门之难,特写此文,以飱众多热心的网友,以邀更多的有心人共同探索充满神秘光环的汇编编程。
 
 
 
 
1.1  安装MASM32
 
 
http://www.masm32.com/下载MASM32。指定一个盘符后,其将被安装至该盘的一个名为“masm32”的路径中。下文介绍了如何在MASM32自带的编辑器及VC6 IDE中编写Hello World的汇编程序。
 
 
 
 
 
1.2   Quick Editor环境
 
 
MASM32自带一个Quick Editor的编辑器,位于masm32目录下,名为qeditor.exe。
作为一个IDE,Quick Editor让我们很方便地在其中进行编辑源码,连接并运行程序。
 
注意:尽管Quick Editor支持拖放操作,但不推荐这样做。因为这种作法不能使Quick Editor自动地将当前目录设为所打开文件所在的目录,其结果,就是在连接时,提示找不到.obj文件。正确的作法是,先运行Quick Editor,再通过菜单File->Open打开相应的源码。
 
在Quick Editor修改代码后,一定要记得先存盘,才编译及连接。否则,所生成的执行文件还依旧是未保存之前的旧版本。
 
新建一个文件夹HelloWorld,打开Quick Editor,输入下面的源码,并将其存至HelloWorld文件夹中,名为“HelloWorld.asm”。
 ; HelloWorld.asm

 comment * ----------------------------------------------
The First Assemble Application
---------------------------------------------- * .
.model flat, stdcall
option casemap:none 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
szCaption db 'System Information',
szText db 'Hello, World!', .code
start:
invoke MessageBox,/ ; 调用函数名
NULL,/ ; 父窗口句柄
offset szText,/ ; 文字
offset szCaption,/ ; 标题
MB_OK ; 按钮类型 invoke ExitProcess, NULL
end start
代码中,“/masm32/include/”及“/masm32/lib/”分别限定了Quick Editor所能识别的包含文件及库文件的路径。这样,即使我们没有在操作系统的环境变量中设置相应的路径,Quick Editor也能找到这些文件。
 
下面是汇编、连接及运行程序的方法。
Quick Editor的菜单Project->Assemble ASM file,可汇编源码,并生成HelloWorld.obj文件。Project->Link OBJ File连接obj文件,并生成HelloWorld.exe文件。Project->Assemble & Link则是上面两步的组合。Project->Console Assemble & Link是在控制台下进行汇编及连接。其结果是,在运行程序时,先打开一个控制台,再由控制台来负责装载及运行程序。也就是说,控制台是程序运行的平台。如果关闭控制台,则程序也被自动地关闭了。
这里选择Assemble & Link,生成可执行文件。然后点击工具栏上的“Run Program”图标,弹出“Run Program or Help File”窗口,选择生成的HelloWorld.exe文件,点击“打开”按钮,将弹出一个窗口,显示“Hello, World!”。这就是我们的第一个Win32汇编程序!
 
Visual C++下的一个类似于此的Win32应用,其.exe文件约150KB。而我们这个HelloWorld.exe有多大?2.50KB,是前者的1/60。
 
 
 
1.3  Visual C++环境
 
 
下面,我们不使用Quick Editor,而是使用Visual C++6的IDE来编写这个汇编程序。
 
在VC6中新建一个Project,类型为Makefile,项目名称为“VCHelloWolrd”。在接下来的Wizard窗口中,均点击”Next”或”Finish”按钮,接受默认设置。
为此项目新增一个VCHelloWorld.asm文件,内容如下:
 ; VCHelloWorld.asm

 comment * ---------------------------------------------
The First Assemble Application
--------------------------------------------- * .
.model flat, stdcall
option casemap:none include windows.inc
include user32.inc
include kernel32.inc includelib user32.lib
includelib kernel32.lib .data
szCaption db 'System Information',
szText db 'Hello World in Visual C++!', .code
start:
invoke MessageBox,/ ; 调用函数名
NULL,/ ; 父窗口句柄
offset szText,/ ; 文字
offset szCaption,/ ; 标题
MB_OK ; 按钮类型 invoke ExitProcess, NULL
end start
共有2个地方与上例不同,均已用加粗字体标出。一是include及includelib指令语句没有了路径,只留下具体的文件名(下面将在VC中为其指定具体的路径)。二是szText的内容改为”Hello, World in Visual C++!”。
 
再为此项目新增一个名为“VCHelloWorld.mak”的文件,内容如下:
 

 OUTDIR=./Debug

 all : VCHelloWorld.exe

 VCHelloWorld.exe : VCHelloWorld.obj
link /nologo /DEBUG /incremental:no /subsystem:windows
/out:$(OUTDIR)/VCHelloWorld.exe $(OUTDIR)/VCHelloWorld.obj VCHelloWorld.obj : VCHelloWorld.asm
ml /nologo /coff /c /Fo $(OUTDIR)/VCHelloWorld.obj VCHelloWorld.asm
VC的NMAKE调用此文件来生成VCHelloWorld.obj及VCHelloWorld.exe文件。首先定义了名为Debug的输出路径。其次,all是一个默认的target名,其依赖于名为VCHelloWorld.obj的target。link任务负责将Debug路径下的VCHelloWord.obj连接成该路径下的VCHelloWorld.exe。接下来,定义了VCHelloWorld.exe的target,其依赖于VCHelloWorld.asm文件。下面的ml任务,负责在Debug路径中生成VCHelloWorld.obj文件。
 
下面在VC中设置所需的头文件及库文件所在的路径。单击菜单Tools->Options,在弹出的窗口中选择Directories标签,在Show directories for的下拉列表框中分别选择Executable files, Include files及Library files,分别为它们增加F:/MASM32/bin,F:/MASM32/INCLUDE, F:/MASM32/LIB的路径。这样,即使代码中没有指定具体的路径,VC也知道如何找到它们。
 
最后,告诉VC,当我们按下Build按钮(F7)时,将.exe文件存放在何路径下。单击菜单Project->Settings, 在弹出的窗口中,选Win32 Debug,选Debug标签,选General Category,在Executable for debug session的文本框中输入具体的路径,如“F:/CodeTest/ASM/VCHelloWorld/Debug/VCHelloWorld.exe”。
 
执行完上面的步骤后,按Build按钮(F7),再按Execute Program(Ctrl+F5),Hello World in Visual C++!的消息窗口出来了。此时,VCHelloWorld.exe的大小为16.0KB,依旧远远小于150KB。

MASM32快速起步的更多相关文章

  1. Kafka 快速起步(作者:杜亦舒)

    Kafka 快速起步 原创 2017-01-05 杜亦舒 性能与架构 主要内容:1. kafka 安装.启动2. 消息的 生产.消费3. 配置启动集群4. 集群下的容错测试5. 从文件中导入数据,并导 ...

  2. JUnit三分钟教程 ---- 快速起步

    JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...

  3. 【译】快速起步-JSX简介

    react version: 15.5.0 快速起步-JSX简介 思考这个变量申明: const element = <h1>Hello, world!</h1>; 这个有趣的 ...

  4. Kafka 快速起步

    Kafka 快速起步 原创 2017-01-05 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 主要内容:1. kafka 安装.启动2. 消息的 ...

  5. MyBatis学习总结(一)——ORM概要与MyBatis快速起步

    程序员应该将核心关注点放在业务上,而不应该将时间过多的浪费在CRUD中,多数的ORM框架都把增加.修改与删除做得非常不错了,然后数据库中查询无疑是使用频次最高.复杂度大.与性能密切相关的操作,我们希望 ...

  6. Redis快速起步及Redis常用命令大全

    本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的 ...

  7. 二、快速起步(Mysql镜像)

    1.登录镜像站点 docker login daocloud.io 用户名 密码 邮箱 1.1 拉取镜像 docker pull [option] name:[tag] 例如 docker pull ...

  8. 分布式消息系统jafka快速起步(转)

    Jafka 是一个开源的/性能良好的分布式消息系统.在上一篇文章中有所简单介绍.下面是一篇简单的入门文档.更多详细的文档参考wiki. Step 1: 下载最新的安装包 完整的安装指南在这里.最新的发 ...

  9. Angular2快速起步——构建一个简单的应用

    构建此应用,分为如下几步: 1.环境准备:安装Node.js和npm: 2.创建并配置此项目: 3.创建应用: 4.创建组件并添加到应用程序中: 5.启动应用程序: 6.定义作为该应用的宿主页面: 7 ...

随机推荐

  1. 快速搭建LNMP

    [centos 6.4 server]系统安装请参考:http://blog.zhuyin.org/748.html1.防火墙设置: iptables -F service iptables save ...

  2. Win10還原成最乾淨的狀態 不必重灌

    系統不穩定時我們想到的第一個選擇就是重灌,如果你的作業系統是win10將會有另外一個新選擇,就是透過程式進行還原,讓你的電腦回到剛安裝時的清爽. 工具資訊 [軟體名稱]微軟 Refresh Windo ...

  3. 创建 Web 前端开发环境(node和npm以及git)

    Web 前端开发涉及多种工具,这里将常用工具的安装和配置进行说明,提供了详细的说明,为后继的开发创建一个坚实的基础. 本文介绍的工具有:NodeJS, NPM, Bower, Git 和 Grunt. ...

  4. 手动写一个Servlet

    一.做一个类,派生自HttpServlet 1.导两个包 javax.servlet.*; javax.servlet.http.* 2.重写两个方法doGet,doPost 打开tomcat中的se ...

  5. nginx 特定目录禁止php执行

    LNMP有一个缺点就是目录权限设置上不如Apache,有时候网站程序存在上传漏洞或类似pathinfo的漏洞从而导致被上传了php木马,而给网站和服务器带来比较大危险. 建议将网站目录的PHP权限去掉 ...

  6. thinkPHP 模板中的语法

    一.导入CSS和JS文件   1.css link       js  scr        <link rel='stylesheet' type='text/css' href='__PUB ...

  7. PKU-1704-Georgia and Bob

    题目链接 http://poj.org/problem?id=1704 这个题目是个好题,没有两下子是做不出的,其中考到,要你排序,如何把题目化成我们熟知的东西, 在这个题中我开始用选择法排序,他给我 ...

  8. 使用Eclipse开发及测试Spark的环境搭建及简单测试

    一.下载专门开发的Scala的Eclipse 1.下载地址:http://scala-ide.org/download/sdk.html,或链接:http://pan.baidu.com/s/1hre ...

  9. JSP EL表达式忽略方法

    JSP EL表达式忽略方法: web.xml中,和jsp中:jsp中的等级要高一些: web.xml: <?xml version="1.0" encoding=" ...

  10. BZOJ2002(分块)

    Bounce 弹飞绵羊 Time Limit:10000MS     Memory Limit:265216KB     64bit IO Format:%lld & %llu Submit  ...