语言程序设计实验指导书(8月版)_汇编语言程序设计实验

2020-02-28 其他范文 下载本文

语言程序设计实验指导书(8月版)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“汇编语言程序设计实验”。

汇编语言程序设计实验指导书

何立新 编著

合肥学院 计算机科学与技术系 体系结构教研室

2009年8月

目 录

实验一 熟悉汇编语言程序上机过程和调试汇编程序的方法..............1 实验二 简单程序设计..............................................................................3 实验三 循环程序设计..............................................................................4 实验四 分支程序设计..............................................................................5 实验五 子程序设计..................................................................................6 实验六 宏汇编程序设计..........................................................................7 实验七 综合程序设计..............................................................................8 附件1 常用的DOS系统功能调用.......................................................9 附件2 DEBUG的常用命令与使用.....................................................10 附件3 汇编程序出错信息...................................................................17

合肥学院计算机科学与技术系

实验一 熟悉汇编语言程序上机过程和调试汇编程序的方法

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握汇编语言源程序由编辑、汇编、链接到调试的全过程。2.掌握常用的debug命令,通过汇编调试工具加深对机器指令执行过程的了解。二.实验内容: 1.输入给定的程序,完成由编辑、编译、链接到调试的全过程。2.用汇编调试工具软件DEBUG对.EXE文件进行调试,在调试过程中应使用单步、断点等方法调试,注意观察寄存器、标志位和有关存储器内容的变化。

3.利用DEBUG加深对机器指令的了解。三.实验仪器: PC 机 四.实验步骤:(1)建立汇编语言的工作环境

为了运行汇编语言程序至少要在磁盘上建立以下文件 • 编辑程序,如EDIT.EXE,记事本,写字板等 • 汇编程序,如MASM.EXE • 连接程序,如LINK.EXE • 调试程序,如DEBUG.COM

(2)建立汇编语言源程序

源程序文件要以ASM为扩展名,源程序文件的形成(编辑)可以通过任何一个文本编辑器实现。

(3)源程序的汇编

汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。使用提供的汇编程序是MASM.EXE:如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(test01.obj),否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。

(4)目标模块的连接

