如何使用宏汇编程序MASM

合集下载

汇编编译工具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宏汇编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的安装和使用

汇编编译工具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使用方法

初学者的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)

汇编学习笔记(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指导书

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运行环境预作报告

实验一宏汇编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运行第一个汇编程序全过程

初次使用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 键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)的求解过程。

相关文档
最新文档