您的位置:首页 > 其它

(转)动手打造一个汇编学习环境

2009-08-27 21:53 387 查看
相信大家学习汇编的时候都是在Dos界面下的,输入输入命令,编译--连接--运行,都是很机械的动作。很是使人厌烦。当然你也可以选择一些好的集成环境,我上网看看别人评论,并自己下载试过,RadASM 这个集成环境是很好的。不过太过笨重了,有100多M,并有很多功能我们也用不着。还有MASMPlus也挺好。

在此,我极力推荐一个软件EditPlus, 这是个小巧灵活,很人性化的文本编辑器。它有很多很有用的功能,比如可以无限次UnDo/ReDo,不过最大的特点是可以定制自己的工具。下面,以我自己的做法给各位一个参考,打造一个环境,使自己的汇编学习比较舒服。

首先,你当然要下载一个EditPlus了,网上很多的,可以选择汉化版。跟着,你就要下载一个汇编编译器了,我自己选择Masm,相信很多人都会选择这个的了,我用的是masm 6.15,可以编译32位和16位的。在此,提供一网址 http://www.tup.tsinghua.edu.cn/Resource/tskj/017022-01.rar 这是《Intel 汇编语言程序设计(第四版)》([美] Kip R.Irvine)的附书光盘。(也推荐这本书,一书在手,你会发现汇编也很有趣,国内的很多书都很无聊,看了一半,还不知道怎么写个"Hello"程序)里面已经有masm 6.15了。为什么我提议下载这个光盘呢,只不过是看中它提供的几个很有用的函数,比如DumpRegs,可以随时观察寄存器的结果。还有,我正在看这本书。你知道的啦,看不到程序运行的结果是很痛苦的。其实网上有很多别人写好的宏调用,函数调用。不过对于像我这些刚学的人来说,再要学习这些东西,是很烦的。刚学,我觉得我自己需要的只是几个简单的函数,可以输入,可以输出,可以观察结果就足够了。

解压安装下载来的光盘,默认安装在C盘,这时候多了个C:\Masm615的文件夹。再安装EditPlus(注:我用的是汉化版),这个软件只有2M多。现在我们需要的东西都用到了,可以设置了。

看看C:\Masm615,里面有两个.bat文件。make16.bat, make32.bat,只是提供了一些编译时候的参数选项。将它们复制到你喜欢的地方,比如D:\My Batch, 这两个文件以后你可能都会用到,不要删啊!没有下载光盘的朋友也没有关系,我将它们的内容写出来。

fileName: make16.bat 以下是文件内容,这行不是。

@echo off

PATH C:\Masm615;%PATH%

SET INCLUDE=C:\Masm615\INCLUDE;%INCLUDE%

SET LIB=C:\Masm615\LIB;%LIB%

cls

ML /nologo -c -Fl -Zi %1.asm

if errorlevel 1 goto terminate

LINK /nologo /CODEVIEW %1,,NUL,Irvine16;

if errorlevel 1 goto terminate

DIR %1.*

:terminate

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

fileName: make32.bat 以下是文件内容,这行不是

@echo off

cls

SET PATH=C:\Masm615;%PATH%

SET INCLUDE=C:\Masm615\INCLUDE;%INCLUDE%

SET LIB=C:\Masm615\LIB;%LIB%

ML -Zi -c -Fl -coff %1.asm

if errorlevel 1 goto terminate

LINK32 %1.obj irvine32.lib kernel32.lib /SUBSYSTEM:CONSOLE /DEBUG

if errorLevel 1 goto terminate

dir %1.*

:terminate

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

我已经将原来的注释删掉了,大家可以按照自己的需要修改修改。做人不要那样死板,不要换个目录,换个编译器就不会用了。其中path, inclue, lib是环境设置,那几个目录按自己的实际情况改改。%1是运行这个文件传来的第一个参数,ML Link 后面那是编译连接选项,根据选项不同,可以编译16位和32位的文件。