连接程序link.exe能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件)。如果没有严重错误,LINK将生成一个可执行文件(.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件。

汇编语言程序设计实验指导书

(5)程序的运行

经汇编、连接生成的可执行程序在DOS操作系统下只要输入文件名就可以运行。

如果出现运行错误,可以从源程序开始排错,也可以利用DEBUG调试程序帮助发现错误。

五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验二 简单程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握汇编语言源程序的格式和顺序程序设计方法。

2.用所学的汇编指令和伪指令进行简单的编程,达到加深对所学指令和伪指令的理解。

3.学会使用dos 系统功能调用。4.对DEBUG的使用达到熟练的程度。二.实验内容: 1. 编程实现:在屏幕上显示字符串“Beijing,China,2008!”。2. 编程实现:两个字节数(如12h和34h)相加,并将结果显示出来。三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验三 循环程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握单重循环程序和多重循环程序的结构、设计方法和调试方法。2.熟练掌握loop、loope、loopne等指令的使用,并掌握用重复前缀指令、控制转移指令实现循环。二.实验内容: 1.编程实现:从一个字节字符串中查找字符‘#’,如果查到则将其偏移地址送到存储单元addr中,否则将0送到addr中。

2.编程实现:统计存储下列给定字符串的数据块中所有的“0”位的个数,并

将统计的结果送入COUNT存储单元。

“十七大的主要议程是:听取和审议党的十六届中央委员会的报告,审议中央纪律检查委员会的工作报告,审议并通过《中国共产党章程(修正案)》,选举党的十七届中央委员会,选举中央纪律检查委员会。” 三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验四 分支程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握分支程序的结构,分支程序的设计和调试方法。

2.掌握利用条件转移指令、跳跃表、逻辑尺等方法实现程序的分支。二.实验内容: 1.设有16个学生的成绩分别如下:56,78,83,67,39,48,95,76,86,62,100,57,85,82,71,92。试编程分别统计低于60分,60-69、70-79、80-89、90-99及100分的人数,并存放到S5,S6,S7,S8,S9及S10单元中。2.编程实现:在X、Y和Z单元中分别存放一个无符号的字节数,编程求出其它们中的最大值,并将最大值存入MAX单元中。(设X = 68, Y = 196, Z = 98)三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验五 子程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握子程序的定义和调用方法。

2.掌握子程序设计方法,学会子程序的功能划分和正确进行子程序的参数传递。

3.掌握子程序的多种参数传递方法。二.实验内容: 编程实现:十进制到十六进制的转换。要求如下:

1.从键盘输入一个十进制数,然后以十六进制在屏幕上显示; 2.能连续多次转换输入的十进制数,以回车键作为输入十进制数的结束;

3.若键盘输入的不是数字,则在屏幕上提示:“the input is not a number, again , please!” 4.键入‘q’键则可退出程序。

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验六 宏汇编程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握宏汇编程序设计方法。2. 利用建立的宏库文件进行文件访问。

3. 通过和子程序技术的比较,加深对宏汇编技术的理解,提高编程技巧。

二.实验内容(任选一题): 1.实现字符串的传递,(me1 me3;me2me4),传递完毕显示字符串,每显示一个字符串后要回车换行。要求:建立一个宏库mylib.mac,该宏库至少包括如下三个宏:1 传递过程宏 move;2 显示字符串宏 disp;3 回车换行宏 crlf。

如: me1: “how beautiful world!”

Me2: “we should protect it!”

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验七 综合程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 训练综合使用本课程中介绍的顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,进一步提高编程能力。

二.实验内容(任选一题): 1.编写一个完整的程序:

主程序MAINPRO允许用户在键盘上输入零件数量和总价格; 子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制; 子程序 SUBCALC 计算出零件的单价;

子程序 SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。

要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

附件1 常用的DOS系统功能调用

1.单字符输入(1号调用)格式:MOV AH,1

INT 21H 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。

2.单字符显示(2号调用)

格式:MOV DL,待显示字符的ASCII码

MOV AH,2

INT

21H 功能:将DL寄存器中的字符送显示器显示.3.打印输出(5号调用)

格式:MOV DL,待打印字符的ASCII码

MOV AH,5

INT 21H 功能:将DL寄存器中的字符送打印机打印。

4.结束调用(4CH号调用)格式:MOV AH,4CH

INT 21H 功能:终止当前程序并返回调用程序。

5.显示字符串(9号调用)

格式:LEA DX,待显示字符串首偏移地址

MOV AH,9

INT 21H 功能:将当前数据区中以‘$’结尾的字符串送显示器显示。

6.字符串输入(10号调用)

格式:LEA DX,缓冲区首偏移地址

MOV AH,10

INT 21H 功能:从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。

汇编语言程序设计实验指导书

附件2 DEBUG的常用命令与使用

在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,调试程序 DEBUG 就是专为汇编语言设计的一种调试工具。它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容,并能监视目标程序的执行情况,使用户真正接触到 CPU 内部,与计算机产生最紧密的工作联系。动态和程序 DEBUG 的主要特点 DEBUG 的执行 DEBUG 命令格式 主要 DEBUG 命令 DEBUG 的主要特点)能够在最小环境下运行汇编程序

在 DOS 状态下运行汇编程序,必须将程序经过 MASM 汇编程序,而后还要经过 LINK 连接程序产生可执行程序,才能最终运行,比较麻烦。在 DEBUG 状态下,为用户提供了调试、控制测试的环境,可以在此环境下进行编程、调试、监督、执行用户编写的汇编程序。因此调试周期短,为用户提供了极大的方便。2)提供极简单的修改手段

DEBUG 提供了修改命令,可以修改内存单元内容,修改寄存器的内容,为调试程序、修改程序带来了方便。)提供用户与计算机内部联系的窗口

DEBUG 具有显示命令,它既可以使用户看到某内存单元或某一块单元内容,也可以看到 CPU 内部各寄存器的内容。用单步执行命令实现跟踪执行,每执行一步都使用户看到各寄存器的内容的变化,以便分析和调整程序。4)可装入、修改或显示任何文件

当然在 DEBUG 状态下运行汇编程序也具有一定局限性。在 DEBUG 状态下运行的程序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。此外,不能调试太长的程序,只能分块进行中程序设计。在 DEBUG 状态下调试好的程序不能形成可执行文件(.EXE),因此调试好的程序只能记下,到编辑环境下重新键入调试好的程序,通过汇编程序(如 MASM),再通过连接程序(LINK)形成可执行文件(.EXE)。

