当前位置:文档之家› 汇编错误说明

汇编错误说明

汇编错误说明
汇编错误说明

MASM汇编错误信息说明

1、test.asm(54): error A2000: Block nesting error

说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。

修改:检查段定义,使段名前后保持一致。

2、test.asm(5): error A2005: Symbol is multidefined: DATA

说明:此错误信息提示DATA符号重复定义了。

修改:将其中一个符号DATA重新设置。

3、test.asm(7): error A2009: Symbol not defined: B9H

说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。

按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符

号。另一种出错的可能原因是程序中使用的符号变量没有定义。

修改:以0B9H取代B9H;使用伪指令定义变量。

4、test.asm(11): error A2009: Symbol not defined: NO

说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划

线。

修改:将no-count改为no_count。

5、test.asm(28): error A2010: Syntax error

说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。

修改:按照汇编指令的规定格式重新编写。

6、test.asm(2): error A2018: Operand must be register: DX

说明:指定的寄存器不是指令或伪指令所要求的。如:ASSUME DX:DATA

修改:查看汇编指令的规定格式。

7、test.asm(16): error A2028: Operator expected

说明:汇编程序需要的是操作符,得到的却是其它内容。test.asm中第16行MOV DX OFFSET BUF2,显然是两操作数中间缺少“,”符号导致出错。

修改:两操作数之间用“,”号分隔。

8、test.asm(47): error A2029: Division by 0 or overflow

说明:给出一个用零作除数的表达式或溢出。test.asm中第47行指令AND AL, 0010 0000数据溢出,这是因为,汇编程序默认数制为十进制,因而该指令中的源操作数超出范

围。

修改:若欲输入的是二进制数,在该数后加b,说明为二进制数。

9、test.asm(8): error A2048: Must be index or base register

说明:指令需要基址或变址寄存器,源程序中给出的是其它寄存器。test.asm中第8行指令MOV AL, [SI+DX],显然,DX寄存器应为BX寄存器。

修改:按寻址方式规定修改。

10、test.asm(6): error A2049: Illegal use of register

说明:此错误信息为test.asm中第6行出错,查看该指令,是由于将两操作数之间的“,”号错为“.”号而出错。另外一种情况,如MOV AL, DL+20H,则是源操作数为非法格

式。

修改:按照汇编指令的规定格式重新编写。

11、test.asm(48): error A2050: Value out of range

说明:test.asm中第48行指令AND AL, 0001 0000出错。因为汇编程序默认数制为十进制,因此,该指令源操作数为16位立即数,不能送入8位寄存器。

修改:将8位寄存器AL改为16位寄存器,如AX。

12、test.asm(10): error A2052: Improper operand type

说明:非法的操作数类型。如test.asm中第10行指令MOV RESULT, [SI]。汇编语言规定两个操作数不能同时为存储器操作数。

修改:先将源操作数传送到寄存器,再由寄存器传送到另一个存储单元。

13、test.asm(3):error A2053:Jump out of range by 82 byte(s)

说明:此错误信息为源程序test.asm中第3行的转移指令指定的转移超出允许范围。

修改:可在该转移指令与目标指令中增加一条无条件转移指令。

14、test.asm(21): error A2056: Immediate mode illegal

说明:test.asm中第21行指令IDIV 8错误,操作数不能是立即数。

修改:在该指令前增加一条传送指令,将该操作数8送入一个8位寄存器存放,如BL,则该指令可修改为IDIV BL。

15、test.asm(41): error A2062: Missing or unreachable CS

说明:这是由于缺乏段寄存器说明ASSUME伪指令导致。

修改:在代码段中增加段寄存器说明ASSUME伪指令。

16、test.asm(26): error A2105: Expected: comma

说明:双操作数指令中缺少逗号。

修改:在该指令的两个操作数中加上逗号。

17、test.asm(46): error A2105: Expected: instruction or directive

说明:通常是指令助记符输入错误。

修改:检查指令助记符。

18、test.asm(9): warning A4001: Extra characters on line

说明:当一行上已接受了定义指令说明的足够信息,而又出现多余的字符,汇编程序提示出错。一般多由于指令中出现多余或非法的符号。

修改:仔细检查该指令。

19、test.asm(13): warning A4016: Reserved word used as symbol: AAA

说明:企图非法使用一个汇编程序的保留字,AAA是汇编的保留字(指令助记符),不能作为符号使用。

修改:重新设置符号名。

