不要把MASM32开发环境和MASM汇编器版本搞混了!
- 格式:doc
- 大小:40.50 KB
- 文档页数:2
Windows10下利⽤DOSBOX和MASM32搭建汇编语⾔开发环境⽬录⼀、⼯具准备1)下载DOSBOX2)下载MASM323)汇编⼯具下载⼆、安装⼯具1)安装DOSBOX2)DOSBox使⽤指南3)安装MASM32三、程序调试过程四、参考资料总结⼀、⼯具准备1)下载DOSBOX⼯具介绍:DOSBox 是⼀个 DOS 模拟程序,由于它采⽤的是 SDL 库,所以可以很⽅便的移植到其他的平台。
⽬前,DOSBox 已经⽀持在Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运⾏。
不少DOS下的游戏都可以直接在该平台上运⾏。
说明:由于项⽬已经停更,⽬前官⽹上指出,DOSBOX可以运⾏于32位和64位的Windows Vista和Windows 7之上,根据本⼈亲测,亦可在32位和64位的Windows 10上运⾏DOSBOX,因此有需要的可以试试。
选择Win32 installer那个安装了⼀路next即可2)下载MASM32⼯具介绍:MASM32是国外的MASM爱好者Steve Hutchesson⾃⾏整理和编写的⼀个软件包,⽬前最⾼版本为11r版。
MASM32并⾮指Microsoft的MASM宏汇编器,⽽是包含了不同版本⼯具组建的汇编开发⼯具包。
它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是Microsoft Visual Studio中的Rc.exe,32位链接器是Microsoft Visual Studio中的Link.exe,同时包含有其他的⼀些如Lib.exe和DumpPe.exe等⼯具。
3)汇编⼯具下载⼆、安装⼯具1)安装DOSBOX安装下载到的DOSBox0.74-win32-installer.exe,直接⼀路Next完成安装。
2)DOSBox使⽤指南1、创建⼀个⽤于保存汇编⼯具(如MASM、Link、DEBUG等⼯具)和汇编⽂件(*.asm)的⽬录,如:D:\DEBUG。
汇编大作业MASM32环境的熟悉首先看看我们汇编程序的流程,开发一个程序,熟悉一下它的流程:如下图所示:工欲善其事必先利其器工具去网上下载MASM32,笔者在此提供一个网址:/进去之后点击下载,然后选择中国程序员下载的文件,点击下载就OK了下载下来后是一个加压的软件包,解压后是一个可执行文件,如图所示:双击这个图标,即可安装,它属于多组织或者个人开发的一个集合开发环境,所以里面有许多的协议或者规定,弹出文件框的时候一直点确定即可安装成功(里面的盘符选择选为C盘比较爱好,以后调用系统的DLL,或者加载速度比较快),安装最后阶段会有DOS的一个长时间刷屏过程是程序与WINDOWS的匹配调用过程,这时候等待一会就好了安装成功后的启动方法:C:\masm32\qeditor, 双击即可,如下所示图标打开的界面如图所示:首先我们来看看基本的界面吧和WINDOWS的许多编辑界面基本一样,标题栏有:文件,编辑,选择,工程,工具,代码,符号转化,脚本,窗口,帮助下面我们逐个讲解:文件:里面有:保存,另存为,新建,打印等等各种和WORD 里面一样的东西如下图:基本上每一个都有一个快捷键最常用的是New,Open和Open in New Window,分别代表:新建,打开,在新的窗口打开编辑:里面有:撤销,反撤销,复制,粘贴,剪切如下图:这里我介绍几个与其他软件不同的地方:Undo:撤销Redo:反撤销,就是把撤销的东西再次撤销,很方便自己错误的改变,可以很方便的做出挽回选择:里面有很多操作,下作说明如下图:Upper Case:中文名,转为大写字母,当你选中一段文档的时候,点击它,可以将你选中区域中的小写字母转化为大写字母Lower Case:中文名,转化小写字母,遇上一个相反,是将你选中区域类的大写字母全部转化为小写字母Reverse Text:撤销前两种对文档的操作More Indent:是选中区域和前者区域之间的空格变大,在文档整理阶段比较好用,便于程序的阅读。
Win32汇编--使⽤MASM经过上⼀讲的准备⼯作,相信⼤家已经搭建好了 Win32 汇编的⼯作环境,并已经知道编译、链接⼀个程序的过程和原理了。
现在,我们让例⼦回归到经典:include <stdio.h>int main(void){Printf(“Hello, world\n”);} // 事实上想想,这不正是初⽣的婴⼉?!⿇雀虽⼩,五脏俱全。
刚刚那个C语⾔的”Hello, world”程序包含了C语⾔中的最基本的格式。
在C语⾔的源程序中,我们不需要为堆栈段、数据段和代码段的定义⽽烦恼,编译器会⾃⼰解决。
回顾⼀下,在DOS 下的汇编这段代码会变成什么样? Follow me!;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 堆栈段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>stack segmentdb 100 dup (?) ;定义100个字节的内存存储单元空间,默认值为?stack ends ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data segmentszHello db ‘Hello, world’,0dh,0ah,’$’data ends ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>code segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ah,9mov dx,offset szHelloint 21hmov ah,4chint 21hcode endsend start在例⼦中我们看到,stack、data、code都找到了⾃⼰的⼩窝。
如何用VC6.0集成开发环境来构建MASM32汇编的编程环境(原创)作者:maxzhou88(周哥)开发高性能的程序少不了用汇编编程,限于C语言中内嵌汇编语言的局限(如在C代码中混合汇编语言编程时,很难实现跳表),一些代码必须书写在独立的汇编源文件中。
遗憾的是,在调试时,只能看到裸的汇编码,而不能到懂标号,变量等,现在能这样C与ASM 混合编程就方便多了。
编程环境:VC6.0,Masm32v8优点:[1] 使用VC6.0集成开发环境可以利用其强大的Debug功能来实现源代码级调试(Source Code Debug),(看变量、设置断点、查看MASM32的高级命令展开......)[2] 使用VC6.0的资源编辑器,可视化编辑资源。
[3] 实现C/C++与ASM的混合编程。
[4] 在窗口下比在CMD下工作符合一般人的习惯,再也不需要写makefile文件或xxx.bat 文件了。
方法:[1] 安装VC6.0,这个我就说了,大家都会的哦,一般我将它安装在C:\Program Files\ Microsoft Visual Studio。
[2] 安装MASMv8.exe,一般我将它安装在D:\MASM32 下。
[3] 将Win32ASM(masm32)中的ml.exe和ml.err拷贝到C:\Program Files\ Microsoft Visual Studio\VC98\Bin[4] 使用VC6.0新建一个空工程,如:hello(类型为:win32 console、win32 application、DLL 等均可)。
[5] 把汇编和资源文件拷至新建工程目录下(hello.asm,hello.rc),并把这些文件加入工程中(将*.asm添加到Source Files, 将*.rc添加到Resource Files)。
[6] 配置IDE(这就配置一次就搞定):在VC的菜单tools/option…/paths(include files)中添加一个路径d:\MASM32\INCLUDE[7] 配置工程(每个工程都要这样配置):打开工程设置(project settings),点击*.asm文件选择(Custom Build),命令中加上:ml /c /coff /Zi /Fo$(TargetDir)\$(InputName).obj $(InputPath)输出中加上:$(TargetDir)\$(InputName).obj注意选Settings for: Win32 Debug 和Win32 release,将上面的两条都加上,而且每个*.ASM文件(如有多个ASM时)都这样设置。
masm编译汇编程序masm编译汇编程序⽹上的教程都不是很管⽤,我下载下来是masm32然后⾥⾯并没有masm.exe⽂件,我下载了masm.exe⽂件,提⽰我不能运⾏不过有这个东西,打开这个界⾯,新建⽂件可以写汇编程序project->assemble asm file 可以编译出.obj⽂件会弹出两个框1.创建新⽂件:File->New,编辑代码,保存成***.asm的⽂件即可。
2.编译源⽂件:Project->Assemble Asm File,汇编结束后会出现⼀个txt的结果⽂档,如果有错,可以根据相应的结果进⾏调试然后在进⾏汇编,此步会产⽣***.obj⽂件。
3.连接:Project->Link Obj File,链接2步骤中产⽣的Obj⽂件,产⽣exe⽂件。
4.运⾏:Project->Run Program,运⾏程序。
不过masm32写⼊的汇编程序需要有⼀定的格式.486.model flat, stdcalloption casemap:noneincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.libincludelib \masm32\lib\gdi32.libinclude \masm32\include\kernel32.incinclude \masm32\include\user32.incinclude \masm32\include\gdi32.incinclude \masm32\include\windows.inc.data// 变量.codestart:// 代码end start不按格式写会报错。
MASM32使用教程如果你在用汇编语言来开发windows下的程序的话,MASM32是很好的选择。
(Masm32下载地址请用google搜索罢。
)工欲善其事,必先利其器。
本文主要针对masm32 v8来说明三点:1、基本使用方法如何在MASM32中建立、汇编、链接源程序文件和运行生成的可执行文件。
2、如何开启MASM32的在线帮助功能3、汉化QEDITOR菜单一、基本使用方法以在C:\PWIN951\TEMP文件夹下建立TEST.ASM和生成TEST.EXE为例.安装好MASM32后,打开“资源管理器”或“我的电脑”,进入MASM32所在文件夹(假设为C:\MASM32),双击QEDITOR.EXE的图标,这就进入了MASM32的集成开发环境。
1.[这一步是可选的,以下可选的步骤均简称为“可选”] 输入资源文件, 然后使用菜单栏上的菜单File -> Save 或快捷工具栏中的代表存盘功能的磁盘状图标,第一次需要输入文件名,注意要指定扩展名 .RC 并存盘,注意如果是在集成环境中编译此资源文件,文件名必须是RSRC.RC(大小写均可)。
2.[可选] 编译资源文件。
使用菜单栏上的菜单Project -> Compile Resource File。
这时系统会打开一个DOS 窗口运行相关的批处理文件,并报告结果。
若不编译成功,信息为(具体错误信息因错误而异):Microsoft (R) Windows (R) Resource Compiler, Version 5.00.1823.1 - Build 1823Copyright (C) Microsoft Corp. 1985-1998. All rights reserved.Using codepage 936 as defaultCreating rsrc.RESRC: RCPP -CP 936 -f C:\PWIN951\TEMP\RCa83947 -g C:\PWIN951\TEMP\RDa83947 -DRC_IN VOKED -D_WIN32 -pc\:/ -E -I. -I .rsrc.rc.rsrc.rc (1): error RC2135 : file not found: MAINICON.ICO.Writing MENU:600, lang:0x409, size 128Microsoft (R) Windows Resource To Object Converter Version 5.00.1736.1Copyright (C) Microsoft Corp. 1992-1997. All rights reserved.CVTRES : fatal error CVT1101: cannot open rsrc.res for readingPress any key to continue . . .其中给出了出错语句的行号,错误类型代码及错误信息。
Win10系统VS2022开发环境中(X86)Win32汇编(MASM32)环境配置和⼀些。
抱歉,还是只能⽤⽶国的软件以及技术以及等等等等。
如果配置完成,在vs2022调试环境下正确编译运⾏后,可以看到如下画⾯:在VS022中开发学习汇编必然很⽅便。
这⾥可以下载vs2022项⽬源码:注意, AsmDude()只⽀持到vs2019。
主要配置过程如下:step1: 按照vs2022(直接官⽹下载Community版本)step2:这⾥下载masm32v11r.zip这个压缩包step3: 将MASM32的install.exe运⾏安装到C盘(也可以是别的盘),安装过程注意同意其解压,这⾥会耽搁⼀⼩段时间。
step4: 在vs中建⽴⼀个控制台应⽤。
删除原来默认⽣成的cpp⽂件。
step5: 在项⽬图标上上右键, ⽣成依赖项->⽣成⾃定义->选中masm, 如下图:step6: 在源⽂件图标上右键,添加 -> 新建项, 新建 test.asm⽂件。
step7: 在test.asm写⼊代码如下:.386.model flat, stdcall.stack 4096option casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib.constszCaption db '恭喜',0szText db 'Win32汇编程序成功编译!',0.dataExitProcess proto, dwExitcode: dword; 代码段.codemainT PROCinvoke MessageBox,NULL,offset szText,offset szCaption,MB_OKinvoke ExitProcess,NULLmainT ENDPEND mainT// 部分代码源⾃ <<[琢⽯成器—Windows环境下32位汇编语⾔程序设计].罗云彬.第三版>>上⾯代码中的 mainT是我这⾥为了解释如何配置⽽故意起的名字。
mars汇编语言-回复mars汇编语言是一种常用于教学和研究的汇编语言,它的简单易学以及广泛应用使得它成为了许多初学者和专业开发者的首选。
本文将一步一步解答关于mars汇编语言的相关问题,带你了解这门强大而有趣的编程语言。
第一步:什么是mars汇编语言?mars汇编语言(MIPS Assembly Language)是基于MIPS架构的一种汇编语言。
MIPS(Microprocessor without Interlocked Pipeline Stages)是一个常用于处理器设计和计算机架构研究的32位精简指令集(RISC)。
第二步:为什么选择mars汇编语言?选择mars汇编语言的原因有很多。
首先,它是一门非常简单易学的汇编语言,具有清晰的语法和直观的指令集。
其次,mars汇编语言广泛应用于教学中,有许多教程和示例代码可供参考。
另外,mars汇编语言还可以帮助理解计算机体系结构,提高编程技能,并且可以用于编写高效、底层的程序。
第三步:如何获取mars汇编语言的开发环境?要使用mars汇编语言进行开发,我们首先需要下载并安装mars汇编器。
mars汇编器是一个集成开发环境(IDE),可以在Windows、Linux和Mac等操作系统上运行。
我们可以在官方网站上找到最新版本的mars汇编器,并按照官方文档中的说明进行安装。
第四步:如何编写一个简单的mars汇编程序?下面我们将一起编写一个简单的mars汇编程序,以展示这门语言的基本语法和用法。
我们编写一个程序,计算并输出从1到10的和。
.dataresult: .word 0.text.globl main# 跳转到main标签处开始执行main:li t0, 1 # 将1加载到寄存器t0中li t1, 10 # 将10加载到寄存器t1中li t2, 0 # 将0加载到寄存器t2中loop:add t2, t2, t0 # 将t0与t2相加,并将结果存储到t2中addi t0, t0, 1 # 将t0加1,并将结果存储到t0中ble t0, t1, loop # 若t0 <= t1,则跳转到loop标签处sw t2, result # 将t2的值存储到result标签处li v0, 1 # 将1加载到系统调用号寄存器v0中lw a0, result # 将result标签处的值加载到参数寄存器a0中syscall # 调用系统调用输出结果li v0, 10 # 将10加载到系统调用号寄存器v0中syscall # 调用系统调用退出程序这段程序首先声明一个数据段(.data),其中包括一个名为result的字(word),用于存储计算结果。
MASM32绝好资料Introduction to Assembler (2)MASM Reference (11)宏参考MACRO Reference (11)伪指令参考 (16)语法参考 (31)其它参考 (37)寄存器大全 (37)标志寄存器Processor Flags (37)80位数据寄存器Stack of 80-bit Data Registers (38)Ascii 字符表Ascii Characters (39)奔腾指令优化参考Pentium Optimisation (40)调用格式Calling Conventions (43)命令行工具Command Line Tools (43)Introduction to Assembler汇编概述直线内存模式FLA T Memory Model32位(二进制位,bit。
下同)Windows程序使用“直线内存模式”。
这样的程序实际只有一个段,包括程序的所有代码和数据,而且只能在386以上的INTEL处理器上运行。
早期的16位程序使用段和偏移来代表地址,每个段的大小不能超过64KB,而“直线内存模式”只有偏移,它的大小是4G,即0XFFFFFFFF,这种地址表示方式使汇编程序更易于开发。
在FLA T模式下,所有的段寄存器都自动设置成为同一个值,32位Windows程序中段/偏移形式的地址在不是必须的。
对于DOS程序员来说,32位Windows PE格式的应用程序好象是.COM程序一样,使用单一的段包括了代码和数据,只操作偏移地址,而不是用段/偏移地址。
直线内存模式时,应用程序在4G内存空间内所有的引用都是近程地址(NEAR code addressing)和近程数据(NEAR data addressing)。
GS和FS段寄存器在普通的FLA T模式应用程序中并不使用,一般是操作系统用于操作实例(used in instances)。
Masm汇编语言错误注释:嵌套过程,段,结构,宏指令,IRP,IRPC或REPT不是正确结束.如嵌套的外层已终止,而内层还是打开状态Masm汇编语言错误信息:Symbol not definedMasm汇编语言错误注释:符号没有定义Masm汇编语言错误信息:Syntax errorMasm汇编语言错误注释:语句的语法与任何可识别的语法不匹配Masm汇编语言错误信息:Type illegal in contextMasm汇编语言错误注释:指定的类型在长度步可接收Masm汇编语言错误信息:Should have been group nameMasm汇编语言错误注释:给出的组合不符合要求Masm汇编语言错误信息:Must be declared in pass 1Masm汇编语言错误注释:得到的不是汇编程序所要求的常数值.例如,向前引用的向量长度Masm汇编语言错误信息:Symbol type usage illegalMasm汇编语言错误注释:PUBLIC 符号的使用不合法Masm汇编语言错误信息:Symbol already different kindMasm汇编语言错误注释:企图定义与以前定义不同的符号Masm汇编语言错误信息:Symbol is reserved wordMasm汇编语言错误注释:企图非法使用一个汇编程序的保留字(例如,宣布MOV为一个变量) Masm汇编语言错误信息:Forward reference is illegalMasm汇编语言错误注释:向前引用必须是在第一遍扫视中定义过的Masm汇编语言错误信息:Must be registerMasm汇编语言错误注释:希望寄存器作为操作数,但用户提供的是符号而不是寄存器Masm汇编语言错误信息:Extra characters on lineMasm汇编语言错误注释:当一行上已接受了定义指令的足够信息,而又出现了多余的字符Masm汇编语言错误信息:Wrong type of registerMasm汇编语言错误注释:指定的寄存器类型并不是指令中或伪操作中所要求的.例如ASSUME AX Masm汇编语言错误信息:Must be segment or groupMasm汇编语言错误注释:希望给出段或组,而不是其它Masm汇编语言错误信息:Symbol has no segmentMasm汇编语言错误注释:想使用带有SEG的变量,而这个变量不能识别段Masm汇编语言错误注释:必须是WORD,DW,QW,BYTE或TB,但接收的是其它内容Masm汇编语言错误信息:Already defined locallyMasm汇编语言错误注释:试图定义一个符号作为EXTERNAL,但这个符号已经在局部定义过了Masm汇编语言错误信息:Segment parameters are changedMasm汇编语言错误注释:SEGMENT的自变量表与第一次使用这个段的情况不一样Masm汇编语言错误信息:Not proper align/combine typeMasm汇编语言错误注释:SEGMENT参数不正确Masm汇编语言错误信息:Reference to mult definedMasm汇编语言错误注释:指令引用的内容已是多次定义过的Masm汇编语言错误信息:Operand was expectedMasm汇编语言错误注释:汇编程序需要的是操作数,但得到的却是其它内容Masm汇编语言错误信息:Operator was expectedMasm汇编语言错误注释:汇编程序需要的是操作符,但得到的却是其它内容Masm汇编语言错误信息:Register already definedMasm汇编语言错误注释:汇编内部出现逻辑错误Masm汇编语言错误信息:Division by 0 or overflowMasm汇编语言错误注释:给出一个用0作除数的表达式Masm汇编语言错误信息:Shift count is negativeMasm汇编语言错误注释:移位表达式产生的移位计数值为负数Masm汇编语言错误信息:Operand type must matchMasm汇编语言错误注释:在自变量的长度或类型应该一致的情况下,汇编程序得到的并不一样.例如,交换Masm汇编语言错误信息:Illegal use of externalMasm汇编语言错误注释:用非法手段进行外部使用Masm汇编语言错误信息:Must be record field nameMasm汇编语言错误注释:需要的是记录字段名,但得到的是其它东西Masm汇编语言错误信息:Must be record or field nameMasm汇编语言错误注释:需要的是记录名或字段名,但得到的是其它东西Masm汇编语言错误信息:Operand must have sizeMasm汇编语言错误注释:需要的是操作数的长度,但得到的是其它内容Masm汇编语言错误信息:Must be var,label or constantMasm汇编语言错误注释:需要的是变量,标号或常数,但得到的是其它内容Masm汇编语言错误信息:Must be structure field nameMasm汇编语言错误注释:需要的是结构字段名,但得到的是其它内容Masm汇编语言错误信息:Left operand must have segmentMasm汇编语言错误注释:右操作数所用的某些东西要求左操作数必须有一个段(例如:":") Masm汇编语言错误信息:Unknown symbol typeMasm汇编语言错误注释:在符号语句的类型字段中,有些不能识别的东西Masm汇编语言错误信息:One operand must be constMasm汇编语言错误注释:这是加法指令的非法使用Masm汇编语言错误信息:Operands must be same or 1 absMasm汇编语言错误注释:这是减法指令的非法使用Masm汇编语言错误信息:Normal type operand expectedMasm汇编语言错误注释:当需要变量,标号时,得到的却是STRUCT,FIELDS,NAMES,BYTE,WORD或DWMasm汇编语言错误信息:Constant was expectedMasm汇编语言错误注释:需要的是一个常量,得到的却是另外的内容Masm汇编语言错误信息:Operand must have segmentMasm汇编语言错误注释:SEG伪操作使用不合法Masm汇编语言错误信息:Must be associated with dataMasm汇编语言错误注释:有关项用的是代码,而这里需要的是数据,例如一个过程的DS取代Masm汇编语言错误信息:Must be associated with codeMasm汇编语言错误注释:有关项用的是数据,而这里需要的是代码Masm汇编语言错误信息:Already have base registerMasm汇编语言错误注释:试图重复基地址Masm汇编语言错误信息:Already have index registerMasm汇编语言错误注释:试图重复变址地址Masm汇编语言错误信息:Must be index or base registerMasm汇编语言错误注释:指令需要基址或变址寄存器,而指定的是其它寄存器Masm汇编语言错误信息:Redefinition of symbolMasm汇编语言错误注释:在第二遍扫视时,接着又定义一个符号Masm汇编语言错误信息:Illegal use of registerMasm汇编语言错误注释:在指令中使用了8088指令中没有的寄存器Masm汇编语言错误信息:Value is out of rangeMasm汇编语言错误注释:数值大于需要使用的,例如将DW传送到寄存器中Masm汇编语言错误信息:Operand not in IP segmentMasm汇编语言错误注释:由于操作数不在当前IP段中,因此不能存取Masm汇编语言错误信息:Improper operand typeMasm汇编语言错误注释:使用的操作数不能产生操作码Masm汇编语言错误信息:Relative jump out of rangeMasm汇编语言错误注释:指定的转移超出了允许的范围Masm汇编语言错误信息:Index disp1. must be constantMasm汇编语言错误注释:试图使用脱离变址寄存器的变量位移量.位移量必须是常数Masm汇编语言错误信息:Illegal register valueMasm汇编语言错误注释:指定的寄存器值不能放入"reg"字段中.(即"reg"字段大于7) Masm汇编语言错误信息:No immediate modeMasm汇编语言错误注释:指定的立即方式或操作码都不能接收立即数.例如:PUSH Masm汇编语言错误信息:Illegal size for itemMasm汇编语言错误注释:引用的项的长度是非法的.例如:双字移位Masm汇编语言错误信息:Byte register is illegalMasm汇编语言错误注释:在上下文中,使用一个字节寄存器是非法的.例如:PUSH AL Masm汇编语言错误信息:Symbol is multi-definedMasm汇编语言错误注释:重复定义一个符号Masm汇编语言错误信息:CS register illegal usageMasm汇编语言错误注释:试图非法使用CS寄存器.例如:XCHG CS,AXMasm汇编语言错误信息:Must be Ax or ALMasm汇编语言错误注释:某些指令只能用AX或AL.例如:IN 指令Masm汇编语言错误信息:Improper use of segment regMasm汇编语言错误注释:段寄存器使用不合法.例如:1 立即数传送到段寄存器Masm汇编语言错误信息:No or unreachable CSMasm汇编语言错误注释:试图转移到不可到达的标号Masm汇编语言错误信息:Operand combination illegalMasm汇编语言错误信息:Near JMP/CALL to different CSMasm汇编语言错误注释:企图在不同的代码段内执行NEAR转移或调用Masm汇编语言错误信息:Label can't have seg overrideMasm汇编语言错误注释:非法使用段取代Masm汇编语言错误信息:Must have opcode after prefixMasm汇编语言错误注释:使用前缀指令之后,没有正确的操作码说明Masm汇编语言错误信息:Can't override ES segmentMasm汇编语言错误注释:企图非法地在一条指令中取代ES寄存器.例如:存储字符串Masm汇编语言错误信息:Can't reach with segment regMasm汇编语言错误注释:没有使变量可达到的ASSUME语句Masm汇编语言错误信息:Phase error between passesMasm汇编语言错误注释:程序中有模棱两可的指令,以至于在汇编程序的两次扫视中,程序标号的位置在数值上改变了Masm汇编语言错误信息:Must be in segment blockMasm汇编语言错误注释:企图在段外产生代码Masm汇编语言错误信息:Can't use EVEN on BYTE segmentMasm汇编语言错误注释:被提出的一个字节段,但试图使用EVENMasm汇编语言错误信息:Forward needs overrideMasm汇编语言错误注释:目前不使用这个信息Masm汇编语言错误信息:Illegal value for DUP countMasm汇编语言错误注释:DUP计数必须是常数,不能是0或负数Masm汇编语言错误信息:Symbol already externalMasm汇编语言错误注释:企图定义一个局部符号,但此符号已经是外部符号了Masm汇编语言错误信息:DUP is too large for linkerMasm汇编语言错误注释:DUP嵌套太长,以至于连接程序不能得到所要的记录Masm汇编语言错误信息:Usage of ? (indeterminate)badMasm汇编语言错误注释:"?"使用不合适.例如:? +5Masm汇编语言错误信息:Already had ELSE clauseMasm汇编语言错误注释:在ELSE从句中试图定义ELSE从句Masm汇编语言错误信息:Not in conditional blockMasm汇编语言错误注释:在没有提了供条件汇编指令的情况下,指定了ENDIF或ELSE。
不要把MASM32开发环境和MASM汇编器版本搞混了!
MASM32是一个为那些对学习或者编写32位微软汇编(MASM)感兴趣的程序员提供的工作环境,它最流行的版本是8.0版,而我所知道最新版本是9.0版。
但是请大家一定要注意,这里的8.0版和9.0版不是指MASM编译器(即ML)的版本,而是MASM32开发环境的版本。
经常看到网上有网友发的贴把这两个概念都搞混了。
那么MASM(ML)编译器的版本到底有哪些呢?教学上常用的版本是 5.0版的,之前还有个 4.0版的记得“全国计算机等级三级考试”就是用的 4.0版。
5.0版之后有个 5.1版本,在这之后,从 6.0版开始MASM就改名ML了,因为它把编译和连接组合在一起了。
而且 6.0版还对汇编语言进行了大幅改造,使之支持高级语言的很多特性。
6.0版之后常看到的就是6.11、6.13、6.14MASM32(V8.0和V9.0)就是包含有ML6.14版,而不是ML8.0版。
6.14之后就是6.15但不常见,我手头上有6.15的ML,有兴趣的朋友可以向我索取或点此处进入下载。
但Microsoft从 6.15版开始好象就不再单独发布MASM的开发工具包了。
以后的ML还有7.0、7.1版,最新的是ML8.0版。
但它们都只包含在Visual 和Visual Studio 2005里面。
而且如果你安装了Visual Studio 2005的64位开发环境,你将得到一个MASM for x64 (ml64.exe)哈哈,各位这可是支持Intel 和AMD的64位CPU的汇编语言编译器!有志于64位底层开发的赶快去试用看看吧。
MASM 4.00这是最先广泛使用的一个 MASM 版本,适用于 DOS 下的汇编编程。
它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。
很多教科书上讲的 8086 汇编语法都是针对这个版本的,对程序员来说。
它
只比用 Debug 方便一点点
MASM 5.00MASM 5.00 比 4.00 在速度上快了很多,并将段定义的伪指令简化为类
似 .code 与 .data 之类的定义方式,同时增加了对 80386 处理器指令的
支持,对 4.00 版本的兼容性很好
MASM 5.10对程序员来说,这个版本最大的进步是增加了对 @@ 标号的支持。
这样,程序员可以不再为标号的起名花掉很多时间。
另外, MASM 5.10 增加了对 OS/2
1.x 的支持
MASM 5.10B1989 年推出,比上一个版本更稳定、更快,它是传统的 DOS 汇编编译器中最完善的版本
MASM 6.001992 年发布,有了很多的改进。
编译器可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从 Masm.exe 改为 Ml.exe 。
从这个版本开
始可以在命令行上用 *.asm 同时编译多个源文件,源程序中数据结构的使
用和命令行参数的语法也更像 C 的风格。
最大的改进之一是开始支
持 .if/.endif 这样的高级语法,这样,使用复杂的条件分支时和用高级语
言书写一样简单,可以做到几千行的代码中不定义一个标号;另外增加了
invoke 伪指令来简化带参数的子程序调用。
这两个改进使汇编代码的风格
越来越像 C ,可读性和可维护性提高了很多
MASM 6.00A未发售的版本
MASM 6.00B最后一个支持 OS/2 的 MASM 版本,修正了上一版本中的一些错误
MASM 6.10修正了一些错误,同时增加了 /Sc 选项,可以在产生的 list 文件中列出
每条指令使用的时钟周期数
MASM 6.10A1992 年发布,修正了一些内存管理方面的问题
MASM 6.111993 年 11 月发布,支持 Windows NT ,可以编写 Win32 程序,同时支持Pentium 指令,但不支持 MMX 指令集
MASM 6.11C1994 年发布,增加了对 Windows 95 VxD 的支持
MASM 6.121997 年 8 月发布,增加 .686 , .686P , .MMX 声明和对相应指令的支持
MASM 6.131997 年 12 月发布,增加了 .K3D 声明,开始支持 AMD 处理器的 3D 指令MASM 6.14这是一个很完善的版本,它在 .XMM 中增加了对 Pentium III 的 SIMD 指令集的支持,相应增加了 OWORD ( 16 字节)的变量类型
MASM 6.152000 年 4 月发布。