合肥学院计算机科学与技术系

DEBUG 的执行

在操作系统(DOS 或 WIndows)命令行方式下,直接调入 DEBUG 程序,键入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中 [] 的内容为可选项,可以有也可以缺省。

[d:] 为驱动器号,指要调入 DEBUG 状态的可执行文件在哪个驱动器中,如 A:、B:、C: 等。[Path] 为路径,指要调入 DEBUG 状态的可执行文件是在哪个目录下或子目录下。

[filename[.ext]],指要调入 DEBUG 状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在 DEBUG 状态下汇编的程序 段,通过写盘命令 W 写入磁盘的文件。

[Parm1][Parm2] 为任选参数,是给定文件的说明参数。

在启动 DEBUG 时,如果输入 filename(文件名),则 DEBUG 程序把指定文件装入内存,用户可以通过 DEBUG 的命令对指定文件进行修改、显示或执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再通过 DEBUG 命令进行修改、显示或执行。

当启动 DEBUG 程序后,屏幕上出现“—”,说明系统已进入 DEBUG 状态。DEBUG 命令格式

(1)DEBUG 命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“ , ”或空格隔开。

(2)DEBUG 命令必须接着按 ENTER 键,命令才有效。

(3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用“ H ”。(4)可以用 Ctrl 和 Break 键来停止一个命令的执行,返回到 DEBUG 的提示符“—”下。(5)用 Ctrl - Num Lock 键中止正在上卷的输出行,再通过按任意键继续输出信息。主要 DEBUG 命令

(1)汇编命令 A

格式: a.A [ 段寄存器名 ]:[ 偏移地址 ] b.A [ 段地址 ]:[ 偏移地址 ] 11

汇编语言程序设计实验指导书

c.A [ 偏移地址 ] d.A 功能:用该命令可以将汇编语言程序直接汇编进入内存。

当键入 A 命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指令回车后,自动显示下一条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编语言程序全部键入,又显示下一地址时可直接键入回车返回到提示符“-”为止。

其中 a 的段地址在段地址寄存器中,因此在使用该命令时必须将段地址寄存器送入段地址,c 的地址在 CS 中,d 的段地址在 CS 中,偏移地址为 100H。(2)显示内存命令 D 格式: a.D [ 地址 ] b.D [ 地址范围 ] c.D 功能:显示指定内存范围的内容。

显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的 ASCII 码字符,对不可见字符以“·”代替。

对于 a、c 每次显示 128 个字节内容,b 显示的字节数由地址范围来决定。

若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如 c)则从上一个 D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过 D 命令,则以 DEBUG 初始化的段寄存器的内容为起始段地址,起始偏移地址为 100H,即 CS:100。

对于 a 中的地址为偏移地址,段地址为 CS 的内容,对 b 中的地址范围,可以指定段地址和起始偏移地址和终止偏移地址。(3)修改存储单元内容命令 E 格式: a · E [ 地址 ] [ 内容表 ] b · E [ 地址 ] 功能: a ·用命令所给定的内容表去代替指定地址范围的内存单元内容。b ·一个单元一个单元地连续修改单元内容。

其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。

合肥学院计算机科学与技术系

(4)填充内存命令 F

格式: F [ 范围 ][ 单元内容表 ] 功能:将单元内容表中的内容重复装入内存的指定范围内。(5)内存搬家命令 M

格式: M [ 源地址范围 ][ 目标起始地址 ] 其中源地址范围和目的起始地址为偏移地址,段地址为 DS 的内容。功能:把源地址范围的内容搬至以目标起始地址开始的存储单元中。(6)比较命令 C

格式: C [ 源地址范围 ],[ 目标地址 ] 其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元,目标地址为与源地址所指单元对比的目标地址起始地址。

功能:从源地址范围是由起始的地址单元开始逐个与目标起始地址往后的单元顺序比较每个单元内容,比较到源终止地址为止。比较结果如果一致则不显示任何信息,如果不一致,则以 [ 源地址 ][ 源内容 ][ 目的内容 ][ 目的地址 ] 的形式显示失败单元地址及内容。(7)搜索指定内容命令 S 格式: S [ 地址范围 ][ 表 ] 功能:在指定地址范围内搜索表中内容,搜索到就显示表中元素所在地址。(8)检查和修改寄存器内容命令 R 格式: a · R b · R [ 寄存器名 ] 功能: a ·显示 CPU 内部所有寄存器的内容和全部标志位的状态。b ·显示和修改一个指定寄定器的内容和标志位的状态。