20、test.asm(33): warning A4031: Operand types must match

说明:test.asm中第33行指令MOV AX, RESULT,其中变量RESULT是用DB定义的,其属性为字节,因而与16位寄存器AX不匹配。另一种情况是两个操作数分别为8

位寄存器和18位寄存器,同样也不匹配。

修改:选用相应位数的寄存器保证两个操作数为相同位数。

21、test.asm(19): warning A4057: Illegal size for operand

说明:操作数的长度非法,如PUSH AL。

修改:改用指令规定位数的寄存器,如PUSH AX。

22、test.asm(55): warning A4085: End of file, no END directive

说明:源程序中缺乏模块结束伪指令END。

修改:整个源程序最后增加模块结束伪指令END。

23、test.asm(32): warning A4101: Missing data; zero assumed

说明:此错误信息提示源程序中第32行的指令少了操作数,即单操作数指令缺少操作数或双操作数指令缺少一个操作数。

修改:给指令加上适当的操作数。

汇编错误对照表

FATAL 严重错误 cannot open file不能打开文件 I/O error closing fileI/O错误正在关闭文件 I/O error writing fileI/O错误正在写文件 I/O error reading file I/O错误正在读取文件 out of memory 缺少内存 assembler limit : macro parameter name table full 汇编限制:宏参数名表已满 invalid command-line option 无效命令行参数 nesting level too deep 嵌套过深 unmatched macro nesting 不正确的宏嵌套 line too long 行太长 unmatched block nesting 不正确的区、段嵌套 directive must be in control block 指令必须在控制段 error count exceeds 100; stopping assembly 错误数超过100,停止汇编 invalid numerical command-line argument 无效命令行参数 too many arguments 太多参数、定义、冲突statement too complex 声明太复杂 Internal Assembler Error 内部汇编错误 missing source filename 找不到源文件名 COFF error writing file COFF错误,正在写文件 invalid debug and browser data; file exceeds line limit 不能排除故障和浏览数据;文件超过行限制 cannot find link.exe 找不到连接程序 cannot find cvpack.exe 找不到cvpack.exe SEVERE 严重的错误 memory operand not allowed in context 内存操作数无法载入上下文环境immediate operand not allowed 当前操作数无法载入 cannot have more than one ELSE clause per IF block IF段只能有一个ELSE从句extra characters after statement 附加的字符在声明之后symbol type conflict 符号类型冲突 symbol redefinition 符号已经定义 undefined symbol 符号没有定义 non-benign record redefinition 没有利于记录的定义 syntax error 语法错误 syntax error in expression 表达式存在语法错误 invalid type expression 无效的类型表达式 distance invalid for word size of current segment 当前区、段的大小命令无效PROC, MACRO, or macro repeat directive must precede LOCAL PROC, MACRO, 或macro repeat指令必须在LOCAL之前 .MODEL must precede this directive .MODEL必须在指令之前cannot define as public or external 不能定义为公有或外部的segment attributes cannot change 区、段属性不能更换expression expected 预期表达式 operator expected 预期操作数

汇编语言出错信息说明

汇编程序出错信息说明 汇编程序出错信息 编 码 提示说明 0Block nesting error 嵌套过程、段、结构、宏指令、IRC、IRP或REPT不是正确结束,如嵌套的外层已终止,而内层还是打开状态。 1Extra characters on line 当一行上已接受了定义指令说明的足够信息,而又出现多余的字符。 2Register already defined汇编内部出现逻辑错误。 3Unknown symbol type 符号语句的类型字段中有些不能识别的东西。 4Redefinition of symbol在第二遍扫视时,连续地定义了一个符号。5Symbol is multi-defined重复定义一个符号。 6Phase error 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 be declared in pass1得到的不是汇编程序所要求的常数值,例如:向前引用的长度 14Symbol type usage illegal PUBLIC符号的使用不合法 15Symbol already different kind 企图定义与以前定义不同的符号 16Symbol is reserved word企图非法使用一个汇编程序的保留字 17Forward reference is illegal向前引用必须是在第一遍扫视中定义过的 18Must be register 希望寄存器作为操作数,但用户提供的是符号而不是寄存器 19Wrong type of register 指定的寄存器类型并不是指令或伪操作所要求的,例如:ASSUME AX 20Must be segment or group希望给出段或组,而不是其它

汇编错误总结