有了这两个文件,你写好asm的源文件时,可以直接输入命令 make16 file_name, make32 file_name就可以了。不用加扩展名.asm。当然你要系统找到你的那两个文件,可以设置相应的环境变量。我的电脑(右击,不是双击)->属性->高级->环境变量 在变量表中点选path,点编辑,在前面加上make16.bat, make32.bat所在的目录名(比如D:\My batch),加分号。不要将原来的删了哦。如果你用EditPlus,环境变量的设置也不是必须的。

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

好了,是用EditPlus的时候了,自从我偶然发现这个编辑器之后,就很喜欢了,简直相见恨晚。先设置一下字体(自己喜欢,我自己觉得字体Fixedsys,字型Regular,大小11的设置看起来很舒服的), 字体的设置在 工具->参数->常规->字体 处。还有其他设置,根据自己的喜欢。

现在点选 工具->参数->文件->设置与语法 按添加按钮,在描述处写上asm, 扩展名处写上asm, 点选 关联当前文件类型,以后就可以双击.asm文件来直接打开EditPlus了。你还可以设置一下 制表符/缩进, 我自己设置成 制表符和缩进都是8个空格的。还可以设置一个asm文本的模板。

现在你可以用EditPlus来写asm文件了,不过发现什么令你不满意的,没有错啦,就是那些汇编语句的关键词没有语法着色,通常一个好的编辑器都会用不同的颜色来区分不同的关键词。好啦,现在用到了EditPlus一个能力,就是语法着色。这时候,你需要一个语法文件,以.stx为后缀的。你可以上网下载,不过网上下载来的也太烂了,很多都不符合自己的习惯。还是自己动手来吧。我给你们提供一个语法文件的模板,名字为asm.stx, 内容如下

#TITLE=ASM

; This file is required for EditPlus to run correctly.

#DELIMITER=,(){}[]-+*/=~!&|<>?:

#QUOTATION1='

#QUOTATION2="

#CONTINUE_QUOTE=n

#LINECOMMENT=;

#ESCAPE=\

#CASE=n

#PREFIX1=

#PREFIX2=

#PREFIX3=

#PREFIX4=

#PREFIX5=

#SUFFIX1=

#SUFFIX2=

#SUFFIX3=

#SUFFIX4=

#SUFFIX5=

#HTML_EMBEDDED=

#SCRIPT_BEGIN=

#SCRIPT_END=

#HEREDOC=

#AUTOCASE=

#NUMBER_PATTERN=asm

#SPECIAL_STX=asm

#KEYWORD=Instruction Set

mov

add

#KEYWORD=Register

ax

eax

#KEYWORD=MASM Reserved words

assume

db

byte

.code

.data

#KEYWORD=User-defined Functions

DumpRegs

#

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

其中,我将关键词分为四类:Instruction Set(指令集),Register(寄存器名字), Masm Reserved words(Masm汇编器的保留字), User-defined Functions(自己定义的函数名), 语法文件是怎么样定义的呢,看帮助啦。不过先来知道几个#CASE=n,是对大小写不敏感,你改成y就是敏感,你应该知道汇编默认是大小写不敏感的。#SPECIAL_STX=asm是扩展名,当你的文件类型是.asm时候,就用这个语法文件。

#LINECOMMENT=;是注释用;开头的。你可以看到,我给你们的关键字里面的内容都很少,好象指令集才给mov, add两个。不过别着急,这些东西都可以自己添加的,你添加的时候,一个一行。网上下来的许多语法文件不好的地方不是它给的东西太少,而是太多。当然,你还可以定义自己的关键字,以#KEYWORD=NAME开始。你可以参考EditPlus目录下的cpp.stx的格式