其中对状态标志寄存器 FLAG 以位的形式显示,显示时,8 个状态标志的显示次序和符号如表 B - 1 所示。

表 B - 1 状态标志显示形式

汇编语言程序设计实验指导书

标 志 位 溢出标志 OF 方向标志 DF 中断标志 IF 符号标志 SF 零标志 ZF 辅助进位 AF 奇偶标志 PF 进位标志 CF

(9)跟踪与显示命令 T

格式: a · T[ =地址 ] 或 T [ 地址 ]

状 态 有 / 无 增 / 减 开 / 关 负 / 正 零 / 非 有 / 无 偶 / 奇 有 / 无

显示形式(置位 / 复位)

OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC b · T[ =地址 ][ 条数 ] 或 T [ 地址 ][ 条数 ] 功能: a ·执行一条指定地址处的指令,停下来,显示 CPU 所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容。

b ·为多条跟踪命令,从指定地址开始;若命令中用 [ 地址 ] 给定了起始地址,则从起始地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的 [ 条数 ] 决定一共跟踪几条指令后返回 DEBUG 状态。(10)反汇编命令 U 格式: a · U [ 地址 ] b · U [ 地址范围 ] 功能:将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器。若在命令中没有指定地址则以上一个 U 命令的最后一条指令地址的下一个单元作为起始地址;若没有输入过 U 命令,则以 DEBUG 初始化段寄存器的值作为段地址,以 0100H 作为偏移地址。(11)命名命令 N 格式: N 文件名

功能:在调用 DEBUG 时,没有文件名,则需要用 N 命令将要调用的文件名格式化到 CS:5CH 的文件控制块中,才能用 L 命令把它调入内存进行调试(其它形式参考 DOS 手册)。(12)读盘命令 L

格式: a · L [ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所读扇区个数 ]

合肥学院计算机科学与技术系

b · L [ 地址 ] c · L

功能: a ·把指定驱动器和指定扇区范围的内容读到内存的指定区域中。其中地址是读入内存的起始地址,当输入时没有给定地址,则隐含地址为 CS:100H。起始扇区号指逻辑扇区号的起始位置。所读扇区个数是指从起始扇区号开始读到内存几个扇区的内容。驱动器号为 0 或 1,0 表示 A 盘,1 表示 B 盘。

b ·读入已在 CS:5CH 中格式化的文件控制块所指定的文件。在使用该命令前用 N 命令命名即可将要读入的文件名格式化到 CS:5CH 的文件控制块中,其中地址为内存地址。c ·同 b ·地址隐含在 CS : 100H 中。

当读入的文件有扩展名.COM 或.EXE,则始终装入 CS:100H 中,命令中指定了地址也没用。其中 BX 和 CX 中存放所读文件的字节数。(13)写盘命令 W

格式: a · W[ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所写扇区个数 ] b · W[ 地址 ] c · W

功能: a · 把在 DEBUGU 状态下调试的程序或数据写入指定的驱动器中 , 起始扇区号 , 所写扇区个数为要占盘中几个扇区。

写盘指定扇区的操作应十分小心,如有差错将会破坏盘上的原有内容。如果在命令行中的地址只包含偏移地址,W 命令认为段地址在 CS 中。

b ·当键入不带参数的写盘命令时,(或只键入地址参数的写盘命令),写盘命令把文件写到软盘上。该文件在用 W 命令之前用命名命令 N 将文件格式化在 CS:5CH 的文件控制块中。c ·只有 W 命令以前而没有任何参数时,与 N 配合使用进行写盘操作。在用 W 命令以前在 BX 和 CX 中应写入文件的字节数。(15)输出命令 O

格式: O[ 端口地址 ] [ 字节值 ] 功能:向指定端口地址输出一个字节。

汇编语言程序设计实验指导书

(16)运行命令 G

格式: G [ =地址 ][ 地址 [ 地址„ ]] 功能:执行用户正在调试的程序。