1、test.asm(54): error A2000: Block nesting error 、 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一 致。说明:此错误信息通常见于一个段定义起始段名和末尾段 名不一致。修改:检查段定义,使段名前后保持一致。修改: 检查段定义,使段名前后保持一致。 2、test.asm(5): error A2005: Symbol is multidefined: DATA 说明:符号重复定义了。说明:此错误信息提示 DATA 符号重 复定义了。修改:重新设置。修改:将其中一个符号 DATA 重 新设置。 3、test.asm(7): error A2009: Symbol not defined: B9H 、 说明:行指令出错,查看该指令,说明:此错误信息为 test.asm 中第 7 行指令出错,查看该指令,源操作数为十六进制 数 B9H。按规定以字母开始的十六进制数,应在其。按规定以 字母开始的十六进制数,以便汇编程序区分常数和符号。前面 加上数字 0 以便汇编程序区分常数和符号。另一种出错的可能 原因是程序中使用的符号变量没有定义。能原因是程序中使用 的符号变量没有定义。修改:修改:以 0B9H 取代 B9H;使用 伪指令定义变量。;使用伪指令定义变量。 4、test.asm(11): error A2009: Symbol not defined: NO 、 说明:说明:test.asm 中第 11 行指令 JLE no-count,符号中使 用了中折线,中,符号中使用了中折线,折线在汇编中是作为 减号,因此,没有定义。折线在汇编中是作为减号,因此,汇 编提示标号 NO 没有定义。注意,汇编语言规定符号中可以使 用下划线。注意,汇编语言规定符号中可以使用下划线。修改:修改:将 no-count 改为 no_count。。 5、test.asm(28): error A2010: Syntax error 、

MASM汇编错误信息说明 ASM问题汇总

MASM汇编错误信息说明 test.asm(54):error A2000:Block nesting error 1.1.test.asm(54): 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。 修改:检查段定义,使段名前后保持一致。 test.asm(5):error A2005:Symbol is multidefined:DATA 2.2.test.asm(5): 说明:此错误信息提示DATA符号重复定义了。 修改:将其中一个符号DATA重新设置。 test.asm(7):error A2009:Symbol not defined:B9H 3.3.test.asm(7): 说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符号。另一种出错的可能原因是程序中使用的符号变量没有定义。 修改:以0B9H取代B9H;使用伪指令定义变量。 test.asm(11):error A2009:Symbol not defined:NO 4.4.test.asm(11): 说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划线。 修改:将no-count改为no_count。 test.asm(28):error A2010:Syntax error 5.5.test.asm(28): 说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。 修改:按照汇编指令的规定格式重新编写。 6.6.test.asm(2): test.asm(2):error A2018:Operand must be register:DX 说明:指定的寄存器不是指令或伪指令所要求的。如:ASSUME DX:DATA 修改:查看汇编指令的规定格式。

PIC16系列_单片机常用伪指令(汇编)

PIC 单片机端口电平变化中断使用必须注意的问题 PICC18使用说明 PIC 单片机常用伪指令 PIC单片机2009-02-19 11:16:40 阅读8 评论0 字号:大中小订阅 3.2.3 MPASM 的伪指令 我们在第一章中已经详细介绍了中档PIC 单片机的35 条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35 条正真的汇编指令。我们在此着重介绍最常用的几种 伪指令。 #include 或include #include 伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。 被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM 能够识别的。最经常被“include”的是针对PIC 单片机内部特殊功能寄存器定义的包含头文件,在MPLAB 安装后它们全部放在路径“ C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC 单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。见例3-01。 #include ;把预定义的PIC16F877A 寄存器符号包含到此处 #include ”math.asm” ;把现有的程序文件包含进来作为自己代码的一部分 例3-01 请注意被包含文件的引用方式。一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM 默认的寄存器预定义文件存放路径即为上面提及的MPLAB 安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。例3-01 中”math.asm”没有指定路径,即意味着在当前项目路径下寻找math.asm 文件。如果编译器找不到被包含的文件,将会有错误信息告 知。 请在你的源程序中尽量用MPLAB 标准头文件定义的寄存器符号。一来这些被定义的寄存器符号和芯片数据手册上的描述一一对应,理解起来即直观又容易;二来如果用你自己定义符号就缺乏一个大家能一起交流的标准平台,其他人要解读你的代码时将费时费力。故例3-01 中的首行#include 包含引用伪指令可以说是PIC 单片机程序编写时的标准必备。

单片机汇编语言常见错误分析

