汇编编译工具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汇编程序。
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、按照程序的执行过程绘制出程序流程图。
如何使用宏汇编程序MASM

如何使用宏汇编程序MASM.EXE和连接程序LINK.EXE1、首先在硬盘上建立一个文件夹,例如: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 ;伪指令定义CCSTACK 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数据段地址送入AXMOV DS,AX ;将AX内容送入DS,即赋予DS数据段DATA的段地址MOV AX,STACK ;将STACK堆栈段地址送入AXMOV 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的值存入AXMOV BX,AX ;将AX内容保存至BXMOV AL,DAT3 ;取c,直接寻址方式CBW ;由于c是8位有符号数,所以做符号扩展至AHADD AX,BX ;AX <- AX + BX,即完成的操作为将a*b+c结果存入AXSUB AX,CC ;AX <- AX - 18MOV 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,大小写无所谓)的文件,将以上代码输入后保存。
Masm for Windows 集成实验环境快速入门

Masm for Windows 集成实验环境快速入门1.打开Masm for Windows 集成实验环境依次点击“开始/程序/汇编语言集成实验环境/Masm for Windows集成实验环境”菜单进入“Masm for Windows集成实验环境”。
2.输入汇编程序在图2的“程序输入区”中的输入一个在屏幕上显示”Hello World!”的汇编程序,如图3所示,红方框内是需要输入的汇编程序代码,而其它的汇编程序代码该软件自动生成汇编程序框架。
3.保存汇编程序点击“工具栏”中的“保存”按钮(或“文件/另存为”或“文件/保存”),弹出“另存为”对话框,键入文件名,如“第一个汇编程序”,然后点击“保存”即可。
4.运行程序点击“工具栏”中的“运行”按钮,即可出现程序的运行结果。
提示:程序的运行结果的下面的“Press any key to exit”表示按任意键退出DOS窗口。
5.修改程序语法错误当运行程序发生语法错误时,Masm for Windows集成实验环境会自动定位源程序中错误所在行的位置并高亮显示该行,修改好第一条发生错误行后,双击任一条错误信息,该软件定位源程序中与之相对应错误所在行的位置并高亮显示该行,以便改正错误。
提示:汇编程序的语法错误信息的形式:(下面的例子是图6中的错误信息)文件名行号冒号错误编号冒号错误内容↓↓↓↓↓↓C:\汇编程序文件夹\第(9) :Error A2008 :Syntax error:CODES一个程序.asm小技巧:一条语句错误可能会产生若干条错误信息,例如下面图6中就是因为第9行SEGMENT多输入一个S,导致很多错误,只要在第9行SEGMENTS改为SEGMENT即可调试通过。
特别提示:一般情况下,第一条错误信息最能反映错误的位置和类型,所以调试程序时务必根据第一条错误信息进行修改,修改后,立即运行程序,如果还有很多错误,要一个一个地修改,即,每修改一处错误要运行一次程序。
Win32汇编--使用MASM

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都找到了⾃⼰的⼩窝。
Masm for Windows 集成实验环境使用说明

Masm for Windows集成实验环境使用说明
一、下载安装
Masm for Windows 集成实验环境 2015软件可从如下网址下载:
二、基本操作
打开Masm for Windows 集成实验环境 2015,出现图1所示界面。
图1 程序界面
可以看到这里整个伪指令的框架已经给好,就像emu8086中的EXE template一样。
编写程序时,只需将需要的代码填写到相应的位置即可,左侧还提供了很多的帮助和范例什么的,使用非常方便。
三、实例说明
下面通过编写一个简单的小程序来对该软件的使用进行说明。
编写程序实现屏幕打印:I will finish my undergraduate education in bjut!
汇编语言程序编写如图2所示。
写好之后,直接点击运行按钮。
蹦出对话框提示要先保存,那么进行保存,如上图3所示。
命名为example再次进行运行,蹦出DOSBOX如下图4所示,显示运行结果。
图4 程序运行DOS窗口
如果运行时有错误,则会出现错误描述,指出是什么错误在哪行,如图2.5所示。
图5 错误提示
进行程序调试时,点击调试按钮,弹出dos对话框。
这里可以使用各种汇编调试时使用的指令,比如-T :单步执行指令,或者-P:跟踪执行并跳过子程序命令。
图2.6所示的是-p指令使用。
图6 调试程序DOS对话框
每次p指令之后都会显示寄存器内的数值和FR的状态,以及下一条指令是什么。
对调试程序来讲,只要熟悉汇编程序的各种调试指令以及它们的使用方法,就可以非常方便地进行程序调试了。
DOSBox+MASM搭建汇编语言运行环境图文教程

