欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何用MASM5.0使用方法及附版本号

程序员文章站 2022-02-02 09:45:23
masm5.0是一款dos下汇编工具包,包含了masm、link、edit、debug、debug32等程序,可谓是汇编者的利器,支持win7 64位操作系统,有需要的不要错过。如果是64位的系统需要...

masm5.0是一款dos下汇编工具包,包含了masm、link、edit、debug、debug32等程序,可谓是汇编者的利器,支持win7 64位操作系统,有需要的不要错过。

如果是64位的系统需要按照dosbox

1.首先下载与安装dosbox,提供的文件包里面都有,它的作用就是让你在64位下使用32、16位的软件。如果不使用dosbox就会出现程序不兼容的对话框。

开始安装:

双击打开dosbox软件,按步骤进行安装,安装目录任选,不过由于c盘是系统盘,所以最好安装在其他盘里;

安装成功后打开dosbox, 我们就可以看到一个非常熟悉的界面了,和电脑里的命令提示符dos窗口差不多: (注意:由于它的两个窗口是在一起作用的,所以使用的时候不要关掉其中的任一个窗口)

安装完dosbox后,我们就能运行汇编后的程序了

打开dosbox后,我们可以看到z : \ >,这是dosbox里的虚拟盘,我们可以采用mount命令将其转变到自己的d盘: mount d d:\masm

这里,我在d盘建立了一个文件夹masm,作为自己做汇编实验的文件存放位置;使用该命令后,d符号也就虚拟成了自己本地电脑的d:\masm目录;这时候在dosbox里面输入d:\其实是打开电脑里面的d:\masm

但是每次打开dosbox都要输入太麻烦,所以:开始——>所有程序——>dosbox文件——>

打开dosbox 0.74 options,在打开的文本里找到[autoexec](应该会在文本的最后位置),根据你自己做汇编实验的文件夹所在路径进行相应的设置,在;[autoexec]项的末尾写上上面的两条命令:

以我的文件路径为例:

mount d: d:\masm

d:

2、然后将自己在网上下载的debug32.exe和masm5.0中的所有东西(包括masm.exe,link.exe等等)都放在d:\masm 文件夹下。

这时候打开dosbox就可以直接输入:debug32 使用debug 了。

直接输入masm 就可以用masm进行编译了,link也一样。

3、一些人在使用这种方法使用masm的时候会出现unable to open input file 这个错误,是汇编时找不到源文件。

以我的为例,我将我的1.asm文件放在d:\masm\wyx这个文件夹下。如果编译的时候用

object modules [.obj]:d:\masm\wyx\1

就会出现上面的错误提示。

正确的应该是

object modules [.obj]:d:\wyx\1

这是因为dosbox虚拟d:\masm盘为系统盘,在dosbox直接输入d:\其实是进入了你电脑的d:\masm

预先在e:\masm5.0\mydoc目录下写好hello.asm文件:

data segment
    buf db 'hello world!  this is my first asm file! $'
data ends
code segment
    assume cs:code,ds:data
start:   mov ax,data
    mov ds,ax
    lea dx,buf
    mov ah,09
    int 21h
    mov ah,4ch
    int 21h
code ends
end start

首先,进入masm5.0所在路径(装入-连接-运行-调试均在masm5.0所在目录中进行)

(我这里masm5.0所在路径是e:\masm5.0\)

winkey+r — cmd —e:——cd masm5.0

如何用MASM5.0使用方法及附版本号

1、装入

格式:masm asm源文件及路径1 obj文件目标路径2(省去则默认当前路径)

如:e:\masm5.0>masm .\mydoc\hello.asm .\mydoc\

如何用MASM5.0使用方法及附版本号

结果:程序无错则在e:\masm5.0\mydoc中增加文件hello.obj

如何用MASM5.0使用方法及附版本号

2、连接

格式:link obj文件路径1

如:e:\masm5.0>link .\mydoc\hello.obj

如何用MASM5.0使用方法及附版本号

(此后当前目录就会出现hello.exe)

如何用MASM5.0使用方法及附版本号

3、运行
 

格式:exe文件全名(即 "hello.exe")

如:e:\masm5.0> hello.exe

如何用MASM5.0使用方法及附版本号

4、调试

-u 反汇编

-r 显示寄存器内容

-g [=address1][address2][address3] 执行到断点行,如:-g 12 为执行到第12行