单片机汇编语言常见错误分析 一、汇编软件汇编失败原因分析: 这里采用Keil C51 软件包中的宏汇编器A51 作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成 汇编失败,常见的汇编错误如下:1. 标号重复:常见于复制、粘贴程序时忘 记修改标号,造成出现多个相同的标号,标号是不允许重复的。2.标点符号 以全角方式输入:汇编程序要求标点符号为半角方式,否则汇编失败。可以 在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易 犯而且不容易发觉的错误。3.数值#FFH 前遗漏0:根据要求应该在a~f 前加0,写成#0FFH4.字母O 和数字0 搞混:有时候这两个字看上去完全相同,要注意哦~~5.标号后边遗漏”:”6.标号使用了特殊字符:标号不能用指令 助记符、伪指令、特殊功能寄存器名和8051 在指令系统中用的“#”、“@”等,长 度以2~6 字符为宜,第一字母必须是英文字母。比如:T1、T2、A、B 这些字 符有特定的含义,不允许用于标号。7.AJMP 跳转超过2K 地址:AJMP 属于短跳转命令,有2K 地址范围的限制。8.超过地址范围:JB P3.2,EXIT 跳转超过-128~127 个地址范围。这个是最容易出现的错误!你有可能程序刚才还 能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把JB P3.2,EXIT 转换成JNB P3.2,LD01AJMP EXITLD01: AJMP EXIT……9.字母I 和数字1 混淆:冒失鬼的常见问题。10.创造发明不存在的汇编语言指令:在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不 认可。11.符号“:”“;”最好用半角书写。 二、程序出错: 1.寄存器重复调用:比如主程序中设定了R4=5,表示主程序循环执行5 次,

单片机编程时常见的十大问题解答

单片机编程时常见的十大问题解答 1.C 语言和汇编语言在单片机编程时各有哪些优缺点?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 C 语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。 对于目前普遍使用的RISC 架构的8bit MCU 来说,其内部ROM、RAM、STACK 等资源都有限,如果使用C 语言编写,一条C 语言指令编译后,会变成很多条机器码,很容易出现ROM 空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C 编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。 2.C 或汇编语言可以用于单片机,C++能吗?答:在单片机编程中,主要是汇编和C,没有用C++的。 3.搞单片机编程,一定要会C 吗?答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 对于目前普遍使用的RISC 架构的8bit MCU 来说,其内部ROM、RAM、STACK 等资源都有限,如果使用C 语言编写,一条C 语言指令编译后,会变成很多条机器码,很容易出现ROM 空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C 编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。 而C 语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言

汇编语言常见指令

?PTR?操作符:强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address) 设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后: LEA DX, X LEA BX, [BP] ; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWD CBW ;将AL寄存器内容符号位扩展到AH CWD ;将AX寄存器内容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT XLAT ;AL←DS: [BX+AL] 表格的首地址事先存放在内存逻辑地址DS: BX中, AL的内容是相对于表格的位移量, 把对应内存的内容取出放在AL寄存器。 7.逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)

天正给排水常见问题汇编

TWT常见问题汇编 为了大家能尽快掌握软件,节约重复提问所花费的时间,特将比较常见的问题整理总结,希望能对大家有所帮助,有错误的地方还请大家多多指正,共同讨论,不断完善这个汇编,谢谢!:) ---------------------------------------------- 夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。 好评:0差评:0精华度:0% ID:yxt119 等级:列兵 积分:45 经验:202 留言 [ 申请博客] [ 引用] 2005-07-14 11:47:56.0 第2 楼 汇编在那儿呢 [ 样本] 金州代表业绩[ 样本] 项目管理与咨询业务 ID:qie3519 等级:下士 积分:1152 经验:1491 留言 [ 申请博客] [ 引用] 2005-07-14 11:59:22.0 第3 楼 天正的软件工具栏、工具条怎么调不出来? 1.首先把请把原来装过的天正非正版通过:添加\删除程序全部卸载——再把安装目录下的天