其中地址为执行的起始地址,以 CS 中内容作为段地址,以等号后面的地址为偏移地址。再后面的地址为断点地址。在命令行中只有起始地址,没有断点地址,则程序在执行时不中断。DEBUG 规定最多设置 10 个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。断点地址为程序中断处的偏移地址,段地址在 CS 中。

当执行在 DEBUG 状态下汇编的小段程序时,只用 G 命令即可。(17)十六进制运算命令 H 格式: H 数据 1 数据 2 其中数据 1 和数据 2 为十六进制数据。

功能:将两个十六进制数进行相加、减,结果显示在屏幕上。(18)结束 DEBUG 返回到 DOS 命令 Q 格式: Q 功能:程序调试完退出 DEBUG 状态,返回到 DOS 状态下。

Q 命令不能把内存的文件存盘,要想存盘必须在退出 DEBUG 之前用 W 命令写盘。

合肥学院计算机科学与技术系

附件3 汇编程序出错信息

汇编程序对源程序进行汇编遇到或可疑的语法时,计算机将会给出提示信息,以帮助调试程序。与特定代码相关的错误是编号的,与整个源程序相关,而不是某一特定代码相关的错误是不编号的。

1.有编号的错误信息的显示格式:源文件(行)代码 信息

(1)源文件,是出现错误的源程序文件名。若错误出现在内含文件的宏指令中,则源文件是引用该宠指令的文件,而不是定义该宏指令的文件。

(2)行,是出错位置在源程序中的行号。

(3)代码,是所有微软语言使用的标识代码,它由“error或“warning”开头,后跟一个五个字符代码。首字符指出程序是哪种语言编写的,汇编源程序用A开头;后四个是数字字符,第一个数字说明警告级别,致使错误是2,严重警告是4,劝告性警告是5;接着三个数字是错误号。

(4)信息,是错误的解释与说明。MASM5.0中有编号的错误信息提示如下: 0,Block nesting error,块嵌套错误。

1,Extra characters on line,在一行中除存在所定义语句的全部信息外,还有多余的字符,即用户提供了较多的操作数。

2,Internal error-Register already defined symbol,寄存器被定义为符号的内部错误。

3,Unkown type Specifier,未知的类型说明符。可能是拼错了类型说明符。4,Redefinition of symbol,符号在两处按不同类型定义。5,Symbol is multidefind,符号被多次定义。

6,Phase error between paes,二义性的语句引起偏移地址在遍1和遍2之间改变。7,Already had ELSE clause,条件汇编块中用了多个ELSE子句。8,Must be in condition block,无与ENDIF或ELSE匹配的IF。9,Symbol not defined,符号无定义。10,Syntax error,句法错。相应语法不正确。11,Type illegal in context,类型说明符非法。

12,Group name must be unique,组名已被定义为其他类型符号。

13,Must be declared during pa 1:xymbol,符号应预先定义,然后再引用。14,Illegal public declaration,在PUBLIC语句中,使用了非法操作数。如使用寄存器名。

15,Symbol already different kind :symbol,符号已经被定义为另一种符号。16,Reserved word used as symbol: name,保留字作符号,这是警告错误。

汇编语言程序设计实验指导书

17,Forward reference illegal,符号提前引用错误。

如顺序的两语句DB COUNT DUP(?)与COUNT EQU 10将产生错误。两语句调换先后顺序,将不会产生这种错误。

18,Operand must be register operand,操作数是寄存器,但却是一个符号或常量。20, Operand must be segment or group,操作数应当是段名或组名。提供的是却是其他名字或常数。

22, Operand must be type specifies,操作数应当是类型说明符。如NERA或WORD,但给出的是其他操作数。

23,Symbol already defined locally,在当前模块中已定义的符号又说明为EXTERN的操作数。

24,Segment parameters are changed,同名段操作数说明有矛盾。语句要求应相同。25,Improper align/combine type, AEGMENT语句操作数错,检查定位和组合类型。26,Reference to multidefined symbol,引用多重定义的符号。27,Operand expected,需要一个操作数,但接收到的是操作符。28,Operator expected,需要一个操作符,但给的却是操作数。29,Division by o or overflow,表达式结果被零除或结果溢出。

30,Negative shift count,作为SHL/SHR的操作数的表达式计算成一个负的移位次数。

31,Operand types must match,操作数类型应当匹配。