-t [=address][value] 跟踪,配合-g使用 如:-t 12 1 为从第12行开始,每执行1条指令后停下来

-d 查看数据

-q 退出返回操作系统

如何用MASM5.0使用方法及附版本号

上图中,

首先,-u 反汇编整个 hello.exe ;

然后-g 9 ,让程序执行到 第9行停下来;再用-t 跟踪,每执行一条指令停下来;

最后,连续-t跟踪了3次后输入-q退出程序。

汇编masm5.0编译器编译汇编文件名时,
有时可能出现 unable to open input file:bcd2ascii.asm 的错误,可是代码文件确实存在。
这时,可以考虑两个问题,
第一:文件拓展名有没有改过来,因为win7下会自动隐藏拓展名(除非设置过);
第二:是文件的名字系统的差别造成的,windows现在可以支持非常复杂的命名,
在cmd下也可以看到这些命名,但当执行debug,masm等程序时,系统将启动ntvdm,
这是一个nt系统下的vdm,虚拟设备管理,就是一个16位的虚拟机,
此时,ntvdm下的cmd严格执行8.3命名,这时只需要修改文件名,
主文件名8个字符以内,扩展名为asm就可以了

masm使用方法及版本号

汇编语言的实现也是先利用某种编辑器编写汇编语言源程序(*.asm),然后经过汇编得到目标模块文件(*.obj)、连接后形成可执行文件(*.exe)。

1、汇编语言程序的语句格式

汇编语源程序由语句序列构成。语句一般由分隔符分成的四个部分组成,它们有两种格式:
(1)执行性语句——由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:
标号:硬指令助记符 操作数,操作数 ;注释
(2)说明性语句——由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:
名字 伪指令助记符 参数,参数,... ;注释
◆执行性语句中,冒号前的标号反映该指令的逻辑地址;说明性语句中的名字可以是变量名、段名、子程序名或宏名等等,既反映逻辑地址又具有自身的各种属性。标号和名字很容易通过是否具有冒号来区分。
◆硬指令助记符可以是任何一条处理器指令,也可以是一条宏指令,伪指令助记符主要完成一些不产生cpu动作的说明性工作,在程序执行前由汇编程序完成处理。
◆处理器指令的操作数可以是立即数、寄存器和存储单元。伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号隔开。
◆语句中由分号开始的部分是注释。

2、汇编语言源程序

这个以前已经学过,主要有简化段定义格式和完整段定义格式

3、宏汇编程序masm

masm6.11,安装文件5张软盘,默认安装在c:\masm目录下,完整的masm汇编系统包含很多文件,但最基本的有如下几个:
ml.exe 汇编程序
ml.err 汇编错误信息文件
dosxnt.exe ms-dos扩展文件
link.exe 连接文件
lib.exe 子程序库管理文件
如果采用集成开发环境pwb,主要涉及如下文件:
pwwb.exe 程序员工作平台
nmaker.exe 工程维护程序
nmake.exe nmaker的ms-dos扩展驱动程序
cv.exe 源代码调试器codeview
cvpack.exe 调试信息压缩器,它为codeview准备一个可执行文件
helpmake.exe 帮助文件维护程序
bscmake.exe 浏览数据库创建程序
sbrpack.exe 浏览信息程序
pwbrmake.exe bscmake兼容驱动程序
*.mxt 各种pwb扩展工具文件
*.xxt 各种语言的pwb扩展文件

4、汇编语言的命令行开发过程