DOSBox+MASM搭建汇编语⾔运⾏环境图⽂教程⼀、前期准备1、安装DOSBox-0.74;2、MASM⼯具包将Masm⽂件夹放⼊某个磁盘根⽬录下下载⽂件打包MASM多个版本打包(附dosbox与教程)类型:编程⼯具⼤⼩:21MB语⾔:简体中⽂时间:2020-01-11查看详情⼆、安装dosbox与masm1、下载的dosbox解压;运⾏exe,⼀直下⼀步即可;2、masm⽤来编译汇编程序;到⽹上搜索下载即可;解压⽬录如下:将解压masm,将⽂件放在特定的⽬录下;例如:D:\GongJu\masm3、挂载dosbox⽬的是将dosbox的c盘挂载到masm的⽬录下;简单点说就是挂载完后,dosbox的c盘相当于是D:\GongJu\masm具体执⾏:打开dosbox解压⽬录,运⾏ xxxOption.bat会弹出⼀个记事本,找到[autoexec],组下⾯添加两⾏命令:MOUNT C D:\GongJu\masmset PATH=$PATH$;D:\GongJu\masm4、完成后,打开dosbox,输⼊命令 c: 切换到c盘,然后输⼊命令 dir,如果显⽰的是masm⽬录下的内容则挂载正确;5、创建汇编程序可以在masm的⽬录下新建⼀个 xxx.asm,然后编写代码即可;汇编的helloworld1、新建⼀个⽂本⽂件编写代码DSEG SEGMENTMESS DB 'Hello,World!' ,0DH,0AH,24HDSEG ENDSSSEG SEGMENT PARA STACKDW 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGBEGIN: MOV AX,DSEGMOV DS,AXMOV DX,OFFSET MESSMOV AH,9INT 21HMOV AH,4CHINT 21HCSEG ENDSEND BEGIN或者DATAS SEGMENTSTRING DB 'Hello World!',13,10,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA DX,STRINGMOV AH,9INT 21HMOV AH,4CHINT 21HCODES ENDSEND START将⽂件保存为hello.asm;2、编译运⾏将hello.asm移动到masm⽬录下;打开dosbox;编译:将 hello.asm编译成 hello.obj输⼊命令masm hello.asm连接:编译会⽣成⼀个 hello.obj⽂件,连接该⽂件⽣成可执⾏⽂件hello.exe 输⼊命令link hello运⾏:这时已经编译连接完成,⽣成了⼀个hello.exe;运⾏hello.exe命令:hello可以看到成功输出了 hello world下⾯是其他⽹友的补充搭建配置如下(放⼤看效果更好):masm.exe:汇编程序,⽤于汇编源程序(.asm),得到⽬标程序(.obj) link.exe:连接程序,⽤于连接⽬标程序,得到可执⾏程序(.exe) debug.exe:调试程序,⽤于调试可执⾏程序如果烦上⾯⼏个命令,可以写⼀个批处理⽂件(如下):@echo offmasm %1;if errorlevel 1 pause & edit %1.asmlink %1;debug %1.exe说明:%1是输⼊⼀个参数的意思,这个⼤家可以学⼀下window的批处理。
使用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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
老师给的实验内容,在此和大家分享。
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位进程。
对于一些可能会影响整个操作系统工作的指令,Win32操作系统会拒绝执行。