如DATA是字节变量,则语句“MOV AX,DATA”会产生这个错误。为消除该错误上述语句应改为“MOV AX,WORDPTR DATA”。

32,Illegal use of external,外部变量使用不正确。

34,Operand must be record or field name,要求操作数是记录或域名。

35,Operand must have size,要求操作数有指定的尺寸。如语句INC[BX]将产生这个错误。

38,Left operand must have segment,段取代前缀必须是段寄存器、组或段名。39,One operand must be constant,应当有一个常数操作数。

40,Operands must be in the same segment,or one must be constant,操作数应在同一段或应有一个常数。

42,Constant expected,希望一个常数。

43,Operand must have segment,操作数应当有段。

44,Must be aociated with data,要求数据相关项的地方用了与代码相关的项。45,Must be aociated with code,要求代码相关项的地方用了数据相关的项。46,Multiple base registers,操作数中使用了多个基址寄存器。如语句“MOV AX,[BX+BP]”非法。

47,Multiple index registers,操作数中使用了多个变址寄存器。如语句“MOV AX,[SI+DI]”非法。

合肥学院计算机科学与技术系

48,must be index or base registers,存储器操作数要求是基址或变址寄存器,但给的是其他寄存器。

49,Illegal use of register,寄存器的使用非法。

50,Value out ofran9,值超出范围。如语句“MOV AL,5000”是非法的,因字节寄存器应使用字节值。

51,Operand not in current CS ASSLLME segment,操作数超出ASSUME语句分配的代码范围。通常是对标号的调用或转移超出当前代码段。

52,Improper operand type:symbol,非法的操作数类型。如语句“MOV meml,mem2”非法,原因是两个均为存储器操作数。

53,Jump out of range by number bytes,条件转移指令不在要求的范围之内。55,Illegal register value,非法使用寄存器。如语句“MOV AX,BP+4”非法,正确语句为“MOV AX,[BP+4]”。

56,Immediate mode illegal,立即操作数非法。如语句“MOV DS,1000H”,立即操作数非法。

57,Illegal size for operand,特定语句的操作数非法。如INC MEM32,MEM32为双字变量。

58,Byte register illegal,8位寄存器用在要求l6位寄存器的语句中。如PUSH AL非法。

59,Illegal use of CS register,非法使用CS。如语句“POP CS”非法。

60,Must be accumulator register,应当使用AL、Ax的语句中使用了其他寄存器。61,Improper use of segment register,段寄存器使用非法。如语句INC CS。62,Miing or unreachable code segment,企图转移到MASM不能识别为代码段的标号。通常因为无ASSUME语句使CS与代码段相连造成的。

63,Operand combination illegal,操作数组合非法。

64,Near JAMP/CALL to different code segment,近程调用和跳转语句企图转移到非当前代码段。

65,Label cannot have segment override,标号不允许有段前缀,即段取代前缀使用有误。

66,Must have instruction after prefix,前缀后应当有指令。

67,Cannot override ES for destination,段取代前缀ES不能用在串操作指令的目的操作数上。

68,Cannot addre with segment register,企图访问存储操作数,但没有用ASSUME说明该操作数所在的段。请使用段取代或ASSUME标示出该操作数的属性。

69,Must be in segment block,应在段内使用的伪指令用在了段外。

70,Cannot use EVEN or ALIGN with type,EVEN和ALIGN伪指令用在字节对准的段内。

71,Forward reference needs override or FAR,调用或转移语句提前引用其他段的汇编语言程序设计实验指导书

标号需使用PTR操作符予以说明。如CALL FAR PTR TASK,引用标号TASK时还未定义TASK标号。

72,Illegal value for DUP count,重复子句的数值表达式不为正整数值。73,Symbol is already external,已定义为外部名字的符号又被定义为内部名字。74,DUP nesting too deep,重复子句嵌套超过17层。

75,Illegal use of undefined operand(?),“?”使用不正确。如“MOVAH,?”和“5 DUP(?+5)”均非法。

76,Too many values for structure or record initialization,初始化结构或记录变量时给出过多初始值。

77,Angle brackets required around initialized list,初始化结构变量时,没有使用尖括号括起初始值。

78,Directive illegal in structure,结构定义中的语句非法。