正给排水文件夹删除——最后删除注册表中的twt文件夹(current_user和local_machine中),重新安装天正。 2.调出菜单的方法:Ctrl+F12 或命令行键入tmnload(?:\Tangent\TWT6\sys\tch.tmn文件加载)。 3.调出工具条的方法:工具-自定义-工具栏-TCH 前面打上对钩即可或初始设置中[启动天正快捷工具条]前面打上对钩即可。 4.如果始终不出现工具条和菜单,检查一下是否您改动过系统时间,软件过期也不会出现工具条和菜单(试用版)。 为何天正里画的墙体、管线和标注的文字用R14或CAD2000以上版本打开时看不到?(打印时不显示等类似问题)? 1.天正实体在cad中是看不到的,需要用到天正菜单中的【另存旧版】或【批转旧版】命令,保存成天正3的格式,就可以用14或其它版本打开了;如果是2004及以上版本需要先用CAD文件菜单中提供的【另存为】到02,再用另存旧版到天正3即可;如果是用天正打开而不显示,可能是本图已损坏,或可能使用过盗版在存盘时出现问题。注意:【另存旧版】与【另存为】有本质不同。前者分解转存天正实体,后者只转存一般CAD对象。 2.安装天正插件,不破坏实体而能看到图形,但不能编辑。 如何设置CAD图只能看不能改和编辑? 天正给排水6.5可以,不过要小心,自己的图要留备份。 未公开命令:图纸保护 T68_TProtect 用来图纸加密,一定要记住秘密,否则再也不能编辑了,注:被加密的图无法炸开。 解密只要双击图,然后输入秘密,再炸开,一切又恢复正常。 多文档显示的问题?(文档标签) HKEY_CURRENT_USER\Software\Tangent\TWT\6.0\Settings\DwgTabBar 设为1为显示,否则不显示。 在CAD中的Ctrl+c、Ctrl+p、Ctrl+z等都无效了,在工具—自定义—键盘中设置后可以使用,但是只要退出CAD,再进入的时候又不能用了。不知如何解决? 重新加载ACAD菜单。menu 选择*.mnu 为什么管径标注离管线很远或覆盖在管线上? 管径标注离管的距离由2个方面控制: (1)【初始设置】的“标注离管距离”控制,它的单位是MM (2)受当前比例控制。比如:当希望标注离管线2mm时,【初始设置】为2,当前比例是1:100时,则实际管线离标注距离为:200;这时字高不变,比例变为1:200,标注会盖在管线上,那么原离管距离就不符合此情况,需要调整到4mm才行。 注意:标注文字字高过大、离管距离过小→标注覆盖在管线上 标注文字字高过小、离管距离合适或过大→标注离管线过远 卫生器具的标住文字在圆中不居中的问题? 字体原因,用默认的“twt_win”windows字体就没事了。

汇编语言常见错误指令解决办法

(1) MOV DS, 2010H ;立即数不能传送到DS (2) PUSH AL ;栈操作,操作数类型必须为WORD类型 (3) MOV DX,[SP] ;SP寄存器不能做间址寄存器 (4) IN AL,0A00H ;I/O指令的直接寻址,地址只能为8位 (5) XCHG CL,CH ;正确 (6) SHR AX,3 ;移位超过一位时,应采用CL寄存器间址 (7) AAA CX ;非组合的BCD码加法调整AAA指令应为隐含操作数 (8) ADD [BP+DI] ;加法指令ADD,缺少源操作数 (9) OUT DX,CL ;I/O指令操作数只能用AX、AL提供,端口地址可以是8位的直接地址或用DX间址(10)CBW BH ;符号扩展指令为隐含操作数 (11)ADD 03ECH ;加法指令应为双操作数指令,立即数不能做目的操作数 (12)MOV BX, [SI+DI] ;源操作数形式错误,SI和DI不能同时做为间址寄存器 (13)MOV DI, [AX] ;AX不能做为间址寄存器 (14)OUT 258H, BX ;I/O指令格式错误,见(9)题的解释 (15)SHL AX, 3 ;移位指令,位移位数大于1时,应用CL来指明 (16)MOV 64H,AL ;立即数不能做为目的操作数 (17)ADD AL,6600H ;源、目的操作数的类型不一致 (18)MOV[BX],[SI];传送指令中,两个操作数不能同时为存储器操作数 (19)XCHG AX,8800H ;交换指令的操作数不能使用立即数 (20)MOV AX,[BX+DX];传送指令的源操作数,不能使用立即数 (21)LEA BX,1000H;有效地址传送指令的源操作数不能为立即数,必须是存储器操作数 (22)DIV 0010H ;正确 (23)LEA DX,DI ;同(21)题,源操作数不能为寄存器操作数 (24)MUL AX,200H ;乘法指令的目的操作数是隐含的,不能出现在指令中 (25)MOV AX, [BX+BP];传送指令中源操作数格式错,BX和BP不能同时为间址寄存器 (26)CMP [BX], [SI] ;比较指令的两个操作数不能同时为存储器操作数 (27)OUT DX, BX ;I/O指令中,源操作数只能使用AL或AX寄存器 (28)AND OFH,AL ;“与”指令中,目的操作数不能使用立即数 (29)SAL [BX],CX ;移位指令,移位位移不能用CX寄存器指明 (30)JMP FAR [BX+SI] ;转移指令中转移的目标地址表达方式错误 ;如果是段内间接转移,应为:JMP WORD PTR[BX+SI] ;如果是段间间接转移,应为:JMP DWORD PTR[BX+SI] (31)JNZ AAA;不相等转移指令中,符号地址(标识符)不能使用系统中的保留字 (32)JMP NEXT ;正确 (33)SBC AX, [DX] ;指令助记符错,源操作数表示方式错 (34)MOV CS,DS;段寄存器之间不能传送数据,CS寄存器也不能做为目的操作数 (35)ADD DS, AX ;加法指令中段寄存器不能做为操作数 (36)MOV AL,CX ;源、目的操作数的类型不一致,见(17)题 (37)INC [BX];没有指定存储器操作数类型 (38)MOV CL,A8H;源操作数为16进制的立即数,16进制数以字母开头时应在前面加“0”

