MASM汇编语言程序设计
- 格式:ppt
- 大小:547.50 KB
- 文档页数:14
下面我们以1个简单的例子来说明源程序的汇编、链接与调试编程计算Y=a*b+c-3其中a=1;b=-1;c=4;常数为3,显然Y为0步骤1:编写源文件我们打开已编好的源文件simple.txt(用记事本打开simple.txt)定义常数为3,(光标指向常数定义)第一段是256字的堆栈段,(光标指向堆栈段)第二段是数据段,(光标指向数据段)在数据段定义变量如下:DA T1对应a(光标指向DA T1); DA T2对应b(光标指向DAT2), 其中FFH为-1的补码; DAT3对应c(光标指向DAT3);DA TY单元存放结果Y(光标指向DATY)第三段是代码段,(光标指向代码段)步骤2:汇编源程序首先,用cmd命令进入DOS环境;(开始->cmd)然后,路径要切换到MASM所在的盘符D;(D:)接着,进入MASM50文件夹;(cd masm50)显示文件夹下的内容;(dir/w)汇编程序是MASM.EXE;(光标指向MASM.EXE)链接程序是LINK.EXE; (光标指向LINK.EXE)源程序是simple.asm; (光标指向simple.asm)下面对源程序simple.asm进行汇编(1)输入masm simple.asm,(输入masm simple.asm)注意一是源文件名不能以数字开头且字符长度不要超过8个;二是源文件如果不在当前路径下时,要指明其存放路径;输入好后,回车(回车)(2)指定目标文件名,直接回车默认是simple.obj,(光标指向simple.obj)这里我们直接回车(回车)(3)指定源程序列表文件名,直接回车默认是不产生,输入simple,回车(输入simple,回车),过会儿我们可以用记事本查看simple.lst(4)指定交叉索引文件名,交叉索引文件列出了程序中所定义的所有标识符和标号及其引用情况输入simple,回车(输入simple,回车)提示31行有错误,未定义标识符CO(光标指向错误处)下面我们要修改源程序,使源程序无语法错误用记事本打开simple.lst(相应操作)源程序列表列出行号,代码偏移地址,二进制指令码,源代码,(光标指向相应位置)下面是段名,标识符信息及其属性(光标指向相应位置)在第34行,第35行之间是错误提示信息,(用拖曳蓝色反标提示信息),发现前面定义了Con,而这里漏掉了n,(拖曳蓝色反标Co),我们找到了语法错误(关闭Simple.lst窗口)输入edit simple.asm(输入edit simple.asm),打开源文件simple.asm找到错误行(滚动条下拉),在Co后添加n(添加n)保存文件,(File->Save)退出edit(exit)重新汇编源程序,(重新汇编源程序,用up键调出以前指令)可见,无警告无错误,汇编成功(光标指向0 waring Errors和0 severe Errors)。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
关于《Intel汇编语言程序设计》(第五版)这本书里面的例子,我不知道该用什么编译器,书上说了个Microsoft Visual C++ 2005 Express 的软件,它可以编译连接汇编语言程序,可惜书上只丢下一句话:关于如何使用Microsoft Visual C++ 2005 Express 汇编、链接和运行汇编语言程序的详细步骤,请参见站点。
得到的结果是:此程序无法显示网页!!!网上寻找了几个小时,东一篇西一篇的终于找到使用方法了,由于网络上很少有具体的讲解,于是我当然要把自己的努力奉献出来了,以下是我总结的使用方法:鉴于我的表达能力有限...看不懂我的语言的朋友,加QQ吧:357382814一.基本配置1. 安装Microsoft Visual C++ 2005 Expres 你可以去microsoft网站下载,我是在一篇博客上找到的:/download/A/9/1/A91D6B2B-A798-47DF-9C7E-A97854B7DD18/VC.iso速度不错,软件内容包括:Microsoft Visual C++2005 Express EditionMicrosoft MSND 2005 Express EditionMicrosoft SQL Server 2005 Express Edition x86但是我的Microsoft SQLServer 2005 安装不成功,但不影响使用。
2.下载masm8.0(下载后的文件名为MASMsetup.EXE)3.用winrar解压MASMsetup.EXE,得到setup.exe(什么?你不会解压?呵呵,在MASMsetup.EXE上点右键,点击解压到当前文件夹即可)再解压setup.exe,得到vc_masm1.cab,再解压vc_masm1.cab,得到FL_ml_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8重命名为ML.exe至于是不是一定要用masm8.0,我也不清楚,也许只要masm6.0也行,反正我是自己试着试着就成功了,正在烦恼的朋友,不妨按我的步骤做,虽然繁琐一点,但是一定能成功!4.将ML.exe放到E:\Microsoft Visual Studio 8\VC\bin 目录下(根据你的安装目录)5.将masm6.15LIB目录下的lib文件全部复制到E:\Microsoft Visual Studio 8\VC\lib 目录下(根据你的安装目录)6.将masm6.15 (当然了,去下载一个masm6.15, 或者6.0应该也没问题的) INCLUDE目录下的文件复制到E:\Microsoft Visual Studio 8\VC\include ((根据你的安装目录,有重复的话,不覆盖)7.另外,因为要使用《Intel汇编语言程序设计》里的例子,里面的例子部分(或者全部?)都少了2条include语句,所以为了避免每次都自己加进去,要修改一下Irvine32.inc.用记事本打开Irvine32.inc,在:INCLUDE SmallWin.inc ; MS-Windows prototypes, structures, and constants.NOLIST后面增加Includelib Kernel32.libIncludelib Irvine32.lib即可..ok!成功了一半了,开始写程序吧!!!二:建立汇编文件的步骤1.打开Microsoft Visual C++ 2005 Expres (在开始菜单可以找到启动程序的快捷方式)新建一个工程,project,如图2.选择General--Empty Project ,然后输入工程名,选择保存工程的目录3.好,在左边可以看到我们的工程,如,我新建一个mutou工程:然后,在Resource Files 上点右键Add New Item,如图:4.然后,选择Code---C++File(.cpp), 输入name ,以asm做后缀,点击Add确定:5.好,终于可以写程序了,先别急,在工程mutou上点右键, 点Custom Build Rules,在Microsoft MacroAssem...左边的框框打勾.ok6.在工程mutou上点击鼠标右键,选择Properties ,这一步比较繁琐,但是也接近成功了!(1)linker-input-additional dependencies 输入Irvine32.lib,ok(2)如果链接库文件不在默认的路径下,则需要指定“linker-general-additional library directories”属性值为链接库所在的路径。
初次使用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 键。
实验一 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、按照程序的执行过程绘制出程序流程图。
第一部分汇编语言程序设计实验一熟悉、使用DEBUG调试工具一.上机目的:1.了解并逐步熟悉汇编语言的编辑方法及特点.2.复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。
3.掌握汇编语言的编辑、汇编及连接的过程。
4.了解并逐步掌握运用DEBUG进行调试汇编语言程序。
二.实验内容:1.运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。
2.运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ 文件。
3.运用LINK.EXE文件进行连接,形成*.EXE文件。
4.仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。
5.运用DEBUG。
EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。
6.再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG 的设置断点,单步执行等功能发现错误所在并加以改正。
程序清单:多字节非压缩型BCD数除法(88754/6=14792)DA TA SEGMENTA DB 8,8,7,5,4B DB 6C DB 5DUP (0)N EQU 5DA TA ENDSCODE SEGMENTASSUME CS:CODE;DS:DATA;ES:DATA,START MOV AX,DA TAMOV DS,AXMOV ES,AXCLDLEA SI,ALEB DI,CMOV CX,NMOV AH,0LP1:LODSBAADDIV BSTOSBLOOP LP1MOV CX,NLEA DI,CLP2:MOV DL,[DI]MOV AH,2INT 21HDEC DILOOP LP2MOV AH,4CHINT 21HCODE: ENDSEND START实验二设计汇编语言程序一.8088提供了一套字符串处理指令,这些指令的特点是:在使用前必须先在指定的寄存器中存入源字符串和目的字符串的首地址及相关字符数,在处理过程中还可以使用REP重复操作前缀。
附录1 汇编语言编程和调试工具一、汇编语言编程工具学习汇编语言的目的就是要用汇编语言编程来解决实际问题,下面介绍二种常用的汇编语言编程环境:宏汇编MASM 6.11和Turbo Assember 5.0。
1.1、宏汇编MASM系统在宏汇编MASM系统中,程序员可用二种方法来处理源程序:命令行和集成环境。
1.1.1 命令行命令1、编写源程序可用计算机系统中各种能编辑文本文件的编辑器来编辑汇编源程序。
常用的编辑器有:EDIT、Q、Word、记事本、写字板、WPS等。
源文件的后缀为:.ASM。
2、汇编程序当源程序编写好后,可用MASM命令来汇编该源程序。
如果源程序没有语法错误,那么,将生成目标文件(.OBJ文件),为最终生成可执行文件作准备,但如果源程序有错误,汇编程序将显示出错误位置和原因,也可用列表文件(.LST文件)来查看出错位置和原因。
下面给出一些使用该命令的实例情况。
例1.1:查看MASM命令的功能…>masm /?(*)……/Zi Generate symbolic information for CodeView/Zd Generate line-number information其中:选项/Zi和/Zd是经常被引用的二个选项,因为它们与符号跟踪有关。
例1.2:用MASM命令汇编源程序…>masm test……Invoking: ML.EXE /I. /Zm /c test.asm……Assembling: test.asm如果MASM命令显示了类似如上的处理结果,那么,表示源文件TEST.ASM已成功汇编,并已生成了其目标文件TEST.OBJ。
(*)用户输入的命令用“下划线”来表示,系统显示的内容没有“下划线”。
以下与此相同。
例1.3:用MASM命令汇编源程序…>masm test……Invoking: ML.EXE /I. /Zm /c test.asm……Assembling: test.asmtest.asm(10): error A2070: invalid instruction operands如果MASM命令显示了类似如上的处理结果,那么,表示源文件有错,没有生成其目标文件。