汇编语言程序设计实验指导书_第1页
汇编语言程序设计实验指导书_第2页
汇编语言程序设计实验指导书_第3页
汇编语言程序设计实验指导书_第4页
汇编语言程序设计实验指导书_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、8086汇编语言程序设计实验指导书计算机科学与技术学院计算机科学与技术系二一一年九月 目 录第一部分 实验方法- 1 -1.1 实验目的与要求- 1 -1.2 实验方法- 2 -第二部分 实验内容- 7 -实验1 简单汇编语言程序设计- 7 -实验2 分支循环及程序设计- 8 -实验3 子程序程序设计- 9 -实验4 综合程序设计- 10 -附 录- 11 -附录1 常用DOS命令- 11 -附录2 DEBUG主要命令- 13 -附录3 汇编程序出错信息- 16 -附录4 常用字符ASCII码值- 20 -附录5 80888086指令系统- 21 -附录6 IBM PCAT中断功能表- 25

2、-附录7 常用DOS功能调用(INT 21H)- 27 -附录8 BIOS功能调用- 30 -第一部分 实验方法1.1 实验目的与要求一、实验目的学习汇编语言程序设计的基本方法和技能,进一步加深对8086汇编语言程序设计的理解,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,为后继课程接口技术打下坚实的程序设计基础。二、实验要求1. 上机前要做好充分的准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。2. 上机时要遵守实验室的规章制度,爱护实验设备。要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法及实验仪器。在程序的调试过程中,有意识

3、地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。为了更好地进行上机管理,要求用硬盘储存程序,并建立和使用子目录,以避免文件被别人删除。有关目录及文件操作的DOS命令见附录1。此外,为了便于统一管理硬盘中的文件,要求实验者按以下形式命名实验文件:字母学号_序号.ASM其中,字母取az中的一个字母,按实验项目序号从a至z排列,序号是指每次实验中所编写的程序的序号。例如:学号为学生的第二次实验中的第1个程序所对应的文件名应为b_1.ASM。3每个实验完成后,应写出实验报告。实验报告的要求如下: 设计说明:用来说明设计的内容。它包括:程序名、功能、原理及算法说明、程序及数据结构

4、、主要符号名的说明等。 调试说明:便于学生总结经验提高编程及调试能力。它包括:调试情况,如上机时遇到的问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会等。 程序框图。 程序清单。1.2 实验方法一、用编辑程序建立ASM文件用文字处理软件编辑源程序。常用编辑软件有:EDIT.EXE、记事本、WORD等。无论采用何种编辑工具,生成的文件必须是纯文本文件,且文件扩展名为.ASM。下列程序完成两个字节数相加,并将和存于SUM变量中。用编辑软件建立以ABC.ASM为文件名的源程序文件。 DATA SEGMENT BUF DB 47H,6AH

5、;数据定义 SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX;段寄存器定义 MOV AL,BUF;数据处理部分从此开始,直到返回DOS ADD AL,BUF+1 MOV SUM,AL MOV AH,4CH;返回DOS INT 21H CODE ENDS END START二、用汇编程序汇编源文件,生成目标文件(.OBJ)当源程序建立以后,用汇编程序MASM对ABC.ASM源程序文件进行汇编,操作步骤如下:(以下划线部分为用户键盘输入,“”代表回车,未划线部分为屏幕显示,小字部分为

6、说明)。C:MASM MASM ABC.ASM Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Crop 1981-1985,1987,All rights reservedObject filename ABC.OBJ 输入目标文件名,若采用括号 中的名字,按Source listingNUL.LST 若需要列表文件,输入文件名,按;如果不需要,直接按Cross-referenceNUL.CRF 若需要交叉索引文件,输入文件名;如不需要,直接按 49758 + Bytes symbol space free0

7、 Warning Errors0 Severe Errors回答上述问题后,汇编程序就对源程序进行汇编。若汇编中发现源程序有语法错误,则列出错误语句所在行、错误代码及错误性质说明。错误分为:警告错误(Warning Errors)和严重错误(Severe Errors)两种。警告错误指汇编程序认为的一般性错误;严重错误指汇编程序认为无法进行正确汇编的错误,给出其错误个数,错误性质。这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序对源程序进行修改。修改后重新汇编,直到无错误为止。除了用上述方法分步回答问题外,还可以用命令行的形式按顺序对相应提示予以回答,其格式是:MASM 源文件名,