汇编错误说明

MASM汇编错误信息说明 1、test.asm(54): error A2000: Block nesting error 说明:此错误信息通常见于一个段定义起始段名和末尾段名不一致。 修改:检查段定义,使段名前后保持一致。 2、test.asm(5): error A2005: Symbol is multidefined: DATA 说明:此错误信息提示DATA符号重复定义了。 修改:将其中一个符号DATA重新设置。 3、test.asm(7): error A2009: Symbol not defined: B9H 说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。 按规定以字母开始的十六进制数,应在其前面加上数字0以便汇编程序区分常数和符 号。另一种出错的可能原因是程序中使用的符号变量没有定义。 修改:以0B9H取代B9H;使用伪指令定义变量。 4、test.asm(11): error A2009: Symbol not defined: NO 说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划 线。 修改:将no-count改为no_count。 5、test.asm(28): error A2010: Syntax error 说明:此错误信息提示源程序中第28行的指令语句的语法与任何可识别的语法不匹配,出错。 修改:按照汇编指令的规定格式重新编写。 6、test.asm(2): error A2018: Operand must be register: DX 说明:指定的寄存器不是指令或伪指令所要求的。如:ASSUME DX:DATA 修改:查看汇编指令的规定格式。 7、test.asm(16): error A2028: Operator expected 说明:汇编程序需要的是操作符,得到的却是其它内容。test.asm中第16行MOV DX OFFSET BUF2,显然是两操作数中间缺少“,”符号导致出错。 修改:两操作数之间用“,”号分隔。 8、test.asm(47): error A2029: Division by 0 or overflow 说明:给出一个用零作除数的表达式或溢出。test.asm中第47行指令AND AL, 0010 0000数据溢出,这是因为,汇编程序默认数制为十进制,因而该指令中的源操作数超出范 围。 修改:若欲输入的是二进制数,在该数后加b,说明为二进制数。 9、test.asm(8): error A2048: Must be index or base register

常见的错别字汇编总结

常见的错别字汇编 (括号中是有可能写错的字,本文按正确用字的音序排列) ● A 11 唉(哀)声叹气白雪皑皑(蔼)和蔼(霭)可亲暮霭(蔼)茫茫安(按)装机器 光线昏暗(黯)暗(黯)地隐蔽黯(暗)然销魂佶ji1屈聱(赘)牙意义深奥(粤) 桀骜(獒)不驯 ● B 51 飞扬跋(拔)扈依山傍(徬)水傍(徬)人门户自暴(抱)自弃满怀抱(报)负 纵横捭(俾)阖甘拜(败)下风稗(裨)官野史可见一斑(般)班(搬)门弄斧 阪(板)上走丸永葆(保)青春背(被)水一战背(被)道而驰关怀备(倍)至 英雄辈(倍)出艰苦备(倍)尝并行不悖(背)比比(彼)皆是不准作弊(毖) 清除弊(毖)端兴利除弊(毖)营私舞弊(敝)惩前毖(必)后执行枪毙(弊) 就此毙(弊)命作法自毙(毖)俾(稗)昼作夜民生凋敝(蔽)敝(蔽)帚自珍 遮天蔽(避)日原物璧(壁)还中西合璧(壁)金碧(壁)

