如何使用宏汇编程序MASM
汇编编译工具MASM的使用
实验二汇编编译工具MASM的使用2.1. 实验目的1、学习如何安装MASM;2、学习如何使用和使用编译和链接汇编语言程序。
2.2. 基础知识2、DOS汇编与WIN32汇编在DOS下编写汇编程序,程序员可以管理系统的所有资源,访问和改动系统中所有的内存,修改内存控制块,修改中断向量表截获中断,直接对I/O端口进行读写。
DOS是个单任务操作系统,只有一个运行级别,任何进程和DOS操作系统都是同等级别的。
因此,DOS系统中各个进程会互相影响,如果某个进程死机的话,整个系统都会垮掉。
DOS工作在实模式下,程序员可以寻址1M的内存,通过段寄存器来指定段的初始地址,每个段的大小为64K。
超过1M的部分,就只能把他作为XMS使用。
1M以上的内存空间只能用作数据存放而无法在其中执行程序。
Win32是指32位的Windows操作系统,进程有多种运行级别,操作系统工作在最高级别——0级,而应用程序工作在3级。
在第三级别,进程无法直接访问I/O端口,无法访问其它进程运行的内存,连向自己的运行代码写入数据都是非法的。
只有对于最高级别的进程,系统才是全开放的。
Windows工作在保护模式下,所有的资源对进程来说都是被“保护”的。
在内存方面,Windows使用了处理器的分页机制,程序员不必用一个段寄存器去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(参见80386手册方面的书籍)。
程序员可以直接指定一个32位的地址来寻址4GB的内存。
在程序结构方面,Windows程序也有很大的不同,它是“基于消息”的。
在上面列举的汇编工具中,一些是DOS汇编工具,一些是Win32汇编工具。
初学者可以从DOS汇编入手,先掌握汇编编程的思路、基本语法和编程技巧,待入门后再学习Win32汇编。
当然,学习DOS汇编并不一定需要安装和使用DOS操作系统。
程序员可以在Win32环境中安装MASM 6.0或其它16位汇编工具,在命令提示符状态下编译和链接DOS汇编程序。
masm9.0宏汇编ml.exe完整命令行参数解释
masm9.0宏汇编ml.exe完整命令行参数解释masm9.0是微软VC2008里附带的最新版的宏汇编器,现列出全部命令行参数解释,希望对大家学习WIN32汇编有用./AT Enable tiny model (.COM file)/AT 允许微型内存模式。
对与.COM文件格式的要求互相冲突的代码给出错误信息。
注意该选项和.MODEL TINY伪指令并不完全相同/Bl<linker> Use alternate linker/Bl filename 选择其他的连接器/c Assemble without linking/c 只编译,不连接/coff generate COFF format object file/coff 生成Microsoft公共目标文件格式(common object file format)的目标文件/Cp Preserve case of user identifiers/Cp 保留所有用户定义标识符的大小写/Cu Map all identifiers to upper case/Cu 映射所有标识符的大小写/Cx Preserve case in publics, externs/Cx 保留公共和外部符号的大小写(默认)/D<name>[=text] Define text macro/D sysmbol[=value] 定义给定名字的文本宏。
如果没有value部分,文本宏为空。
定义中以空格隔开的多个符号必须以引号引起来。
/EP Output preprocessed listing to stdout/EP 输出预处理列表到标准输出/errorReport 发送编译器内部错误给微软(这个新增)/F <hex> Set stack size (bytes)/F hexnum 设置堆栈大水(字节),(这与/link /STACK:number是相同的)。
汇编编译工具MASM的安装和使用
老师给的实验内容,在此和大家分享。
1、常用汇编语言工具2、DOS汇编与WIN32汇编在DOS下编写汇编程序,程序员可以管理系统的所有资源,访问和改动系统中所有的内存,修改内存控制块,修改中断向量表截获中断,直接对I/O 端口进行读写。
DOS是个单任务操作系统,只有一个运行级别,任何进程和DOS操作系统都是同等级别的。
因此,DOS系统中各个进程会互相影响,如果某个进程死机的话,整个系统都会垮掉。
DOS工作在实模式下,程序员可以寻址1M的内存,通过段寄存器来指定段的初始地址,每个段的大小为64K。
超过1M的部分,就只能把他作为XMS使用。
1M以上的内存空间只能用作数据存放而无法在其中执行程序。
Win32是指32位的Windows操作系统,进程有多种运行级别,操作系统工作在最高级别——0级,而应用程序工作在3级。
在第三级别,进程无法直接访问I/O端口,无法访问其它进程运行的内存,连向自己的运行代码写入数据都是非法的。
只有对于最高级别的进程,系统才是全开放的。
Windows 工作在保护模式下,所有的资源对进程来说都是被“保护”的。
在内存方面,Windows使用了处理器的分页机制,程序员不必用一个段寄存器去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(参见80386手册方面的书籍)。
程序员可以直接指定一个32位的地址来寻址4GB的内存。
在程序结构方面,Windows程序也有很大的不同,它是“基于消息”的。
在上面列举的汇编工具中,一些是DOS汇编工具,一些是Win32汇编工具。
初学者可以从DOS汇编入手,先掌握汇编编程的思路、基本语法和编程技巧,待入门后再学习Win32汇编。
当然,学习DOS汇编并不一定需要安装和使用DOS操作系统。
程序员可以在Win32环境中安装MASM 6.0或其它16位汇编工具,在命令提示符状态下编译和链接DOS汇编程序。
DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。
(图文版)初学者的MASM5.0使用方法
初学者的MASM5.0使用方法(能保持命令界面的)Cyinsilence(一)首先下载masm5.0(简单,适合初学者),解压到某个盘里(如D:\masm);(二)在随意一个盘里(如F盘)新建一个文件夹(如masm8),把解压后的文件夹里的masm.exe和link.exe复制进masm8里(这里我们要求里面至少应包含masm.exe和link.exe,可能还包含其他的,不过我们只需要最基本的这两个)。
然后就在新建文件夹masm8中建立个文本文件(如test2.txt)写入个汇编程序,保存,将后缀名改为.asm。
(如test2.asm) 这里最好复制一份test2.txt做以后修改用。
这里有一个比较好的汇编程序:DATA SEGMENTMESSAGE DB 'This is asample program of keyboard and display:'DB 'Please strike thekey !',0DH,0AH,'$'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT 21HAGAIN: MOV AH,1INT 21HCMP AL,1BHJE EXITCMP AL,61HJC NDCMP AL,7AHJA NDAND AL,11011111BND: MOV DL,ALMOV AH,2INT 21HJMP AGAINEXIT: MOV AH,4CHINT 21HCODE ENDSEND START(三)进入命令提示行(开始--运行--输入cmd)(四)进入程序所在文件夹,输入masm8所在盘让计算机找到masm8,刚刚我们假设在F盘建立masm8,就输入“F:”回车,键入“cd masm8”,回车,键入“masm test2”,回车,如果程序正确会在文件夹里生成test2.obj,并出现如下界面:之后根据提示输入就可以了,如下图:摁回车后会有如下界面:上述步骤是使计算机执行了MASM.EXE,接下来我们执行LINK.EXE。
汇编学习笔记(13)-宏指令(MASM)
汇编学习笔记(13)-宏指令(MASM)结构说明: 是⼀堆数据的定义的集合基本格式: 结构名称 STRUC 字段的定义 结构名称 ENDS 举例: STUDENT STRUC ID DW ? SCORE DB 1 NAME DB 'STUDENTNAME' STUDENT ENDS定义变量: 变量名结构类型 < 参数表 > 举例: S1 STDUENT <1,50,'zhao'> S2 STDUENT <1,60,'zhang'> S3 STDUENT <1,70,'wang'>结构使⽤: 1. MOV AX, P1.ID 2. MOV BX, OFFSET P1 MOV AL, [BX].SCORE总结: 使⽤起来还是和C/C++ 的结构⽐较类似的,实际上 P1.ID 和 [BX].SCORE 的两种引⽤⽅式本质上是汇编器帮我们转换了地址。
记录说明: 结构是将将⼀堆定义结合起来,⽅便管理,那么记录就是讲⼀个字或者⼀个字节拆分成各种按照位的定义 实际上记录就是⼀个字或者字节的按位定义,所以长度最长不超过16位,右对齐。
基本格式: 记录名称 RECORD 字段1:位宽=初始值,字段2:位宽=初始值,…. 举例: ABCD RECORD AA:5=12, BB:3=6, CC:4=3 内存结构: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 aa aa aa aa aa bb bb bb cc cc cc cc定义变量: 变量名结构类型 < 参数表 > 举例: S2 ABCD <1,2,3> S1 ABCD <1,2,3> S3 ABCD <3,2,1>记录使⽤: WIDTH 返回⼀个记录整体的位宽或者⼀个字段的位宽 MOV AX, WIDTH ABCD MOV AX, WIDTH AA MASK 返回对应字段的掩码 MOV BX, MASK AA; BX = 0001111100000000B总结: 和结构的功能有点类似,相当于在字节尺度尺度上的结构定义,相当于定义标志位,⽽MASK 就是提取标志位的掩码。
masm指导书
第一部分汇编指令学习在教材第三章学习8088的指令系统(指令说明详见教材附录1),掌握指令是用汇编语言编程的基础,这要求我们熟练掌握80X86的每条指令。
学习汇编指令一方面要深刻理解指令的寻址方式,另一方面重在从以下四点来学习识记指令。
1.指令符号识记2.指令格式和操作数3.指令功能4.指令执行对外界的影响例如:加法指令助记符是:ADD指令格式是:ADD OPRD1 , OPRD2OPRD1是任一寄存器操作数或存储器操作数OPRD2是任一寄存器操作数或存储器操作数或是立即数指令影响:影响CF , SF , OF, PF, ZF , AF 标志位指令功能:完成无符号数或有符号数的加法运算,操作数可以是8位(字节)或16位(字)如果我们象上面所述那样熟悉汇编语言指令系统中的每一条常用指令的助记符、指令格式、指令的功能和执行结果对外界的影响,那么,我们应用汇编语言编程时就不存在工具带给我们的困难。
阅读下面两道程序/程序段,建议按上面所述来理解每条指令和程序功能。
程序1code segmentassume cs:codestart: mov ah , 1int 21hcmp al , '0'jb lab1cmp al , '9'ja lab2mov dl , 'n'jmp lab3lab2: cmp al , 'a'jb lab1cmp al , 'z'ja lab4mov dl , 'u'jmp lab3lab4: cmp al , 'a'jb lab1cmp al , 'z'ja lab1mov dl , 'l'jmp lab3lab1: mov dl , '*'lab3: mov ah , 2int 21hmov ah , 4chint 21hcode endsend start —————————————————————————————————程序2code segmentassume cs:codestart: mov cx , 26mov dl , 'a'l ab1: mov ah , 2int 21hadd dl , 1loop lab1mov ax , 4c00hint 21hcode endsend start第二部分汇编程序的建立、执行与调试一、汇编程序建立、调试的软件环境用汇编语言书写程序,从源程序的编辑、编译到调试,我们使用以下工具: 编辑程序一个编辑环境,用于建立源程序masm.exe 编译程序检查源程序的句、语法,生成OBJ文件link.exe 链接程序将OBJ文件转换成EXE文件 调试程序一个帮助检查程序中设计错误的工具将上述工具拷贝到包含DOS系统的软盘上,就在软盘上建立了编辑、汇编、连接和调试汇编程序的环境。
实验一 宏汇编MASM5.0运行环境预作报告
实验一宏汇编MASM5.0运行环境一、实验目的1、熟悉的MASM5.0宏汇编程序运行环境2、掌握用MASM5.0运行汇编语言程序的步骤3、学习及掌握的debug程序的各种命令并调试汇编语言程序。
二、实验仪器计算机、masm汇编运行环境三、实验原理1、建立汇编语言的工作环境(1)编辑程序:EDIT .COM(2)汇编程序:MASM .EXE(3)连接过程:LINK.EXE(4)调试程序:DEBUG .EXE2、运行汇编语言程序的步骤(汇编语言程序的上机过程)在汇编实验步骤的word文档中(请下载参考)。
(1)用汇编程序建立源文件(*.asm)汇编程序:记事本,写字板或EDIT.EXE 。
(文本文件编辑器)扩展名为:.asm(2)用汇编程序(MASM、EXE)产生OBJ文件。
(3)用连接程序(LINK 、EXE)生成EXE文件。
(4)程序的执行直接输入文件名LINKEDIT记事本写字板MASM3、用DEBUG 运行、调试汇编语言程序(1)进入DEBUGC:\ DEBUG (前提DEBUG .COM 程序在C 盘)屏幕显示:- “-”这个符号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG 命令,现在用A命令送程序。
(2)送程序并汇编-A 100169C:0100 MOV DL ,33169C:0102 MOV AH ,2169C:0104 MOV INT 21169C:0106 MOV INT 20169C:0101此程序已送完,并汇编成机器指令(3)现在用G命令一运送程序-G3看一下机器指令是什么样的用反汇编命令U(4)反汇编-U 100 :108段地址偏移地址指令169C :0100 B233 MOV DL ,33169C :0102 B402 MOV AH ,02169C :0104 CD21 INT 21169C :0106 CD20 INT 20169C :D108(5)用Q命令退出DEBUG 返回DOS-QC:\4、DEBUG 命令(1)汇编命令A格式1)A < 段寄存器名>:<位移> ;(段寄器)为段地址2)A <段地址> :<位移> ;(c s) 为段地址3)A <位移> ;4)A ;以CS:100作地址功能:键入该命令后显示的地址和位移并等待用户从键盘逐条键入汇编命令。
使用MASM运行第一个汇编程序全过程
初次使用MASM编译器编写汇编程序的完整过程1.运行 cmd 命令2.输入edit3.进入汇编源码编辑框4.在源码输入框中输入汇编源码并将源程序保存,并拷贝到MASM和LINKER所在的盘符或文件夹下5.在 Dos 环境下进入到 MASM 5.0 汇编编译器所在的目录6.然后运行 masm.exe可以从上面的截图中看到 [. ASM] 的标记,这个标记代表的是需要在这里输入要编译的源程序文件名,这里有一点特别的是,由于默认的文件扩展名为 .asm ,所以在编译 .asm 的汇编源程序时可以不用指定源程序所在文件的扩展名。
7.我们将一开始编辑好的汇编源程序所在的文件输入以进行编译(1)此时可以看到编译器提示需要输入要编译出的目标文件的名称,由于在一开始已经指定了 js.asm,所以编译器自动指定了目标文件的名称为 js. obj 的名称,如果在这里不做修改的话,则编译器会以默认目标文件名称 js. obj 进行输出,在这里我并不改变名称,所以直接按 Enter 键即可;(2)提示需要输入列表文件的名称,其实是完全可以不要让编译器生成这个 LST 文件的,所以也不需要进行输入,直接按 Enter 键即可;(3)提示需要输入交叉引用文件的名称,这里也完全可以不要让编译器生成这个 CRF 文件,所以也不需要进行输入,直接按 Enter 键即可。
至此,汇编源程序编译成功编译得到的结果就是在我的 D:\ 目录下生成了一个 JS.obj 文件8.下面就是要实现对目标文件的连接经过编译操作后,我们得到了一个 .obj 的目标文件,但很显然,这还并不是一个可执行文件,下面就需要对目标文件进行连接,从而得到一个可执行文件。
一般来说,需要准备一个连接器,这里我使用的是微软提供的 Linker 连接器,即LINK.EXE。
9.进入 LINK.EXE 文件所在目录,直接运行 LINK.EXE此时提示需要输入被连接的目标文件的名称,这里也就是JS.obj ,由于我的 JS.obj 和 Link.exe 在同一目录下,所以不需要指定路径,直接给出.obj的名称即可,按Enter 键。
第四章 MASM-86宏汇编语言程序
第四章MASM-86宏汇编语言程序在上一章里,我们详细学习了8086的指令系统,但仅仅了解了8086的每一条指令的功能和格式还不够,还不能写出汇编语言的程序,因为一种编程语言还有其他一些语法上的规定。
本章就是介绍这样的语法规定,包括汇编语言程序的结构和规范,及伪指令的用法。
4.1汇编语言和汇编程序一汇编语言( Assembly Language)编程语言是分层次的,这一点我们在第一章就已经介绍过了。
从最低级到高级,我们分别有机器语言、汇编语言、高级语言。
机器语言的指令("语句"),是用0、1二进制代码表示的。
这种语言难以记忆和理解,但它是机器唯一能直接理解和直接执行的语言。
汇编语言采用助记符表示0、1二进制代码,还使用符号地址及其他一些语法规定。
这样,汇编语言的指令与机器语言的指令基本上一一对应,基本上属于同一层次的语言,但可理解性大大加强,也较容易记忆。
但汇编语言指令的功能受处理器的限制,一般不太强。
高级语言是一种面向算法的语言,其语句类似人类的自然语言,因而易学易用,可移植性好。
但高级语言的语句与机器可执行的机器指令之间并无直接的对应关系,因此,高级语言程序执行前需要"翻译"成机器指令。
这种关系带来了程序效率(时间、空间)的损失。
汇编语言程序执行前也需要经翻译后产生机器代码,但这种翻译要简单得多。
二.汇编程序(Assembler)上面介绍过,汇编语言源程序输入计算机不能直接被计算机识别和执行,必须经翻译后产生机器代码才行。
我们把这种翻译过程称为汇编。
汇编可以使用人工查表的方法完成,称为人工汇编;也可以借助于一种系统通用软件,使用计算机来完成,称为自动汇编。
完成自动汇编的计算机程序称为汇编程序(Assembler)。
也就是说,汇编程序是执行把汇编语言源程序翻译成机器能够识别和执行的目标程序(即二进制的机器代码程序)任务的一种系统程序,它与汇编语言程序(即用汇编语言编写的源程序)是两回事。
宏汇编MASM系统
1.1、宏汇编MASM系统在宏汇编MASM系统中,程序员可用二种方法来处理源程序:命令行和集成环境。
1.1.1 命令行命令1、编写源程序可用计算机系统中各种能编辑文本文件的编辑器来编辑汇编源程序。
常用的编辑器有:EDIT、Q、Word、记事本和写字板等。
源文件的后缀为:ASM。
2、汇编程序当源程序编写好后,可用MASM命令来汇编该源程序。
如果源程序没有语法错误,那么,将生成目标文件(OBJ文件),为最终生成可执行文件作准备,但如果源程序有错误,汇编程序将显示出错误位置和原因,也可用列表文件(LST文件)来查看出错位置和原因。
下面给出一些使用该命令的实例情况。
例1.1 查看MASM命令的功能。
(其中:用户输入的命令用下划线,系统显示的内容没有下划线。
以下与此相同)…>masm /?usage: masm/optionssource(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;]……常用的选项有:/Zi和/Zd,因为它们与符号跟踪有关。
例1.2 用MASM命令汇编源程序…>masm testMicrosoft (R) MASM Compatibility DriverCopyright (C) Microsoft Corp 1993. All rights reserved. Invoking: ML.EXE /I. /Zm /c test.asmMicrosoft (R) Macro Assembler Version 6.11Copyright (C) Microsoft Corp 1981-1993. All rights reserved. Assembling: test.asm如果MASM命令显示了类似如上的处理结果,那么,表示源文件TEST.ASM已成功汇编,并已生成了其目标文件TEST.OBJ。
例1.3 用MASM命令汇编源程序…>masm test……Assembling: test.asmtest.asm(10): error A2070: invalid instruction operands 如果MASM命令显示了类似如上的处理结果,那么,表示源文件有错,没有生成其目标文件。
ASM宏汇编使用指导手册
ASM-51宏汇编使用手册ASM-51宏汇編主要川來开发Inter8051系列单片机.它具有宏处理.数据处理•列液处理和条件处理等多种功能。
源程序的编写完全采用Inte「标准助记符和行恪式。
在編写程用过程中.吋借助于文本编辑(Windows的记泉本)或文字处理软件Word等編休经ASM-51汇編后生成列表输出文件(丄ST)和目标代码文件(・HEX)。
此目标代码文件(.HEX)町H接用CZS ・51或MedWin. Keil、Debug8051进行模拟/调试,或宜接用于硬件仿真器上运行•当然.这也是要烧写到单片机ROM中的代码。
1、宏汇編语肓的基本i吾法1、1宏汇編的特点ASM-51宏汇編完全支持Inte「助记符的汇編语育•它含有宏语句.英文人小写字母・变册名.标号等不受限!有二十.十六进制和弗参数类型.有汇編控制播令和多层条件语句.程用逻轲分段.还冇模块化程序设汁的连接功能.汇編速度抉等特点。
r2汇编处理过程(1)用行编辑EDLIN或文字处理软件WS或全屏毎編辑软件PE等.編辑宏江編语言谏程序.它的文件扩展名为。
ASM.(2)用ASM-51宏M褊程序对上述漁程序文件进行汇編.产生扩展名为丄ST的列表输出文件和扩展划为.HEX的目标代码文件(.HEX).列茨输出文件包含淞程序语句所汇編成的代码•以及有关的地址.语句和符号表等.目标代码文件包含源祝序语句所汇编成的代码.不包含任何符号信恩或助记符。
进行模拟/调试.或宜接用于硕件仿真器上运行。
1、3语句汇編语肓可分为两类语句:捋令性语句和描示性语句.(1)描令性语句这一类语句是抬在汇编过程中能生成揣令代码的语句(如MOV • DEC等).其恪式为:[标号:][摇令助记符][操作数][•注释]其中方括号[]中为选择项.卜同。
(2)抬示性语句这一类语句即通帘所说的伪折令•它揣示汇編程序后面的播示性语句如何产生代码.ASM-51宏汇編完全支持Inte「助记符的汇編语乳因此汇編程序的格式.抬令完全号8051订编语肓一样.这屮不再介绍它们的揣令系统。
如何用MASM5.0使用方法及附版本号
如何⽤MASM5.0使⽤⽅法及附版本号Masm5.0是⼀款DOS下汇编⼯具包,包含了MASM、LINK、EDIT、DEBUG、DEBUG32等程序,可谓是汇编者的利器,⽀持win7 64位操作系统,有需要的不要错过。
如果是64位的系统需要按照dosboxMasm5.0(windows x64位系统下汇编语⾔环境配置⼯具集合) 64位/32位类型:编程⼯具⼤⼩:2.9MB语⾔:简体中⽂时间:2021-11-02查看详情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:\masmd:2、然后将⾃⼰在⽹上下载的DEBUG32.exe和masm5.0中的所有东西(包括masm.exe,link.exe等等)都放在d:\masm ⽂件夹下。
MASM的使用
MASM 的使用1、将C盘的MASM文件夹COPY到D盘根目录下面。
2、选用一个文本编辑软件(如记事本、TC等)编写一个汇编源程序(例3.10)3、编写完以后保存为XXX.ASM文件,保存路径:D盘的MSAM文件中(一定要保证路径的正确)。
4、保存完以后,点开始→运行→cmd→确定进入到DOS界面。
5、输入“D:”进入D盘根目录。
6、输入CD MASM进入到MASM文件目录当中。
7、用MASM软件对汇编源程序进行汇编,即输入MASM XXX回车出现如下情况:Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename [XXX.OBJ]: ↙Source listing [NUL.LST]: ↙Cross reference [NUL.CRF]:EXAMPLE↙50848+450352 Bytes symbol space free0 Warning Errors0 Severe ErrorsD:\masm>汇编程序MASM 需要和用户进行上述相关信息交互,以便进行汇编、生成相应的文件。
(a) 提示用户输入要建立的目标文件名,若默认括弧内的目标文件名,则可直接按回车;(b) 询问用户是否要建立汇编列表文件,若要,则打入文件名,否则按回车;(c) 询问用户是否要建立交叉索引文件,若要,则打入文件名,否则按回车。
注意:仅当屏幕上显示无错误时(警告错误为“0”,严重错误为“0”),才可进行下一步骤连接,否则要根据提供源程序的错误行号和错误性质,重新对源程序进行修改、编辑和汇编。
8、如果没有报错的话,观察masm文件夹当中没有没生成XXX.OBJ文件;如果报错就以源程序里修改程序,直到没有错为止。
9、生成XXX.OBJ文件之后,就开始对XXX.OBJ文件进行连接,用LINK软件,在D:\masm>后面直接敲入LINK XXX回车,出现如下情况:Microsoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File [XXX.EXE]: ↙List File [NUL.MAP]: ↙Libraries [.LIB]: ↙Warning: No STACK segment There was 1 error detected.D:\masm>连接程序Link 需要和用户进行上述相关信息交互,以便连接和生成相应的文件。
实验一如何用MASM5
实验一如何用MASM5实验一如何用MASM5MASM(Microsoft Macro Assembler)是一种汇编语言开发工具,由微软公司开发并用于MS-DOS和Windows操作系统。
以下是一些使用MASM5的步骤和注意事项:2.配置环境变量:MASM5安装后,需要配置系统的环境变量,以便在命令行中访问MASM5的可执行文件。
将MASM5的安装目录添加到系统的PATH环境变量中。
4. 编写汇编代码: MASM5使用8086汇编语言,编写代码时需要遵循特定的语法规则。
在.asm文件中,您可以使用各种指令和汇编器指令来编写代码。
例如,您可以使用MOV指令将一个数据从一个位置复制到另一个位置。
5. 汇编和链接: 打开命令提示符,导航到包含您的.asm文件的目录。
运行以下命令来汇编和链接您的代码:```masm filename.asm;link filename.obj;```这将生成一个可执行文件,可以在DOS或Windows命令行下运行。
6.运行程序:运行生成的可执行文件,您将看到您的汇编程序在屏幕上输出结果。
请注意,MASM5是一个古老的工具,可能不再在最新的Windows操作系统上正常工作。
如果您遇到问题,您可以尝试使用最新的版本,如MASM32或MASM64总结:在实验一中,我们学习了如何使用MASM5进行汇编编程。
我们了解了如何安装MASM5,配置环境变量,并编写汇编代码。
我们还学习了如何通过汇编和链接命令来生成可执行文件,并在命令行中运行它。
尽管MASM5是一个古老的工具,但它仍然是学习汇编语言和了解低级计算机原理的好选择。
宏汇编软件MASM51的使用
宏汇编软件MASM51的使用第一 节 概 述单片机开发可以用手工汇编和机器汇编两种方法。
采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试。
由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。
这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。
而采用机器汇编,在很大程度上可以避免上述麻烦。
只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。
机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。
因此使用机器汇编大大提高了单片机开发的速度。
源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。
在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有:1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。
这些给用户编写程序带来很大的方便。
2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。
此外还允许用条件汇编语句以及完善的伪指令系统等。
减少了编写、输入源程序的工作量。
3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。
4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。
运行MASM51软件的条件很低,现在的PC机都能达到。
Masm6.11的使用方法汇编语言程序设计最终版
实验一 Masm6.11的使用方法一、实验目的1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。
2、创建一个工程文件,对该工程文件进行编译,连接,并运行;3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。
二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境(1)Intel Core Duo CPU P8700(2)内存4G2、软件环境(1)Window XP Professor(2)MASM6.11开发软件三、实验步骤1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:\Masm611目录下Setup.exe文件,按照安装提示将程序安装到C盘根目录。
2、将C:\masm611\Bin目录下的所有文件拷贝到C:\Masm611\binr目录下,将C:\Masm611\help目录下的所有文件拷贝到c:\Masm61\binr目录下。
3、执行C:\Masm611\Binr目录下的pwb.exe文件,打开开发环境。
4、在PWB编辑窗口中输入实验1.1中的程序,并保存为test.asm文件。
5、执行Project菜单下New Project子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。
6、执行Project下Build子菜单编译连接该工程文件,并运行该可执行程序,观察程序执行的结果。
7、执行Run菜单下Debug子菜单,进入调试环境。
8、在程序的如下位置设置断点,并按要求观察寄存器堆栈或者内存单元的值。
Data segmentMsgl db "please input the number of student:$"Num db 0EnMsg db 0ah,0dh,'$'Msg2 db "please input the grade of each student:$"Msg3 db "the average grade of these student is:$"avg db 0ascavg db 0,0,'$'Data endsStack segment para stackdb 20h dup(0)Stack endscode segmentAssume Cs:code,Ss:stack,ds:DataStart: mov ax,datamov ds,axlea dx,Msgl ;1此行设置断点,观察DS所指示的数据段的情况mov ah, 09hint 21hCall Numproc ;2此行设置断点,观察屏幕输出,并观察堆栈的变化mov num,bl ;3此行设置断点,观察bl的值,并观察堆栈的变化lea dx,EnMsgmov ah,09hint 21hlea dx,Msg2mov ah,09hint 21hcall Avgproc ;4此行设置断点,观察屏幕输出信息lea dx,EnMsg ;5此行设置断点,观察avg所对应的存储单元的值mov ah,09hint 21hlea dx, Msg3mov ah,09hint 21hcall bta ;6此行设置断点,观察屏幕输出信息mov ah,4ch ;7此行设置断点,观察ascavg所对应的存储单元的值及屏幕输出信息int 21hNumproc procpush axpush cxpush dxlea dx,EnMsgmov ah,09hint 21hmov bl,0lop1: mov ah,01hint 21h ;8设置断点观察al寄存器的值cmp al,0dhjz lop2cmp al,'0'jl lop1cmp al, '9'ja lop1sub al,30hmov cl,almov al,blmov ch,10mul chmov bl,al ;9设置断点观察al寄存器的值add bl,cl ;10设置断点观察bl寄存器的值jmp lop1lop2: pop dxpop cxpop axretNumproc endpAvgproc procpush axpush cxxor dx,dx ;11设置断点观察堆栈值的变化mov cl,num ;12设置断点观察cl寄存器的值lop3: call Numprocxor ax,axmov al,bladd ax,dxDiv numadd avg,al ;13设置断点观察avg存储单元的值xor dx,dxmov dl,ahsub cl,1jnz lop3pop ax ;14设置断点观察avg存储单元的值pop cxret ;15设置断点观察堆栈值的变化Avgproc endpbta procpush ax ;16设置断点观察堆栈值的变化push bxxor ax,axmov al,avgmov bl,10div bladd ah,30h ;17设置断点观察ax寄存器的值add al,30hmov ascavg ,al ;18设置断点观察ascavg存储单元的值mov ascavg+1,ahlea dx,EnMsgmov ah,09hint 21hlea dx,ascavg ;19设置断点观察dx寄存器的值mov ah,09hint 21hpop bxpop axretbta endpcode endsend start9、按照程序的执行过程绘制出程序流程图。
实验一 如何用MASM5
实验一如何用MASM5.010影像2班严佳一、实验目的1、熟悉MASM5.0宏汇编程序运行环境2、掌握用MASM5.0运行汇编语言程序的步骤3、学习及掌握的debug程序的各种命令并调试汇编语言程序。
二、实验设备条件计算机、masm汇编语言运行环境三、实验内容运行调试HELLO四、实验步骤1.编辑在E:\masm5.0目录下写好hello.asm文件。
(1)新建txt文本,在文本中输入下面的汇编语言,输入完成后保存“hello.txt”。
DA TA SEGMENTBUF DB 'HELLO WORLD! THIS IS MY FIRST ASM FILE! $'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DA TAMOV DS,AXLEA DX,BUFMOV AH,09INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(2)将文本属性修改为asm 。
2. 进入masm5.0所在路径。
Winkey+R 打开程序运行cmd 打开masm汇编语言运行环境e: 打开E盘cd masm5.0 打开masm5.0文件夹3、汇编格式:masm asm源文件及路径1 obj文件目标路径2(省去则默认当前路径)如:E:\masm5.0> masm hello.asm由图中可以看出:0 个警告错误0个严格错误(如果有严格错误,汇编不能通过,必须返回编辑状态更改程序。
)结果:程序无错则在E:\masm5.0中增加文件HELLO.OBJ4、连接格式:link obj文件路径1如:E:\masm5.0> LINK HELLO.OBJ结果:程序无错则在E:\masm5.0中增加文件HELLO.EXE5、运行格式:exe文件全名(即"HELLO.EXE")如:E:\masm5.0> HELLO.EXE6、调试-u 反汇编-r 显示寄存器内容-g [=address1][address2][address3] 执行到断点行,如:-g 5 为执行到第5行-t [=address][value] 跟踪,配合-g使用-d 查看数据-q 退出返回操作系统五.实验心得1.修改文件属性(1)先打开“工具”中的“文件夹选项”(2)把“查看”中的“隐藏已知文件类型的扩展名”的小勾取消(3)更改扩展名,修改属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何使用宏汇编程序MASM.EXE和连接程序LINK.EXE
1、首先在硬盘上建立一个文件夹,例如:D:\MASM.
2、下载MASM.EXE和LINK.EXE到D:\MASM文件夹里.
3、经过以上两步,我们已经做好了准备工作,接下来书写程序。
我们的程序要求为,计算 y = a × b + c - 18,a、b、c 均为带符号的8位二进制数据,为了实验观看实验结果,我们假设 a = 34H、b = 56H、c = E7H。
程序原代码如下(分号后面内容为注释内容,可以不输入):
CC EQU 18 ;伪指令定义CC
STACK SEGMENT ;堆栈段起始
DW 256 DUP(?) ;在堆栈段中预留了256个字的内容
TOP LABEL WORD ;TOP为栈顶偏移地址
STACK ENDS ;堆栈段结束
DATA SEGMENT ;数据段起始
DAT1 DB 34H ;DAT1即为题中操作数a,为字节,存于数据段中
DAT2 DB 56H ;DAT2即为题中操作数b,为字节,存于数据段中
DAT3 DB 0E7H ;DAT3即为题中操作数c,为字节,存于数据段中
DATY DW ? ;DATY即为题中计算结果的预留空间为字,存于数据段中
DATA ENDS ;数据段结束
CODE SEGMENT ;代码段起始
ASSUME CS:CODE,DS:DATA,SS:STACK ;分配段地址对应关系
START: MOV AX,DATA ;START为标号,MOV语句完成DATA数据段地址送入AX
MOV DS,AX ;将AX内容送入DS,即赋予DS数据段DATA的段地址
MOV AX,STACK ;将STACK堆栈段地址送入AX
MOV SS,AX ;将AX内容送入SS,即赋予SS堆栈段STACK的段地址
MOV SP,OFFSET TOP ;SP设初值
MOV AL,DAT1 ;取a,直接寻址方式
MOV BL,DAT2 ;取b,直接寻址方式
IMUL BL ;AX <- AL * BL,即将a * b的值存入AX
MOV BX,AX ;将AX内容保存至BX
MOV AL,DAT3 ;取c,直接寻址方式
CBW ;由于c是8位有符号数,所以做符号扩展至AH
ADD AX,BX ;AX <- AX + BX,即完成的操作为将a*b+c结果存入AX
SUB AX,CC ;AX <- AX - 18
MOV DATY,AX ;将a*b+c-18的内容存放至数据段中偏移地址DATY的内存中
MOV AH,4CH ;将4CH存入AH,为了下句调用DOS 21号中断
INT 21H ;调用DOS 21中断,由AH=4CH决定返回DOS操作系统
CODE ENDS ;代码段结束
END START ;程序结束
在D:\MASM目录下新建文件名为“Sample.asm”(一定要注意扩展名必须为.asm或.ASM,大小写无所谓)的文件,将以上代码输入后保存。
4、这时候D:\MASM文件夹下就有3个文件了,分别为“MASM.EXE”、“LINK.EXE”和“SAMPLE.ASM”。
我们将 sample.asm 文件汇编为扩展名为 .obj 的文件,如下图,首先进入DOS环境下的D:\MASM目录,然后使用 MASM SAMPLE.ASM 命令。
使用DOS的DIR命令查看当前目录下的文件,已经变为4个,多了一个sample.obj文件。
然后,使用LINK.EXE,将SAMPLE.OBJ文件链接生成可执行文件SAMPLE.EXE。
使用DOS的DIR命令,可以查看到,又多了一个名为sample.exe文件。
5、这时候,我们可以执行sample.exe,可以看到执行正常,但是没有任何输出,这是因为,我们只是改变了内存单元和寄存器的数据,并没有输出,所以,我们需要使用debug来调试程序,观察程序的执行过程,和对寄存器和内存单元的影响。
至此为止,我们的任务已经圆满完成,计算出了a*b+c-18的内容(114DH),并存入了相应的内存单元中。
PS:在Debug过程中,自己可以通过e指令修改内存单元内容,使得程序完成a、b、c不是我们预定内容(34H、56H、E7H)的求解过程。