8、目标文件名,列表文件名,交叉引用文件名;其中文件名都不必给出扩展名,汇编程序会按照缺省情况使用或产生。若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。例如以下命令经汇编后在当前目录下产生ABC.OBJ文件,不产生LST文件和CRF文件。C:MASM MASM ABC; 三、用连接程序LINK目标文件,生成执行文件EXEC:MASM LINK ABC Microsoft (R) 8086 Object Linker Version 5.00Copyright (C) Microsoft Crop 1981-1985,1987,All rights reser

9、vedRun File ABC.EXE 输入可执行文件名,若采用括号 中的名字,按List FileNUL.MAP 若需要映象文件,输入文件名,按;如果不需要,按LibrariesNUL.LIB 若需要库文件,输入文件名,按;如果不需要库文件,按Warning: no stack segment上述给出的警告信息,表示用户程序没有定义堆栈段。该警告不影响可执行程序的生成和正常运行,因为运行时会自动使用系统提供的缺省堆栈。回答上述问题后,连接程序开始连接,若连接过程中有错,则显示错误信息。此时,按错误提示,修改源程序,然后,回到第二步。直至汇编无错误,连接无错误(错误No Stack Segme

10、nt 除外),在当前目录下产生可执行文件(.EXE),进入第四步。同样也可以用命令行的形式按顺序对相应提示予以回答,其格式是:LINK 目标文件名,可执行文件名,内存映象文件名,库文件名;其中不必给出扩展名,连接程序会按照缺省情况使用。若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。例如以下命令行对ABC.OBJ文件连接后在当前目录下产生ABC.EXE文件,其余文件均不需要。C:MASM LINK ABC; 从6.0版以后,Microsoft公司把MASM和LINK的功能由一个ML.EXE程序完成,只需一个命令就可以把源程序汇编并连接生成.EXE文件。而不

11、再需要分两步操作。ML.EXE常用格式为:ML /F1/Fm/Fr/c 源文件其中,源文件名的扩展名(.asm)不能省,中的F必须大写,l,m,r,c必须小写,各可选项含义如下:/F1:产生.lst列表文件,缺省时不产生。/Fm:产生.map内存映象文件,缺省时不产生。/Fr:产生.sbr交叉参考文件,缺省时不产生。/c:只产生,obj目标文件,不产生.exe可执行文件。缺省时只产生.exe文件。例:ML /Fl ABC.ASM以上命令会对已存在的ABC.ASM文件汇编且连接,并在当前目录下生成一个列表文件ABC.LST和一个可执行文件ABC.EXE.四、运行程序设连接生成的执行文件为ABC.

12、EXE,运行程序只需在DOS提示符下键入文件名即可,如:C:MASMABC 若程序能够运行但不能得到预期结果,则需要静态或动态查错。静态查错即检查源程序,并对源程序进行修改,然后再汇编、连接、运行。如果静态检查无法发现错误,则需动态查错。五、程序调试及结果查看这里使用DEBUG程序进行调试,DEBUG是一种使用广泛的强有力的汇编语言程序或二进制文件的调试工具。设ABC.ASM经汇编及连接后,产生ABC.EXE文件,对它的调试操作如下:1把程序装入内存,并显示程序清单C:MASMDEBUG ABC.EXE -此时,DEBUG已将执行程序装入内存,可键入DEBUG的有关命令调试程序。-U 用反汇编

13、命令U列出程序清单13E3:0000 B8E213 MOV AX,13E213E3:0003 8ED8 MOV DS,AX13E3:0005 A00000 MOV AL,000013E3:0008 ADD AL,000113E3:000C A20200 MOV 0002,AL13E3:000F B44C MOV AH,4CH13E3:0011 CD21 INT 212查看数据段内容或查看寄存器内容-D DS:0000 查看数据段内容13E2:0000 47 6A 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Gj.可见0000、0001单元内容为数据段定义

14、的内容,分别为47H、6AH。DEBUG状态下,缺省数制为十六进制数。-R 查看寄存器内容AX=13E2 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13D2 ES=13D2 SS=13E2 CS=13E3 IP=0003 NV UP EI PL NZ NA PO NC若查看指定寄存器内容,在R命令后跟上寄存器名,例:-R AX 查看寄存器AX的内容AX 13E2:若需修改AX的值,则键入新值;若无需更改,按回车。3连续运行程序,查看结果-G 或 -G =0 0013 运行程序,0为运行起始地址,0013为断点地址-D D

15、S:0000 查看内存结果13E2:0000 47 6A B1 00 00 00 00 00 00 00 00 00 00 00 00 00 Gj.可见0002单元中内容已变为0000和0001两单元内容之和。4如果连续得不到正确结果,需分步跟踪运行-T=0000 0000这所需要运行指令的地址AX=13E2 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13D2 ES=13D2 SS=13E2 CS=13E3 IP=0003 NV UP EI PL NZ NA PO NC13E3:0003 8ED8 MOV DS,AX显示

16、单步执行后寄存器和标志状态之后,停在下一条指令开始处。-T 顺序运行下一条指令5退出DEBUG-Q第二部分 实验内容实验1 简单汇编语言程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握简单汇编语言程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1. 若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。试编写汇编程序,完成。2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL的第0位置1,否则将该位置0。三、实验

17、报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。实验2 分支及循环程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握分支程序和循环程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1键入一数,判断该数是否在3 X 15范围内,是输出标志0,不是输出。 2试编程统计数据区中正数、零和负数的个数。3. 编程求无符号数字节序列中最大值和最小值。4.编写汇编程序,统计某存储区若干个数据中英文字母的个数,

18、并将结果在屏幕上显示。6.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定)三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。 实验3 子程序程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握子程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封

19、装成子程序dispDEC和dispHEX。2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下:EXAMSCORE DB 01;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分DB 02;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的

20、问题和解决的方法。实验4 综合程序设计一、实验目的与要求1熟悉汇编语言运行、调试环境及方法。2掌握汇编语言程序的设计方法。3熟悉调试工具DEBUG,并运用DEBUG工具调试程序。二、实验内容根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。1. 编写汇编程序接收用户从键盘键入的月份数,在终端上显示该月的英文缩写名。当用户按下ESC键时,程序退出,返回DOS。参考程序执行过程如下:month?5MAYmonth?9SEPmonth?2. 按15行16列的表格形式显示ASCII码为10HFFH的所有字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码

21、为0)分隔。3.在第2题程序的基础上进行修改。将显示表格的行、列数由固定的15行16列改为由用户从键盘输入。然后,按用户输入的行列值进行显示。4.编写汇编程序将内存数据区保存的若干个带符号16位数据按从大到小的顺序排列后,以十进制真值的形式在屏幕上显示。三、实验报告要求1.程序算法流程图。2.源程序清单。3.程序运行结果。4.调试过程中遇到的问题和解决的方法。附 录附录1 常用DOS命令1 显示目录命令DIR该命令用来列出指定盘、指定目录或指定文件的目录。命令格式有一下三种:DIR /P/WDIR /P/WDIR /P/W 其中/P表示分页显示;/W表示紧缩格式显示,即一行显示多个文件。 中内

22、容为任选项;中内容必须输入。文件路径名为:目录路径名为: 文件名中可用通配符“*”和“?”,“*”代表任意一串字符,“?”代表任意一个字符。例如:若要显示D盘MASM目录下的所有扩展名为ASM文件的DOS命令为:DIR D:MASM*.ASM2 文件改名命令REN 该命令用来更改文件名,格式为: REN 旧文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“?”。例如:若要将D盘MASM目录下的test.lst文件改名为test.asm,其DOS命令为: REN D:MASMTEST.LST TEST.ASM3 文件复制命令COPY该命令将一个或多个文件复制成副本,格式为: CO

23、PY 文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“?”。例如:若要将D盘MASM目录下的所有扩展名为ASM的文件复制到C盘的EXAMPLE目录下,其DOS命令为: COPY D:MASM*.ASM C:EXAMPLE若要将当前目录下的TEST.ASM文件复制成TEST1.ASM,其DOS命令为: COPY TEST.ASM TEST1.ASM4 文件删除命令DEL该命令将一个或多个文件删除,格式为: DEL 文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“?”。例如:若要将D盘MASM目录下的所有扩展名为ASM的文件删除,其DOS命令为:DEL D:MA

24、SM*.ASM5 建立子目录命令MD该命令用于建立子目录,格式为:MD 目录路径名定义同第一点中的目录路径名。例如: MD SUBDIR1 MD SUBDIR1SUBDIR2 MD USER1其中第一条命令在当前目录下建一个名为SUBDIR1的子目录;第二条命令在子目录SUBDIR1中建立SUBDIR2子目录;第三条命令表示在根目录中建立USER1子目录。6 删除子目录命令RD该命令用于删除一个空目录,但不允许删除根目录和当前目录,格式为: RD 目录路径名定义同第一点中的目录路径名。例如:若要删除根目录下的USER1子目录,其DOS命令为: RD USER1在删除USER1子目录前,子目录U

25、SER1必须为空,且USER1不是当前目录。7 改变当前目录命令CD该命令用于显示或改变当前目录,格式为: CD 目录路径名定义同第一点中的目录路径名。例如:CD USER1 CD CD . CD其中第一条命令是将根目录下的USER1子目录设为当前目录;第二条命令是将根目录设为当前目录;第三条命令是将当前目录的上一级目录设为当前目录(即退回到上一级目录)。第四条命令为显示当前目录。8 设置可执行文件的搜索路径命令PATH用户在当前目录中工作时,时常会运行其它目录下的可执行文件(即扩展名为EXE或COM的文件),PATH命令可满足这一要求。PATH命令用来指出,假如在当前目录中找不到可执行文件时

26、应进一步去查找的目录。格式为: PATH ;若命令不带参数,将显示当前设置的搜索路径。例如将搜索路径设置为C盘的DOS目录以及D盘的MASM目录的DOS命令为:PATH C:DOS;D:MASM附录2 DEBUG主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1 DEBUG程序的调用在DOS的提示符下,可键入命令:C:DEBUG d:path文件名参数1参数2其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“”,此时,可键入所需的DEBU

27、G命令。2 DEBUG的主要命令 显示内存单元内容的命令D,格式为: -D 地址 或 -D 范围例如,显示指定范围内存单元内容的方法为:-D 100 1FF18E4:0100 47 06 04 02 38 01 47 06 06 02 00 02 47 06 08 02 G8GG18E4:0110 02 02 3B 04 02 68 02 00 4D 20 50 51 56 57 8B 37 ;hM PQVW7其中左边为十六进制表示形式,右边为ASCII码表示形式,“”表示不可显示字符。这里没有指定段地址,D命令自动显示DS段的内容。 修改内存单元内容的命令E,它有两种格式1) 用给定内容代替

28、指定范围的单元内容,格式为: -E 地址 内容表 例如: -E DS:100 FA8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。2) 逐个单元相继地修改,格式为: -E 地址例如: -E DS:10018E4:0100 89.78此命令是将0100单元内容89改为78。78是程序员从键盘输入的。程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。 检查和修改寄存器内容的命令R,它有三种方式1) 显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态-R该命令可显示AX,BX,CX,DX,SP,BP,SI,DI

29、,DS,ES,SS,CS,IP及标志寄存器内容。R命令显示中标志位状态的含义如下所示:标 志 名置 位复 位溢出Overflow(是否)OVNV方向Direction(减量)增量DNUP中断Interrupt(允许屏蔽)EIDI符号Sign(负正)NGPL零Zero(是否)ZRNZ辅助进位Auxiliary Carry(是否)ACNA奇偶Parity(偶奇)PEPO进位Carry(是否)CYNC2) 显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如: -R AX系统响应如下:AX F130:表示AX当前内容为F130,此时若不对其作修改,可按“回车”键,否则,键入修改内容。3) 显示和

30、修改标志寄存器内容 -RF 系统将给出响应,例如: OV DN EI NG ZR AC PE CY- 这时若不作修改可按“回车”,否则在“-”之后键入修改值,键入顺序任意,各标志位的取值如上表所示。 运行命令G,格式为: -G =地址1地址2地址3其中,地址1指定了运行的起始地址,后面的均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条要执行的指令。 跟踪命令T,它有两种格式:1) 逐条指令跟踪,格式为:-T地址该命令从指定地址起执行一条指令后停下来,显示所有寄存器及标志位的内容,如未指定地址从当前的CS:IP开始执行。2) 多条指令跟踪,格式为: -T地址

31、值该命令从指定地址起执行n条指令后停下来,n由值确定。 汇编命令A,格式为: -A 地址 该命令允许输入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:输入的数字均默认为十六进制数。 反汇编命令A,它有两种格式:1) 从指定地址开始,反汇编32个字节,其格式为:-U 地址2) 对指定范围内的存储单元进行反汇编,其格式为:-U 范围 命名命令N,格式为:-N 文件标识符 文件标识符该命令将两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块内,以便使用L或W命令把文件装入或者存盘。文件标识符格式为:d:path 文件名.扩展名 装入命令L,它有

32、两种功能:1) 将磁盘上指定扇区的内容装入到内存指定地址起始的单元中,其格式为:-L 地址 驱动器 扇区号 扇区数2) 装入指定文件,其格式为:-L 地址此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。 写命令W,它有两种功能:1) 将数据写入磁盘的指定扇区,其格式为:-W 地址 驱动器 扇区号 扇区数2) 将数据写入指定文件中,其格式为:-W 地址此命令把指定内存区域中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址,则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。 退出DEBUG命令Q,格式

33、为:-Q该命令退出DEBUG程序,返回DOS。附录3 汇编程序出错信息编 码说 明0Block nesting error嵌套过程、段、结构、宏指令等不是正确结束。1Extra character on line当一行上已接受了定义指令的足够信息,而又出现了多余的字符。2Register already defined汇编内部出现逻辑错误。3Unknown symbol type在符号语句的类型字段中,有些不能识别的东西。4Redefinition of symbol在第二遍扫视时,接着又定义一个符号。5Symbol is multi-defined重复定义一个符号。6Phase error

34、between passes程序中有模棱两可的指令,以至于在汇编程序的两次扫视中,程序标号的位置在数值上改变了。7Already had ELSE clause在ELSE从句子试图再定义ELSE从句。8Not in conditional block在没有提供条件汇编指令的情况下,指定了ENDIF或ELSE。9Symbol not defined符号没有定义。10Syntax error语句的语法与任何可识别的语法不匹配。11Type illegal in context指定的类型在长度上不可接收。12Should have been group name给出的组合不符合要求。13Must b

35、e declared in pass 1得到的不是汇编程序所要求的常数值。例如,向前引用的向量长度。14Symbol type usage illegalPUBLIC符号的使用不合法。15Symbol already different kind企图定义与以前定义不同的符号。16Symbol is reserved word企图非法使用一个汇编程序的保留定(例如,宣布MOV为一个变量)。17Forward reference is illegal向前引用必须是在第一遍扫视中定义过的。18Must be register希望寄存器作为操作数,但用户提供的是符号而不是寄存器。19Wrong typ

36、e of register指定的寄存器类型并不是指令中或伪操作中所要求的。例如ASSUME AX。20Must be segment or group希望给出段或组,而不是其它。21Symbol has no segment想使用带有SEG的变量,而这个变量不能识别段。22Must be symbol type必须是WORD、DW、QW、BYTE或TB,但接收的是其它内容。23Already defined locally试图定义一个符号作为EXTERNAL,但这个符号已经在局部定义过了。24Segment parameters are changedSEGMENT的自变量与第一次使用这个段的

37、情况不一样。25Not proper align/combine typeSEGMENT参数不正确。26Reference to mult defined指令引用的内容已是多次定义过的。27Operand was expected汇编程序需要的是操作数,但得到的却是其它内容。编 码说 明28Operator was expected汇编程序需要的是操作符,但得到的却是其它内容。29Division by 0 or overflow给出一个用0作除数的表达式。30Shift count is negative移位表达式产生的移位计数值为负数。31Operand type must match在自

38、变量的长度或类型应该一致的情况下,汇编程序得到的并不一样。例如,交换。32Illegal use of external用非法手段进行外部使用。33Must be record field name需要的是记录字段名,但得到的是其它东西。34Must be record or field name需要的是记录名或字段名,但得到的是其它东西。35Operand must have size需要的是操作数的长度,但得到的是其它内容。36Must be var,label or constant需要的是变量、标号或常数,但得到的是其它内容。37Must be structure field name

39、需要的是结构字段名,但得到的是其它内容。38Left operand must have segment操作数的右边要求它的左边必须是某个段。39One operand must be const这是加法指令的非法使用。40Operands must be same or 1 abs这是减法指令的非法使用。41Normal type operand expected当需要变量、标号时,得到的却是STRUCT、FIELDS、NAMES、BYTE、WORD或DW。42Constant was expected需要的是一个常量,得到的却是另外一个内容。43Operand must have segm

40、entSEG伪操作使用不合法。44Must be associated with data有关项用的是代码,而这里需要的是数据,例如一个过程的DS取代。45Must be associated with code有关项用的是数据,而这里需要的是代码。46Already have base register试图重复基地址。47Already have index register试图重复变址地址。48Must be index or base register指令需要基址或变址寄存器,而指定的是其它寄存器。49Illegal use of register在指令中使用了8088指令中没有的寄存器