辉煌刚愎(腹)自用秉(禀)公执法 图穷匕(毕)见毕(必)竟这样针砭(贬)时弊言论辩(辨)驳唯物辩(辨)证 明辨(辩)是非应变(辨)能力彪(标)炳千古落英缤(宾)纷停放船舶(泊) 脉搏(膊)微弱赤膊(博)上阵对簿(薄)公堂部(布)署已定按部(步)就班大有裨(稗)益 令人恐怖(布) C 104 德才(材)兼备才(材)华横溢人尽其才(材)就地取材(才)大材(才)小用仓皇(惶) 才(材)疏学浅采(彩)集标本采(彩)用方法采(睬)访教授风采(彩)依然沧(苍)桑 神采(彩)奕奕很高文采(彩)无精打采(彩)齐声喝彩(采)惨(残)无人道 残(惨)酷无情兴高采(彩)烈丰富多彩(采)光彩(采)照人彩(采)霞满天 彩(采)声满场自惭(残)形秽酒中掺(渗)水恻(测)隐之心缠绵悱恻(测) 下乡视察(查)被迫拆(折)迁谗(馋)言勿听如愿以偿(尝)得不偿(尝)失 如期偿(尝)还偿(尝)还债务尝(偿)鼎一脔艰苦备

英文写作中常见错误汇编

英文常犯错误汇编 A.词性使用不当 1.Now is the golden time for us to attain a fair command of English. 2. I am very like sports. B.句子结构出错 1.I am a student lived in room 808. 2.It really makes me can’t study and rest in the dorm. C.标点和连接 1.My roommates is so troublesome, I can hardly put up with him any more. 2.Could you please check the Lost and Found Department . D.时态和语态 1.I would be very appreciated if you are so kind as to arrange for me a new room next term. 2.I am very grateful if you could furnish me with some useful information as followed. E.主谓语和并列成分的一致 结构不一致 1.I am a student who live in No. 3 Building . 2.If people always keep their family in mind, to visit their family members frequently, and to share feelings with their beloved, then they can maintain a close and harmonious relationship. 指代不清 1.If one has talents and self-confidence, we will likely succeed. 2.When a man always thinks of his own interest, they will be cut off from help. F.中式英语 1.Some small thieves always steal people’s money in supermarket. 2.The tree by the windows of my house has four men height. G.重复累赘 1.I could not bear my roommate who shares the room with me now. 2.I am a new freshman from China. H.非谓语动词(分词,不定式) 1.I think set up a camera in the residential area is the best way to ensure the security of the dwellers. 2.The long-lasting debate is tired. I.同义词、近义词及固定词组的搭配 1.The government will cost a large sum of money on the mass transit system. https://www.doczj.com/doc/6d16476048.html,st Sunday my flat was stolen. 3.As you know, life is compared with a voyage.

编写汇编语言常见错误分析

编写汇编语言常见错误分析: 一、MAS51汇编软件汇编失败原因分析: 单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误汇会造成汇编失败,常见的汇编错误如下: 1.标号重复常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。2.标点符号以全角方式输入MAS51程序要求标点符号为半角方式,否则汇编失败。可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。3.注释太长有时为了以后读懂程序,写了很长的注释,站长发现超过20个汉子时也会造成汇编失败,解决办法可以将太长的注释分成多个注释。4.数值#FFH 前遗漏0,根据要求应该在a~f前加0,写成#0FFH 5.字母O和数字0搞混有时候这两个字看上去完全相同,要注意哦~~6.标号后边遗漏":"7.标号使用了特殊字符,比如:T1、T2、A、B这些字符有特定的含义,不允许用于标号。8.AJMP跳转超过2K地址,AJMP属于短跳转命令,有2K地址范围的限制。9.JB P3.2,EXIT跳转超过-128~127个地址范围。这个是最容易出现的错误!你有可能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把JB P3.2,EXIT 转换成JNB P3.2,UUU AJMP EXIT UUU: 10.字母I和数字1混淆,冒失鬼的常见问题。11.创造发明不存在的汇编语言指令,在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不认可。 12.符号“:”“;”最好用半角书写。 二、程序出错: 1.寄存器重复调用比如主程序中设定了R4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到R4,使R4的值发生紊乱,造成程序无法正常执行。2.硬件不熟悉单片机一般采用下拉输出,往往端口输出0驱动外设工作,和常见的正逻辑相反,容易搞错。想想我自己,还不只一次犯这样的错误. 要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于以后读懂,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引用。 常见汇编语言指令解释: 1.Rn 表示R0~R7中的一个 2.#data 表示8位的数值00H~FFH 3.direct 表示8位的地址00H~FFH 4.@Ri 表示寄存器间接寻址只能是R0或者R1 5.@DPTR 表示数据指针间接寻址 6.bit 表示位地址 7.$ 表示当前地址 寄存器寻址MOV A,R1 将R1中的数值赋予A