那这些语法文件怎么用呢,工具->参数->文件->设置和语法 文件类型选择asm(没有这个文件类型,就自己添加)。在语法文件处选择asm.stx所在的路径和名字,选择后,语法文件处出现 D:\Program Files\EditPlus 2\asm.stx的字样(通常语法文件都放回EditPlus的目录,以免不见了),在语法着色选项,可以选择关键字的颜色,以后你所定义的关键字就以不同的颜色来区别了。(颜色设置也是自己喜欢,只要你看着舒服就可以了,不过建议色彩不要太多)

上面语法文件定义的词很少,比如Instruction Set 就 mov, add 连sub也不会着色的,这时候你可以打开原来的语法文件,添加上sub,保存。跟着选择 文档->刷新STX/ACP,看到sub也着色了。你写的程序多了,随时添加上新的词语,你的语法文件也慢慢完善了。开始时候少些也没有关系。慢慢得改,让你自己满意。

也可以关联上inc文件,语法文件也选择asm.stx,一样的。

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

下面,再介绍一下EditPlus的另外一个强大的功能,就是定义自己的工具。

点选,工具->参数->工具->用户 按添加工具->程序 在菜单文本处打上 compile 32bit, 命令处 选择D:\My batch\make32.bat(开头写的.bat文件), 参数处 选择文本名称(无扩展名), 就多了$(FileNameNoExt), 起始目录处 选择文件目录,就多了$(FileDir)。你确定退出对话框,看到工具菜单多了菜单项 compile 32bit Ctrl+1, 之后你选择这个菜单项,或者按Ctrl+1, 就直接编译你的文件了。

上面是编译32bit的asm文件, 当然你可以用同样的方法添加菜单项compile 16bit, 编译16bit的asm文件

下面再给大家一个run.bat文件

@echo off

if not exist %1.exe (

@echo No find the program %1.exe

goto end )

%1.exe

:end

按同样的方法来添加菜单项run,以后你写asm文件的时候,Ctrl+1就是编译,Ctrl+2就是运行。(注:菜单项可以上移或者下移的,通常将最常用的菜单项放在最方面。

上面说要随时修改语法文件,老是打开它也比较烦。可以添加一个菜单项 edit asm.stx,其中命令处是c:\windows\system32\notepad.exe, 参数是"D:\Program Files\EditPlus 2\asm.stx",这样,你按Ctrl+3就可以直接用记事本来修改asm.stx 很方面的。

写汇编的时候,常常要用到Ascii表。你也可以写个程序来显示Ascii表,跟着添加菜单项来运行这个程序。跟着按Ctrl+4就可以运行它了。

给大家一个C++的程序,用来显示文本的,虽然很简单,不过将文本文字显示在控制台窗口,会很方便。

//ShowText.cpp

#include <fstream>

#include <string>

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

char c;

ifstream file_in(argv[1]);

if (argc<2)

return 1;

if (file_in.fail())

cout<<"Not find this file."<<endl;

while (!file_in.fail())

{

file_in.get(c);

cout<<c;

}

return 0;

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>

Ascii.txt,是个Ascii的表

The Table Of Ascii

0 1 2 3 4 5 6 7 8 9 A B C D E F

0 NL SOH STX ETX EDT ENQ ACK BEL BS TAB LNF VT FF CR SO SI

1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN BM SUB ESC FS GS RS US

2 SPC ! " # $ % & ' ( ) * + , - . /

3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

4 @ A B C D E F G H I J K L M N O

5 P Q R S T U V W X Y Z [ \ ] ^ _

6 ` a b c d e f g h i j k l m n o

7 p q r s t u v w x y z { | } ~

之后添加上菜单项Show Ascii. 命令为 目录名\ShowText, 参数为"目录\Ascii.txt"就随时可以出现Ascii表。你还可以添加菜单项来添加自己的帮助文件,还可以添加windows自带的计算器来进行数值转换。很方便的。

;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

上面是抛转引玉,以后大家再来发掘EditPlus的功能吧。可以用它来编译C++/C/Java/C#的程序,只要你设置好了。很好的编辑器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: