汇编语言的实现也是先利用某种编辑器编写汇编语言源程序(*.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伪指令所完成的。采用简化段定义格式的程序,在主存中从低到高依次安排代码段、数据段和堆栈段。

找的好辛苦呀

大哥看的好的话就加给小弟呀

呵呵

祝你成功呀

参考资料:http://blog.chinaunix.net/article.php?articleId=40436&blogId=8327

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安装教程_MASM使用方法及版本号相关推荐

  1. Matlab 2018a安装教程和破解方法(附Crack文件)

    参照: Matlab 2018a安装教程和破解方法(附Crack文件) 安装完成出现错误:Matlab安装后打开出现错误:License checkout failed. License Manage ...

  2. Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法

    Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的 ...

  3. M1芯片Mac安装达芬奇17闪退安装不了,怎么办?达芬奇17直装优化版支持big sur/M1芯片处理器 详细的安装教程+中英文设置方法

    达芬奇调色软件DaVinci Resolve Studio 17是Blackmagic Design 旗下一款著名的调色软件,也是世界上唯一一款将专业8K编辑,色彩校正,视觉效果和音频后期制作功能集于 ...

  4. 3dmax2018官方完整版(64位)安装教程、激活方法

    安装教程 FR:徐海涛(hunk Xu) QQ技术交流群:386476712

  5. masm5安装教程_汇编语言程序环境搭建masm+debug64位 win10/7

    介绍:MASM是Microsoft Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译 ...

  6. python数据库安装教程_python MySQLdb Windows下安装教程及问题解决方法

    使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 https://www.jb51.net/article/657 ...

  7. anaconda方法安装python教程_anaconda的安装教程和使用方法

    一.anaconda安装方法: 1.下载: anaconda官方下载地址:https://www.anaconda.com/download/ 2.安装: 可以自己指定路劲,也可以选择默认安装,最后记 ...

  8. Docker安装教程及使用方法

    一.  docker容器介绍 1.什么是容器: docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的 ...

  9. ug nx8.0 32位64位安装教程及破解方法

    安装具体操作教程参照原文网址:http://www.cadzxw.com/6921.html

  10. Serv-u 10.3 的图文安装教程及使用方法

    现在很多windows服务器都是使用serv_u作为ftp服务器,一般情况下我们使用Serv-U FTP Server v6.4.0.6,这里以serv_u 10.3为例介绍下,方便需要的朋友 一.安 ...

最新文章

  1. Verilog中可综合与不可综合的语句
  2. 【Android Developers Training】 104. 接受地点更新
  3. 深入认识javascript中的eval函数
  4. php websocket 帧封装,swoole websocket封装类和调用
  5. 5月16日 AJAX
  6. 借伞,取经,停车,合作.
  7. LookupError: unknown encoding: cp65001及命令行无法输入中文问题(转)
  8. 转:PHP程序里的敏感信息处理方法
  9. 数据库入门-pymysql模块的使用
  10. VS调试按钮和运行按钮无法使用
  11. 前端er应该掌握的数据可视化技术
  12. 百度统计之百度代码引用
  13. 阿里云服务器密码忘了怎么修改
  14. 对算法的时间复杂度的理解
  15. 程序员必看:一款巨好用的免费简历“神器”(据说有了它,再也不发愁找工作啦!)
  16. 用腾讯云COS制作个人图床
  17. 深入理解布局约束 | 开发者说·DTalk
  18. 我和八阿哥的哪些事1
  19. 调试汇编程序详细过程
  20. Oracle DG 状态健康检查

热门文章

  1. 《数学建模与数学实验》第1章学习笔记
  2. hyper-v无法连接本地计算机,如何在Hyper-V虚拟机中访问本地和USB硬盘驱动器
  3. java画地图热力图_高德地图+热力图+AJAX(SSM)
  4. mysql按基本时间单元_超星尔雅MYSQL数据库基础加讲义单元测试答案
  5. eclipse导入android项目
  6. Unity游戏接入Steam成就
  7. 人脸识别-倍加信梯控控制
  8. 卡尔曼滤波,互补滤波,“Tsinghua”滤波
  9. 解决:惠普HP LaserJet Pro M126a MFP 驱动 安装失败,及其它同类打印机失败问题
  10. 安装win10+黑苹果双系统零基础教程