(完整版)汇编语言中常用的伪指令档

汇编语言中常用的伪指令 分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言 汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。本文简单总结了常用的伪指令,如下。 1、EQU(Equate) 一般格式为:标号:EQU 操作数 指令功能为将操作数赋予标号,两边的值完全相等。使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。 AREA: EQU 1000H ;将标号AREA赋值为1000H 2、ORG(Origin) 一般格式为:ORG xxxxH(绝对地址或标号) XxxxH决定此语句后第一条指令(或数据)的地址。该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。 ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。 ADD R1,#1 MOV R2, #2 3、DB(Define Byte) 一般格式为:标号:DB 字节常数或字符或表达式 标号字段可有可无,字节常数或字符是指一个字节数据。此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。 ORG 8000H DATA1:DB 43H,09H,08H DATA2:DB 07H 伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。 注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。

汇编语言常见错误信息解释_2

汇编程序在对源程序的汇编过程中,若检查出某语句有语法错误,随时在屏幕上给出出错信息.如操作人员指定的列表文件名(即.LST),汇编程序亦将在列表文件中出错的下面给出出错信息,以便操作人员即时查找错误,给予更正.MASM5.0出错信息格式如下: 源程序文件行:WARNING/ERROR错误信息码:错误描述信息 其中,错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:'2'为严重错误,'4'为严肃警告,'5'为建议性警告,最后三位为错误编号. 错误编号 错误描述 Block nesting error 嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局 1 Extra characters on line 一语句行有多余字符,可能是语句中给出的参数太多 2 Internal error-Register already defined 这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request表与Microsoft公司联系 3 Unkown type specifer 未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等 4 Redefinition of symbol 符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出这个错误 5 Symbol is multidefined 符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误6 Phase error between passes 两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使用/D 任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误 7 Already had ELSE clause 已有ELSE语句.在一个条件块里使用多于一个的ELSE语句 8

汇编中常见的一些错误信息

汇编中常见的一些错误信息 ml.exe错误信息: FATAL 严重错误 cannot open file不能打开文件 I/O error closing fileI/O错误正在关闭文件 I/O error writing fileI/O错误正在写文件 I/O error reading file I/O错误正在读取文件 out of memory 缺少内存 assembler limit : macro parameter name table full 汇编限制:宏参数名表已满invalid command-line option 无效命令行参数 nesting level too deep 嵌套过深 unmatched macro nesting 不正确的宏嵌套 line too long 行太长 unmatched block nesting 不正确的区、段嵌套 directive must be in control block 指令必须在控制段 error count exceeds 100; stopping assembly 错误数超过100,停止汇编invalid numerical command-line argument 无效命令行参数 too many arguments 太多参数、定义、冲突 statement too complex 声明太复杂 Internal Assembler Error 内部汇编错误

missing source filename 找不到源文件名 COFF error writing file COFF错误,正在写文件 invalid debug and browser data; file exceeds line limit 不能排除故障和浏览数据;文件超过行限制 cannot find link.exe 找不到连接程序 cannot find cvpack.exe 找不到cvpack.exe SEVERE 严重的错误 memory operand not allowed in context 内存操作数无法载入上下文环境immediate operand not allowed 当前操作数无法载入 cannot have more than one ELSE clause per IF block IF段只能有一个ELSE从句extra characters after statement 附加的字符在声明之后 symbol type conflict 符号类型冲突 symbol redefinition 符号已经定义 undefined symbol 符号没有定义 non-benign record redefinition 没有利于记录的定义 syntax error 语法错误 syntax error in expression 表达式存在语法错误 invalid type expression 无效的类型表达式 distance invalid for word size of current segment 当前区、段的大小命令无效PROC, MACRO, or macro repeat directive must precede LOCAL PROC, MACRO, 或macro repeat指令必须在LOCAL之前 .MODEL must precede this directive .MODEL必须在指令之前

相关主题
文本预览
相关文档 最新文档