(1)原程序的编写
用编辑软件书写*.asm源程序,如
li6-1.asm
;li6-1.asm
.model small
.stack
.data
string db 'hello,everybody!'
.code
.startup
mov dx,offset string
mov ah,9
int 21h
.exit 0
end
(2)原程序的汇编
汇编是将原程序翻译成由机器代码组成的目标模块文件的过程,如下:
ml /c li6-1.asm
如果源程序没有语法错误,则生成一个目标模块文件li6-1.obj
(3)目标文件的连接
连接程序能把一个或多个目标文件和库文件和成一个可执行文件(.exe、.com文件),如下:
link li6-1.obj
连接程序的一般格式:
link [/参数选项] obj文件列表 [exe文件名,map文件名,库文件][;]
连接程序可以将多个模块文件连接起来,形成一个可执行文件;多个模块文件用“+”分隔。给出ee文件名就可以替代与第一个模块文件名相同的缺省名。给出map文件名将创建连接映像文件,否则不生成映像文件。库文件是指连接程序需要的子程序库等。“;”表示采用缺省值
事实上,ml汇编程序可以自动调用link连接程序(ml表示masm和link),实现汇编和连接依次进行,如下即可完成可执行文件的生成:
ml li6-1.asm
ml的命令行格式如下:
ml [/参数选项] 文件列表 [/link连接参数选项]
参数选项如下(注意参数是大小写敏感的):
/at——允许tiny存储模式(创建一个com文件)
/c——只汇编源程序,不进行自动连接
/fl 文件名——川建一个汇编列表文件(扩展名lst)
/fr 文件名——创建一个可在pwb下浏览的.sbr源浏览文件
/fo 文件名——根据指定的文件名生成模块文件,而不是采用缺省名
/fe 文件名——根据指定的文件名生成可执行文件,而不是采用缺省名
/fm 文件名——创建一个连接映像文件(扩展名map)
/i 路径名——设置需要包含进(include)源程序的文件的所在路径
/sg——在生成的文件列表文件中,列出由汇编程序产生的指令
/sn——在创建列表文件时不产生符号表
/zi——生成模块文件时,加入调试程序codeview需要的信息
/zs——只进行语法检查,不产生任何代码
/link——传递给连接程序link的参数
列表文件是一种文本文件,含有源程序和目标代码,创建列表文件,输入如下命令:
ml /fl /sg li6-1.asm
该命令除产生模块文件li6-1.obj和可执行文件li6-1.exe,还产生列表文件li6-1.lst,采用/sg,如果源程序具有.startup、.exit伪指令以及流程控制伪指令.if、.while等,将在列表文件中得到相应的硬指令;否则列表文件只给出上述伪指令。li6-1.lst如下:

li6-1.lst
microsoft (r) macro assembler version 6.11 08/10/05 14:09:13
li6-1.asm page 1 - 1


;li6-1.asm
.model small
.stack
0000 .data
0000 48 65 6c 6c 6f 2c string db 'hello,everybody!'
45 76 65 72 79 62
6f 64 79 21
0000 .code
.startup
0000 *@startup:
0000 ba ---- r * mov dx, dgroup
0003 8e da * mov ds, dx
0005 8c d3 * mov bx, ss
0007 2b da * sub bx, dx
0009 d1 e3 * shl bx, 001h
000b d1 e3 * shl bx, 001h
000d d1 e3 * shl bx, 001h
000f d1 e3 * shl bx, 001h
0011 fa * cli
0012 8e d2 * mov ss, dx
0014 03 e3 * add sp, bx
0016 fb * sti
0017 ba 0000 r mov dx,offset string
001a b4 09 mov ah,9
001c cd 21 int 21h
.exit 0
001e b8 4c00 * mov ax, 04c00h
0021 cd 21 * int 021h
end
microsoft (r) macro assembler version 6.11 08/10/05 14:09:13
li6-1.asm symbols 2 - 1

segments and groups:

n a m e size length align combine class

dgroup . . . . . . . . . . . . . group
_data . . . . . . . . . . . . . 16 bit 0010 word public 'data'
stack . . . . . . . . . . . . . 16 bit 0400 para stack 'stack'
_text . . . . . . . . . . . . . 16 bit 0023 word public 'code'

symbols:

n a m e type value attr

@codesize . . . . . . . . . . . number 0000h
@datasize . . . . . . . . . . . number 0000h
@interface . . . . . . . . . . . number 0000h
@model . . . . . . . . . . . . . number 0002h
@startup . . . . . . . . . . . . l near 0000 _text
@code . . . . . . . . . . . . . text _text
@data . . . . . . . . . . . . . text dgroup
@fardata? . . . . . . . . . . . text far_bss
@fardata . . . . . . . . . . . . text far_data
@stack . . . . . . . . . . . . . text dgroup
string . . . . . . . . . . . . . byte 0000 _data

0 warnings
0 errors