41、。50Value is out of range数值大于需要使用的,例如将DW传送到寄存器中。51Operand not in IP segment由于操作数不在当前IP段中,因此不能存取。52Improper operand type使用的操作数不能产生操作码。53Relative jump out of range指定的转移超出了允许的范围(128127字节)。54Index disp.must be constant试图使用脱胎换骨离变址寄存器的变量位移量。位移量必须是常数。55Illegal register value拽定的寄存器值不能放入“reg”字段中。(即“reg”字段大于7)

42、56No immediate mode指定的立即方式或操作码都不能接收立即数。例如:PUSH。57Illegal size for item引用的项的长度是非法的。例如:双字移位。编 码说 明58Byte register is illegal在上下文中,使用一个字节寄存器是非法的。例如:PUSH AL。59CS register illegal usage试图非法使用CS寄存器。例如:XCHG CS,AX60Must be AX or AL某些指令只能用AX或AL。例如:IN指令。61Improper use of segment reg.段寄存器使用不合法。例如:1立即数传送到寄存器。62

43、No or unreachable CS试图转移到不可到达的标号。63Operand combination illegal在双操作数指令中,两个操作数的组合不合法。64Near JMP/CALL to different CS企图在不同的代码段内执行NEAR转移或调用。65Label cant have seg override非法使用段取代。66Must have opcode after prefix使用前缀指令之后,没有正确的操作码说明。67Cant override ES segment企图非法地在一条指令中取代ES寄存器。例如:存储字符串。68Cant reach with seg

44、ment reg.没有使变量可达到的ASSUME语句。69Must be in segment block企图在段外产生代码。70Cant use EVEN on BYTE segment被提出的是一个字节段,但试图使用EVEN。71Forward needs override目前不使用这个信息。72Illegal value for DUP countDUP计数必须是常数,不能是0或负数。73Symbol already external企图定义一个局部符号,但此符号已经是外部符号了。74DUP is too large for linkerDUP嵌套太长,以至于从连接程序不能得到所要的记录

45、。75Usage of ? ( indeterminate ) bad“?”使用不合适。例如:?+5。76More values than defined with77Only initialize list legal78Directive illegal in STRUC79Override with DUP is illegal80Field cannot be overridden81Override is of wrong type82Register cant be farward ref83Circular chain of EQU aliases84Feature not su

46、pported by Small Assembler (ASM)附录4 常用字符ASCII码值字符ASCII值字符ASCII值字符ASCII值字符ASCII值NUL00434M4Df66BS08535N4Eg67LF0A636O4Fh68CR0D737P50i69ESC1B838Q51j6ASP20939R52k6B!21:3AS53l6C“22;3BT54m6D#233EW57p70&26?3FX58q712740Y59r72(28A41Z5As73)29B425Bt74*2AC435Cu75+2BD445Dv76,2CE455Ew77-2DF46_5Fx78.2EG4760y79/2FH4

47、8a61z7A030I49b627B131J4Ac63|7C232K4Bd647D333L4Ce657ENUL 空 BS 退格LF 换行 CR 回车ESC 退出 SP 空格附录5 80888086指令系统附表5.1 指令符号说明符 号说 明r8任意一个8位通用寄存器AH、AL、BH、BL、CH、CL、DH、DLr16任意一个16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SPreg代表r8、r16seg段寄存器CS、DS、ES、SSm8一个8位存储器单元m16一个16位存储器单元mem代表m8、m16i8一个8位立即数i16一个16位立即数imm代表i8、i16dest目的操作数sr

48、c源操作数label标号附表5.2 指令汇编格式指令类型指令汇编格式指令功能简介备 注传送指令MOV reg/mem,immdestsrcMOV reg/mem/seg,regCS除外MOV reg/seg,memCS除外MOV reg/mem,seg交换指令XCHG reg,regreg/memXCHG reg/mem,reg转换指令XLAT labelALBX+ALXLAT堆栈指令PUSH r16/m16/seg入栈POP r16/m16/seg出栈CS除外标志传送CLCCF0STCCF1CMCCFCLDDF0STDDF1CLIIF0STIIF1LAHFAH标志寄存器低字节SAHF标志寄存器低字节AHPUSHF标志寄存器入栈POPF出栈到标志寄存器地址传送LEA r16,memr1616位有效地址LDS r16,memDS:r1632位远指针LES r16,memES:r1632位远指针输入IN AL/AX,i8/DXAL/AXI/O端

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论