79,Override with DUP illegal,初始化结构变量时,使用了重复子句DUP。80,Field cannot be overridden,初始化结构变量时,企图预置不能被预置的域。83。Circular chain of EQU alliases,用EQU伪指令定义的符号名指向自身。如语句“AEQUB”和“B EQUA”非法,将产生该错误。

84,Cannot emulate coproceor opcode,协处理器指令或操作数与产生协处理器仿真程序不支持的操作码一起使用。

85,End of file,no END directive,源程序无END语句。该错误也可能在段嵌套出错时产生。

86,Data emitted with no segment,应在段内使用的语句在段外使用。产生目标代码的语句必须在段内,不产生目标代码的语句可在段内,也可在段外。

87,Forced error-pal,用.ERRl伪指令强制形成的错误。88,Forced error-pa2,用.ERR2伪指令强制形成的错误。89,Forced error,用.ERR伪指令强制形成的错误。

90,Forced error-expreion true(0),用.ERRZ伪指令强制形成的错误。91,Forced error-preion false(not 0),用.ERP,Z伪指令强制形成的错误。92,Forced error-symbol not defined,用.ERRNDEF伪指令强制形成的错误。93,Forced error-symbol defined,用.ERRDEF伪指令强制形成的错误。94,Forced error-string blank,用.ERRB伪指令强制形成的错误。95,Forced error-string not blank,用.ERRNB伪指令强制形成的错误。

96,Forced error-strings identical,用.ERRIDN伪指令强制形成的错误。97,Forced error-strings different,用.ERRDIF伪指令强制形成的错误。98,Wrong length for override value,结构域的重设值太大以至不适宜于这个域。99,Line too long expanding symbol:symbol,使用EQU伪指令定义的等式太长。101,Miing data;zero aumed,缺少操作数,假定是零。

103,Align must be power of2,ALIGN伪指令用了不是2的幂的参数。

合肥学院计算机科学与技术系

104,Jump within short distance,JMP指令的转移范围在短标号内,故可在标号前加SHORT操作符,从而使指令代码减少一个字节。

105,Expected element,少了一个元素,如标点符号或操作符。

106,Line too lon9,源行超过MASM允许的最大长度。MASM 5.0规定行长为128个字符。

107,Illegal digit in number,常数内包含当前的基不允许的数字,如l08Q。108,Empty string not allowed,空串不允许出现。如“NULL DB„Ⅲ语句非法。109,Miing Operand,语句缺少一个必需的操作数。

110,Open parenthesis or bracket,语句中缺少一个圆括号或方括号。111,Directivemustbeinmacr0,只在宏定义里面使用的伪指令用在宏定义之外。112,Unexpected end of line,语句行不完整。

2.无编号的错误信息

无编号错误信息提示命令行、存储分配或文件访问出现错误。(1)命令行错误

MASM时,若胃户给出无效命令行,将产生如下提示信息之一: Buffer size expected after B option Error defining symbol “name” from command line Extra file name ignored Line invalid.start again Path expected after I option Unkn0Ⅵ-a case option:option Unknown option:option(2)文件访问错误

当MASM处理文件时,若出现磁盘空间不够、错误文件名或其他文件错误,则将产生如下提示信息之一:

End of file encountered on input file Include file filename not found Read error on standard input Unable to acce input file:filename Unable to open cref file:filename Unable to open input file:filename Unable to open listing file:filename Unable to open object file:filename Write error on cro.reference file Write error on listing file Write error on object file 21

汇编语言程序设计实验指导书

(3)其他错误

表示存储分配出错或其他一些与特定源行不相关的汇编出错等提示信息。Internal error,内部出错,注意错误发生时的情况。

Internal error.problem with expreion analyzer,分析表达式出现内部错误,说明表达式构成有误。

Internal unknown error,MASM不能识别的内部表有错。

Number of Open conditionals:(number),有IF而没有ENDIF语句。Open procedures,无与PROC匹配的ENDP语句。Open segments,无与SEGMENT匹配的ENDS语句。

Out of memory,存储器有效空间用完,可能是源文件太长或符号表中定义了太多符号。

《语言程序设计实验指导书(8月版).docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
语言程序设计实验指导书(8月版)
点击下载文档
相关专题 汇编语言程序设计实验 指导书 语言程序设计 汇编语言程序设计实验 指导书 语言程序设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文