◆列表文件有两部分内容。在第一部分源程序中,最左列是数据或指令在该段从0开始的相对偏移地址,向右依次是指令的机器代码字节个数、机器代码和汇编语言语句。机器代码后有字母"r"表示该指令的立即数/位移量现在不能确定或是只是相对地址,它将在程序连接或进入主存时才能定位。带有“*”的处理器指令是由前面一条伪指令产生的,采用/sg选项时的列表文件才罗列。如果陈序中有错误(error)或警告(warming),也会会在相应位置提示。
列表文件的第二部分是标示符使用情况。对段名和组名给出他们的名字(name)、尺寸(size)、长度(length)、定位(align)、组合(combine)和类别(class)属性;对符号给出他们的名字、类型(type)、数值(value)和属性(attr)。采用简化段定义格式,有许多汇编系统的预定义标示符,例如@data等。
◆映像文件也是一种文本文件,含有每段在存储器中的分配情况。如下命令创建:
ml /fm li6-1.asm
将产生li6-1.map映像文件,如下:

li6-1.map
start stop length name class
00000h 00022h 00023h _text code
00024h 00033h 00010h _data data
00040h 0043fh 00400h stack stack

origin group
0002:0 dgroup

address publics by name

address publics by value

program entry point at 0000:0000

映像文件中首先给出了该程序各个逻辑段的起点(start)、终点(stop)、长度(length)、段名(name)和类别(class);然后是段组(group)位置和组名;最后提示程序开始执行的逻辑地址。注意,这里的起点、终点和段地址是以该程序文件开头而言的相对地址,实际的绝对地址需要在程序进入主存后确定。

5、可执行程序的调试

只要在操作系统下输入文件名即可:
li6-1
操作系统装在该文件进入主存,开始运行,是用debug调试时:
debug li6-1.exe
其中,bx.cx反映程序的大小,cs:ip指向程序开始执行的第一条指令,ss:sp指向堆栈段,ds和es并不指向程序数据段,而是指向程序前100h处(这部分是该程序的短前缀psp);所以,ds和es应该在程序当中进行设置,正如该程序.startup伪指令所完成的。采用简化段定义格式的程序,在主存中从低到高依次安排代码段、数据段和堆栈段。

找的好辛苦呀
大哥看的好的话就加给小弟呀
呵呵
祝你成功呀

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.14 masm32(v8.0 和 v9.0) 就是包含有 ml6.14 版 , 而不是 ml8.0 版。 6.14 之后就是 6.15 但不常见 ,但 microsoft 从 6.15 版开始好象就不再单独发布 masm 的开发工具包了。

以后的 ml 还有 7.0 、 7.1 版,最新的是 ml8.0 版。但它们都只包含在 visual studio.net 和 visual studio 2005 里面。而且如果你 安装了 visual studio 2005 的 64 位开发环境,你将得到一个 masm for x64 ( ml64 .exe ) 哈哈,各位这可是支持 intel 和 amd 的 64 位 cpu 的汇编语言编译器!有志于 64 位底层开发的赶快去试用看看吧。

masm 编译器各版本的区别

版     本 简     介
masm 4.00 这是最先广泛使用的一个 masm 版本,适用于 dos 下的汇编编程。它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。很多教科书上讲的 8086 汇编语法都是针对这个版本的,对程序员来说。它只比用 debug 方便一点点
masm 5.00 masm 5.00 比 4.00 在速度上快了很多,并将段定义的伪指令简化为类似 .code 与 .data 之类的定义方式,同时增加了对 80386 处理器指令的支持,对 4.00 版本的兼容性很好
masm 5.10 对程序员来说,这个版本最大的进步是增加了对 @@ 标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。另外, masm 5.10 增加了对 os/2 1.x 的支持
masm 5.10b 1989 年推出,比上一个版本更稳定、更快,它是传统的 dos 汇编编译器中最完善的版本
masm 6.00 1992 年发布,有了很多的改进。编译器可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从 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.10a 1992 年发布,修正了一些内存管理方面的问题
masm 6.11 1993 年 11 月发布,支持 windows nt ,可以编写 win32 程序,同时支持 pentium 指令,但不支持 mmx 指令集
masm 6.11c 1994 年发布,增加了对 windows 95 vxd 的支持
masm 6.12 1997 年 8 月发布,增加 .686 , .686p , .mmx 声明和对相应指令的支持
masm 6.13 1997 年 12 月发布,增加了 .k3d 声明,开始支持 amd 处理器的 3d 指令
masm 6.14 这是一个很完善的版本,它在 .xmm 中增加了对 pentium iii 的 simd 指令集的支持,相应增加了 oword ( 16 字节)的变量类型
masm 6.15 2000 年 4 月发布

到此这篇关于如何用masm5.0 (图解)的文章就介绍到这了,更多相关masm用法内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!

相关标签: masm