MASM汇编语言程序设计
MASM的汇编链接和调试的脚本
下面我们以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)。
第4章 MASM汇编语言
DW DW DW
100,200 300,400 PAR1,PAR2
VAR
DB DB
100 DUP (?) 2 DUP (0,2 DUP(1,2),3)
OPER1 OPER2
DB ?, ? DW ?, ? …… MOV OPER1, 0 MOV OPER2, 0
;字节指令 ;字指令
OPER1 OPER2
C.存储器操作数
以存储器单元作为操作数,所学的所有与存储 器有关的寻址都实有,引进符号地址(标号和变 量),标号和变量有三种属性: 段 属 性:段基址,标号在CS,变量DS或ES
偏移属性:与段基址的距离的偏移量值
类型属性:标号类型属性指段内还是段间
操作,即FAR(-2)和NEAR(-1),
变量类型属性是指变量的字节数, BYTE (1)、WORD(2)和DWORD(4)
说明: A.segment 和ends 共同定义一个逻辑段,必须成 对使用,每段有一段名。 B.段的大小不能超过64K。 C.段定义语句仅仅是将程序划分成段,它并不指明 定义的是什么段。 D.定位类型 表示段的起始位置,类型是起始地址 能被什么值整除,有如下类型: PAGE (256), PARA (16,隐含), WORD (2), BYTE (1)
[标 号:] 助记符 操作数1,操作数2 [;注释] [符号名] 定义符 参数1,…,参数n [;注释]
(4)操作数与参数
操作数:在指令中表示指令操作的对象,根据不同指 令,在指令中有0个、1个和2个操作数。 参数:是在伪指令或宏指令语句中使用,给出伪指令 语句或宏指令语句的参数,参数可以多个或没有。
功能:定义本模块中所引用的外部模块中的符 号名。
例:
NAME HU PUBLIC XX,GHH D1 SEGMENT XX DB 23 D1 ENDS C1 SEGMENT ASSUME CS:C1,DS:D1 STT: MOV AX,D1 MOV DS,AX GHH:…… C1 ENDS END STT
汇编语言程序设计实验报告
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
vc++2005 和masm编译汇编程序的使用总结
关于《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)
初次使用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的使用方法汇编语言程序设计最终版
实验一 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使用方法)
第一部分汇编语言程序设计实验一熟悉、使用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重复操作前缀。
MASM汇编语言编程和调试工具
附录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命令显示了类似如上的处理结果,那么,表示源文件有错,没有生成其目标文件。
汇编语言程序设计
9
(1)用数值表达式定义变量。例如:
K1 DB 5AH
;将5AH赋给字节变量K1
K2 DW 2354H
;将2354H赋给字变量K2
K3 DD 2A00 4455H ;将2A00 4455H赋给双字变量K3
K1
5AH
K2
54H
23H
K3
55H
44H
00H
2AH
10
(2)用字符串定义变量。例如:
5
–变量
变量用来定义存放在存储器单元中的数据。 其三重属性为:
◎ 段属性(SEG)
◎ 偏移地址属性(OFFSET)
◎ 类型属性(TYPE)
例:DATA SEGMENT
对变量的操作:
变量名 FIRST DB 5AH
LEA AX,FIRST
SECOND DW 1122H
MOV AX,SECOND
DATA ENDS
指令语句又称可执行语句,它要求 CPU执行某种操作。 指令语句的格式为:
[符号:] 指令助记符 [操作数] [ ;注释] 一条指令一条语句可分为4个字段,其中方 括号. 中的字段为可选项。
2
–指示语句(pseude instruction statements)
指示词句又称伪指令,它不要求CPU执行某种操 作,汇编时也不产生对应的机器代码,而仅仅告诉 汇编程序,对它后面的指令语句和操作数应该如何 产生机器目标代码。
ONE DB ‘HOW ARE YOU’ ;将“HOW ARE YOU”
字符串赋给变量ONE。
TWO DW ‘OK’
;将‘OK’字符串赋给变
量TWO
ONE
‘H’
‘O’
‘W’
汇编语言程序设计-实验
3.用连接程序生成可执行程序文件 .
在DOS状态下键入以下命令: D:\MASM> LINK EG1 经汇编以后产生的目标程序文件(.OBJ文件) 并不是可执行程序文件,必须经过连接以后,才能 成为可执行文件(即扩展名为.EXE)。
连接过程如下图所示
提示将要产生的可执行文件名,通 提示将要产生的可执行文件名, 常直接按回车键表示使用默认文件 名 内存映象文件的提示,直接按回车键 内存映象文件的提示, 表示不产生此文件。 表示不产生此文件。 内存映象文件的提示,直接按回车键 内存映象文件的提示, 表示不产生此文件。 表示不产生此文件。
汇编语言程序设计 实验
汇编程序开发过程
建立汇编源程序(即:建立 文件名.asm) 使用EDIT.EXE文本编辑器进行输入 编译目标文件(即:编译为.obj 文件) 使用MASM进行汇编 编译不通过,重新修改(错误类型:源程序语句不合法) 依据MASM汇编过程中给出的行号进行修改 连接为可执行文件(即:连接为.exe 文件) 使用LINK进行连接 运行编译好的可执行文件 用调试工具调试,重新修改(逻辑错误)
参考程序:
要显示字符串必须以“$”为结束符 DATA SEGMENT 数据段定义 BUF DB 'Hello, world !$' 堆栈段的定义最后一定要加上STACK DATA ENDS STACK SEGMENT STACK DW 36 DUP(?) 堆栈段定义 STACK ENDS CODE SEGMENT ;段寄存器声明 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA ;主程序开始 MOV DS,AX MOV DX,OFFSET BUF MOV AH,9 显示字符串的9号DOS功能调用 INT 21H MOV AH,4CH 结束程序的运行,返回DOS INT 21H CODE ENDS ;结束主程序 END START
汇编语言程序设计实验内容(川大微机原理实验资料和内容以及MASM使用方法)
第一部分汇编语言程序设计实验一熟悉、使用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重复操作前缀。
汇编语言程序设计实验指导书
实验一宏汇编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汇编语言程序的设计
START
;源程序结束
第5章 汇编语言程序设计
• STACK SEGMENT
–
┇
例5-2 编写一个两字相加的程序。
• STACK ENDS
• DATA SEGMENT
–
┇
• DATA ENDS
• CODE SEGMENT
• ASSUME CS:CODE, DS: DATA, SS:STACK
• START: …
MASM汇编语言程序的设计
单击此处添加副标题内容 单击此处输入你的正文,文字是您思想的提炼,为了最终演示 发布的良好效果,请尽量言简意赅的阐述观点。
第5章 汇编语言程序设计
教学内容
本章以Microsoft公司的宏汇编程序MASM为背景,介绍 面向80x86的汇编语言程序设计方法。包括汇编语言源程序的 格式、伪指令、宏指令以及顺序结构、分支结构、循环结构、 过程调用等汇编语言程序设计方法。具体内容如下: 1、汇编语言源程序的格式及汇编语言上机过程 2、伪指令 3、宏指令 4、汇编语言程序设计的基本方法(包括顺序程序、分支程序、
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
程序设计语言是专门为计算机编程所配置的语 言。它们按照形式与功能的不同可分为三种,即机器 语言、汇编语言和高级语言。
1. 机器语言 机器语言(Machine Language)是由0和1二进 制代码书写和存储的指令与数据。它的特点是能被机 器直接识别与执行;程序所占内存空间较少。其缺点 是难认、难记、难编、易错。
鉴于以上理由,现在许多高级语言都设置有与 汇编语言程序接口的功能,以便于提高高级语言程序 的效率。
第5章 汇编语言程序设计
5.2 汇编语言源程序的格式
第三章 MASM汇编语言
DATA8
重复方式DUP
格式:变量 定义符 n DUP(表达式1) 其中,n为重复次数 表达试1为重复内容 --DATA9 DB 2 DUP (?) 05H 00H DATA10 DB 2 DUP(5,2 DUP(0)) 00H 05H 00H 00H
DATA9 DATA10
例: DATA BUF A SEGMENT DB ‘AB’,0DH,0AH DW M
汇编源程序需翻译成机器语言,变成可执 行文件,机器才能执行,这个翻译过程叫汇 编。——高级语言中称该过程为“解释”或 “编译”。执行翻译的程序称为“汇编程 序”。
汇编
汇编程序
汇编语言源程序
序
机器语言目标程
3.1 汇编的语句结构
3.1.1 汇编语言源程序的格式 两种汇编语言语句类型: 指令性语句 主要由CPU指令组成。 指示性语句 又称伪指令语句,主要用于控制编译申请存储区,
MOV AL,BYTE PTR DATA2;正确
30H 40H 02H 00H 35H FDH 04H
DATA3
二、给变量赋初值的几种形式 1.常数或数值表达式。
初值表达式: 初值表达式决定变量初值的个数,定义变量时可以指定多 个初值,从而占据较多的存储空间。多个初值时各个初值 间用逗号隔开。初值表达式中可以有常数或常数表达式、 字符串、?和带DUP的表达式。 例如: B0 DB 2 B1 DB 3,5,?,9 B2 DW 10H,2 DUP(1234H,?) B3 DD 1,2 B4 DB 0,2 DUP(?,1,2 DUP(7)) 这5个变量分配内存情况如图 (a)~(e)所示
格式中操作数的形式:
1、一个或多个常数/数值表达式 DATA1 DB 30H DATA1 DATA2
汇编语言程序设计MASM汇编器利用
汇编语言程序设计实验二MASM 汇编器利用学号:姓名:1.利用MASM为DOS和Windows编程:a)DOS中运行的程序:先输入程序,.386.model flat, stdcalloption casemap :noneinclude \masm32\include\include \masm32\include\include \masm32\include\includelib \masm32\lib\includelib \masm32\lib\.dataHelloWorld db "Hello World!", 0.codestart:invoke StdOut, addr HelloWorldinvoke ExitProcess, 0end start再打开DOS命令提示符界面,输入“\masm32\bin\ml /c /Zd /coff ”在没错误情形下,能够连接文件,输入“\masm32\bin\Link /SUBSYSTEM:CONSOLE “,在工作目录中会产生可运行文件,运行并记录运行结果。
b)Windows 中运行的程序:先修改程序,.386.model flat, stdcalloption casemap :noneinclude \masm32\include\include \masm32\include\include \masm32\include\includelib \masm32\lib\includelib \masm32\lib\.dataHelloWorld db "Hello World!", 0.codestart:invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OKinvoke ExitProcess, 0end start用命令“\masm32\bin\ml /c /Zd /coff ”编译程序,再用命令“\masm32\bin\Link /SUBSYSTEM:WINDOWS ”连接程序,运行并记录运行结果。
PC汇编语言程序设计课件 第10章 MASN宏汇编语言(1)
第十章 MASM宏汇编语言
10.1.3 宏扩展
宏汇编程序在对汇编语言源程序进行汇编的过程中,如果 在操作码字段遇到一个宏指令的名字,它就自动用相应的宏体 来代替宏指令,并且用宏调用中的实际参数替代宏定义中的哑 参数。这一过程称为宏扩展。在宏扩展的过程中, 实参和形 参一一对应,依次替换。一般来说,实参个数应该和形参相同。 宏汇编规定:如果实际参数的个数多于形式参数的个数,则多 余参数将被忽略;如果形式参数的个数多于实际参数的个数, 则多余的形参将用“0”来代替。
例 10.6 使用局部标号。
MADDM MACRO SRC, DST, LEN, SUM LOCAL LABEL LEA SI, SRC LEA DI, DST
第十章 MASM宏汇编语言
MOV CX, LEN LEA BX, SUM CLC LABEL: MOV AL, [SI ADC AL, [DI MOV [BX], AL INC SI INC DI INC BX LOOP LABEL ENDM
第十章 MASM宏汇编语言
一个简单的不带参数的宏指令如下, 它可以实现程序结 束时返回DOS的功能:
FIFISH
MACRO MOV AX, 4C00H INT 21H ENDM
第十章 MASM宏汇编语言
10.1.2 在汇编语言源程序的操作码字段写上宏名, 这就是宏调
用。宏调用的一般格式如下: 宏名 [参数 1] [, 参数 2]…
第十章 MASM宏汇编语言
在此宏定义中,使用了LOCAL伪指令说明标号为局部标 号。LOCAL伪指令的格式如下:
第四章 MASM-86宏汇编语言程序
第四章MASM-86宏汇编语言程序在上一章里,我们详细学习了8086的指令系统,但仅仅了解了8086的每一条指令的功能和格式还不够,还不能写出汇编语言的程序,因为一种编程语言还有其他一些语法上的规定。
本章就是介绍这样的语法规定,包括汇编语言程序的结构和规范,及伪指令的用法。
4.1汇编语言和汇编程序一汇编语言( Assembly Language)编程语言是分层次的,这一点我们在第一章就已经介绍过了。
从最低级到高级,我们分别有机器语言、汇编语言、高级语言。
机器语言的指令("语句"),是用0、1二进制代码表示的。
这种语言难以记忆和理解,但它是机器唯一能直接理解和直接执行的语言。
汇编语言采用助记符表示0、1二进制代码,还使用符号地址及其他一些语法规定。
这样,汇编语言的指令与机器语言的指令基本上一一对应,基本上属于同一层次的语言,但可理解性大大加强,也较容易记忆。
但汇编语言指令的功能受处理器的限制,一般不太强。
高级语言是一种面向算法的语言,其语句类似人类的自然语言,因而易学易用,可移植性好。
但高级语言的语句与机器可执行的机器指令之间并无直接的对应关系,因此,高级语言程序执行前需要"翻译"成机器指令。
这种关系带来了程序效率(时间、空间)的损失。
汇编语言程序执行前也需要经翻译后产生机器代码,但这种翻译要简单得多。
二.汇编程序(Assembler)上面介绍过,汇编语言源程序输入计算机不能直接被计算机识别和执行,必须经翻译后产生机器代码才行。
我们把这种翻译过程称为汇编。
汇编可以使用人工查表的方法完成,称为人工汇编;也可以借助于一种系统通用软件,使用计算机来完成,称为自动汇编。
完成自动汇编的计算机程序称为汇编程序(Assembler)。
也就是说,汇编程序是执行把汇编语言源程序翻译成机器能够识别和执行的目标程序(即二进制的机器代码程序)任务的一种系统程序,它与汇编语言程序(即用汇编语言编写的源程序)是两回事。
第5章 MASM汇编语言程序设计
顺序、分支和循环三种结构
汇编语言程序设计一般可以分为以下基本步骤: (1)分析问题 (2)算法设计 (3)画流程图 (4)编写源程序 (5)上机调试运行
la1:lea dx,m2 la2:mov ah,9 int 21h mov ah,4ch int 21h cod1 ends end stt
例2:在数据段的一个字符串中查找字符“$”,如 找到,则将其所在单元的偏移地址存入字单元 变量ADDR中,否则将零存入ADDR中。
dat1 segment str1 db ‘CFDP$RSVQE’ addr dw ?
2) 转移表法 例:根据字节变量 n中给定的序号(0~7),通过转移表实现 向8个处理程序(入口地址为L0~L7)中的一个程序转移。
data segment n db 7 data ends code segment assume cs:code,ds:data stt: mov ax,data mov ds,ax mov ah,0 mov al,n mov dx,ax add ax,ax add ax,dx L4: … mov bx,offset jp1 L5: … add bx,ax L6: … jmp bx L7: … jp1: jmp near ptr L0 mov ah,4cH jmp near ptr L1 int 21h jmp near ptr L2 code ends jmp near ptr L3 end stt jmp near ptr L4 jmp near ptr L5 jmp near ptr L6 jmp near ptr L7 L0: … 表地址=转移表首地址+n*3 L1: … L2: … L3: …
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
程序设计语言是专门为计算机编程所配置的语 言。它们按照形式与功能的不同可分为三种,即机器 语言、汇编语言和高级语言。 1. 机器语言 机器语言(Machine Language)是由0和1二进 制代码书写和存储的指令与数据。它的特点是能被机 器直接识别与执行;程序所占内存空间较少。其缺点 是难认、难记、难编、易错。
第5章 汇编语言程序设计
2. 汇编语言 汇编语言(Assembly Language)使用指令的助 记符、符号地址、标号等书写程序的语言,简称符号 语言。它的特点是易读、易写、易记。其缺点是不能 为机器所直接识别。 3. 高级语言 高级语言(High Level Language)是脱离具体 机器(即独立于机器)的通用语言,不依赖于特定计 算机的结构与指令系统。
第5章 汇编语言程序设计
5.2 汇编语言源程序的格式
例5.1 要求将两个5字节十六进制数相加,可以编写出以下 汇编语言源程序。
DATA SEGMENT ; 定义数据段,DATA为段名
DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH ;给数赋初值
DATA2 DB 0C1H, 36H, 9EH, 0D5H, 20H DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA ;用ASSUMW伪指令定义 ;各段寄存器的内容
• •
• • • • • •
– ┇ STACK ENDS
DATA SEGMENT
–
┇
DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS: DATA, SS:STACK START: …
–
CODE
┇
ENDS END START
第5章 汇编语言程序设计
5.2.1 分段结构 由上面的例子可以看出,汇编语言源程序的结构是分段结
序中也要求分段组织指令、数据和堆栈,以便将源程序汇编成 为目标程序后,可以分别装入存储器的相应段中。
第5章 汇编语言程序设计 段可以从性质上分为:数据段、代码段、堆栈段和附加段。
代码段和数据段不可缺少,堆栈段和附加段可根据需要设置。在 上面的简单源程序中只有两个逻辑段,一个逻辑段的名字是 DATA,其中存放着与程序有关的数据,称为逻辑数据段;另一 个逻辑段的名字是CODE,其中包含着程序的指令,称为逻辑代 码段。每个段内均有若干行语句(STATEMENT),因此,可以说 一个汇编源程序是由一行一行的语句组成的。
构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个
段以SEGMENT语句开始,以ENDS语句结束。整个源程序的结 尾是END语句。 这里所说的汇编语言源程序中的段与前面讨论的CPU管理 的存储器的段,既有联系,又在概念上有所区别。我们已经知
道,微处理器对存储器的管理是分段的,因此,在汇编语言程
第5章 汇编语言程序设计
⑵现在的微机系统中,底层的一些功能仍然靠 汇编语言程序来实现。例如机器的自检、系统初始化、 实际的输入输出操作,至今仍然是用汇编语言编制的 程序来完成。 ⑶汇编语言程序的效率通常高于高级语言程序。 所以在节省内存空间和提高程序运行速度的重要场合, 如实时控制,常常使用汇编语言来编制的。 鉴于以上理由,现在许多高级语言都设置有与 汇编语言程序接口的功能,以便于提高高级语言程序 的效率。
第5章 汇编语言程序设计
学习要求
汇编语言程序设计是“微型计算机原理”课程非 常重要的内容之一。通过本章学习,应该达到如下 要求:
1、熟练掌握汇编语言格式及调试方法。 2、掌握子程序和宏指令的概念、定义及其调用方法。 3、掌握DOS调用和BIOS调用的方法。 4、熟练掌握顺序程序、分支程序、循环程序设计的基本方法 和一般技巧。
AL, DATA2[SI] DATA1[SI],AL ;与被加数相加 SI CX LOOPER AH, 4CH ;DOS功能调用语句,机器将结束 21H ;本程序运行,返回DOS START ;源程序结束
CODE
第5章 汇编语言程序设计
• STACK SEGMENT
例5-2 编写一个两字相加的程序。
第5章 汇编语言程序设计
教学内容
本章以Microsoft公司的宏汇编程序MASM为背景,介绍 面向80x86的汇编语言程序设计方法。包括汇编语言源程序的 格式、伪指令、宏指令以及顺序结构、分支结构、循环结构、 过程调用等汇编语言程序设计方法。具体内容如下: 1、汇编语言源程序的格式及汇编语言上机过程 2、伪指令 3、宏指令 4、汇编语言程序设计的基本方法(包括顺序程序、分支程序、 循环程序、子程序)
第5章 汇编语言程序设计
START: MOV MOV MOV MOV CTC MOV ADC INC DEC JNZ MOV INT ENDS END AX, DATA DS, AX CX, 5 SI, 0 ;将DS初始化为数据段 ;首地址的段值DATA ;循环次数送CX ;置SI初值为0
LOOPER:
第5章 汇编语言程序设计
源程序的结构特点
• (1)汇编语言程序通常由若干段组成,段由伪指令 SEGMENT与ENDS定义,各段顺序任意,段的数目按需要 确定,原则上不受限制。 • (2)段由若干语句组成,语句以指令为主体而构成。一条 语句写在一行上,书写时语句的各部分应尽量对齐 • (3)汇编语言程序中至少要有一个启动标号,作为程序开 始执行时目标代码的入口地址。启动标号常用START、 BEGIN、MAIN等命名。 • (4)为增加程序的可读性,可汇编语言语句“;”后加 上注释。
第5章 汇编语言程序设计
第5章 汇编语言程序设计
5.1 汇编语言的基本概念 5.2 汇编语言源程序的格式 5.3 伪指令语句 5.4 宏指令语句 5.5 汇编语言程序的上机过程 5.6 汇编语言程序设计的基本方法
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
在学习了计算机和微处理器的组成 以及指令系统后,就具备用汇编语言进 行程序设计的能力了。汇编语言是一种 面向机器的程序设计语言,其基本特征 是用一组字母、数字和符号来代替二进 制编码的机器指令和数据。
第5章 汇编语言程序设计
为什么要用汇编语言编写程序
凡是学过一种程序设计高级语言的人,都会有高 级语言“易学易用”的感觉,这是因为高级语言的语句 是面向数学语言和自然语言的,因此容易接受、掌握。 相对来说汇编语言编制程序比高级语言要困难些。既然 如此,为什么还要学习和使用汇编语言呢?主要有以下 几点: ⑴汇编语言是机器语言的符号表示语言,因此, 程序设计人员可以充分利用机器硬件的全部功能,发挥 机器的长处。