汇编常遇到的错误

00   Block nesting error嵌套出错。嵌套的过程、段、结构、宏指令或重复块等非正常结束。例如:在嵌套

      语句中有外层的结束语句,而无内层的结束语句

01 Extra characters on line一语句行有多余字符,可能是语句中给出的参数太多

02 Internal error-Register already defined这是一个内部错误. 若出现该错误, 请记下发生的条件,

     并使用ProductAssistance Requst表与Microsoft公司联系.

03 Unknown type specifier表识符指定类型出错.例如类型字符拚错

04 Redefinition of symbol符号重定义.同一个标识符在两个位置上定义.在汇编第一遍扫描时, 在这个标

     识符的第二个定义位置上给出这个错误.

05 Symbol is multidefined符号重定义.同一个标识符在两个位置上定义.在汇编第二遍扫描时, 每当遇到

     这个标识符都给出这个错误.

06 Phase error betwween passes 两次扫描不同.一个标号在二次扫描时得到不同的地址值,就会给出这种

     错误.例:在启动MASM时使用/D任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误.

07 Already had ELSEclause已有ELSE语句.在一个条件块里使用多于一个的ELSE语句.

08 Must be in conditional block没有在条件块里.通常是有ENDIF或ELSE语句,而无IF语句

09 Synbol not defined符号未定义.在程序中引用了未定义的标识符.

10 Syntax error语法错误.不是汇编所能识别的一个语句.

11 Type illegal in context指定非法类型.例如:指定过程TYPE类型,而不是NEAR或FAR.

12 Group name must be unique组名应是唯一的.

13 Must be declared during pass 1必须在第一遍扫描期间定义.

14 Illegal public declaration一个标识符被非法的指定为PUBLIC类型.

15 Symmol already different kind重新定义一个符号为不同种类符号.

     例如:一个段名重新当作变量名定义使用.

16 Reserved word used as symbol把汇编语言规定的保留字作标识符使用.

17 Forward reference illegal非法的前向引用.

18 Operand musr be register操作数位置上应是寄存器,但出现标识符.

19 Wrong type of register使用的寄存器类型出错.

20 Operand must be segment or group应该给出一个段名或组名(grup).

21 Symbol has no segment不知道标识符的段属性.

22 Operand must be type specifier操作数应出类型说明符

23 Symbol already defined locally已被指定为内部(Local)的标识符,企图在Extrn语句中又定义外部标

    识符.

24 Segment parameters are changed段参数被改变.

25 Improper align/conbine type段定义时的定位类型/组合类型使用出错.

26 Refrence to multine symbol指令引用了多重定义的标识符.

27 Operand expected需要一个操作数,但只有操作符,如:"MOV BX,OFFSET".

28 Operator expected需要一个操作符,但只有操作数

29 Division by 0 or overflow除以0或溢出出错.

30 Negative shift count运算符SHL或SHR的移位表达式值为负数.

31 Operand type must match操作数类型不匹配.

32 Illegal use of external外部符号使用出错.

33 Must be record field name应为记录字段名.

34 Must be record name or record field name应为记录字段名或记录名,在记录字段名或记录名位置上

     出现另外的符号.

35 Operand must have size应指明操作数的长度(如BYTE,WORD).通常使用PTR运算符可改正错误.

36 Must be variable,lableor constant应该是变量名,标号,常数的位置上出现了其他信息.

37 Must be structure field name应为结构字段名.在结构字段名位置上出现另外的符号.

38 Left operand must be segment操作数的左边应是段的信息. 

39 One operand must be constant操作数必须是常数. 

40 Operand must be in same segment or one constant"-"运算符用错.

41 Normal type operand expected要求给出一个正常的操作数. 

42 Constant expected要求给出一个常数. 

43 Operand must have segment运算符SEG用错. 

44 Must be associated with data在必须与数据段有关的位置上出现了代码段有关的项.例如:MOV

    AX,LENGTH CS:VAR".其中VAR是数据段中的变量名. 

45 Must be associated with code在必须与代码段有关的位置上出现了数据段有关的项.

46 Multiple base registers同时使用了多个基址寄存器. 

47 Multiple index registers同时使用了多个变址寄存器. 

48 Must be index orbase register指令仅要求使用基址或变址寄存器,而不能用其他寄存器.例如:"MOV

    AX,[SI+CX]" 

49 Illegal use of register非法使用寄存器出错

50 Value is out of range数值太大.

51 Operand not in current CS ASSUME segment操作数不在当前代码段内.

52 Improper operand type操作数类型使用不当.

53 Jump out of range by %ld byte(s) 条件转移指令跳转范围超过-128+127个字节.

54 Index displacement must be constant变址寻址的位移量必须是常数.

55 Illegal register value非法寄存器的值.目标代码中表达寄存的值超过’7’.

56 Immediate mode illegal不合法的立即数寻址方式.

57 Illegal size for operand使用的操作数太小(字节数)出错.

58 Byte register illegal要求用字寄存器而使用了字节寄存器.

59 Illegal use of CS register指令中错误的使用段寄存器.

60 Must be accumulator register要求用AX或AL的位置上出现了其他寄存器.

61 Improper use of segment register不允许用段寄存器的位置上使用了段寄存器.

62 Missing or unrechable CS试图跳转去执行一个CS达不到的标号.

63 Operand combination illegal双操作数指令指令中二个操作数组合出错.

64 Near JMP/CALL to different cs试图用NEAR属性的转移指令跳转到不在当前段的一个地址. 

65 Label cannot have segment override段前缀使用出错. 

66 Must have instruction after prefix在重复前缀REG,REPE,REPNE的后面必须有指令. 

67 Cannot override ES for destination串操作指令中目的操作数不能用其他段寄存器替代ES. 

68 Cannot address with segment register指令中寻找一个操作数,但ASSUME语句中未指明哪个段寄存器

    与操作数所在段有关联

69 Must be in segment block指令语句没有在段内. 

70 Cannot use EVEN or ALIGN with byte alignment在段定义的定位类型中选用BYTE,这时不能使用EVEN

    或ALIGN伪指令.

71 Forward needs override or FAR转移指令的目标没有在源程序中说明为FAR属性,可用PTR指定.

72 Illegal value for DUP count操作符DUP前的重复次数是非法的(例如负数)或未定义.

73 Symbol is already external在模块内试图定义的符号,它已在外部符号伪指令中说明.

74 DUP nesting too deep操作符DUP嵌套太深.

75 Illegal use of undefined operand(?)不定操作符’?’使用不当.

76 Too may value for structure or record initialization在定义结构变量或记录时,初始值太多.

77 Angle brackets required around initialized list定义结构变量时,初始值未用尖括号"<>"括起来.

78 Directie illegal in structure在结构定义中的语句伪指令使用不当.

79 Override with DUP illegal在结构变量初始值表中使用DUP操作符出错.

80 Field cannot be overridden在定义结构变量语句中试图对一个不允许修改的字段设置初值.

81 Override is of wrong type在定义结构变量语句中设置初值时类型出错

82 Circular chain of EQU aliases用等值语句定义的符号名,最后又指向它自己.

83 Cannot emulate coprocessor opcode访真器不能支持的8087协处理器操作码.

84 End of file,no END directive源程序无END语句.

85 Data emitted with no segment数据语句没有在段内


### 回答1: 该错误提示意为“需要寄存器操作数”,通出现在汇编语言中,表示在某个指令中需要使用寄存器作为操作数,但是却没有提供寄存器,或者提供的操作数不是寄存器。需要检查指令中的操作数是否正确,并且是否使用了正确的寄存器。 ### 回答2: Register operand expected 这个错误信息通汇编语言中出现,表示程序在读取指令或者数据时期望得到一个寄存器地址,但是实际上读取到的是一个非法的操作数。这个错误信息可能会造成程序不能正确的执行下去。 指令是一条计算机的基本指令,每一条指令通包含操作码和操作数两部分,其中操作数描述了该指令所要执行的操作对象。操作数的类型大致可以分为三类:寄存器数据、内存数据和立即数。寄存器是在计算机的CPU指令集中定义的存储器单元,通由CPU直接访问,用于临时存储数据。在处理器中,寄存器非快速,它可以直接访问,而不需要去读写慢速的内存。 出现 Register operand expected 的错误是由于程序在处理指令时,指令中制定了操作数要使用寄存器,但程序从内存中读取的数据不是有效的注册地址或者是无效的寄存器组合。一些可能导致这种错误的原因包括: 1. 没有正确初始化所需的寄存器,导致寄存器未被正确映射或者分配给指令。 2. 在指令中使用了无效或不支持的操作数,包括寄存器内存地址或者没有被定义的寄存器标识。 3. 可能是指令码解码错误或者是计算机硬件中的一些故障导致。 为了解决这个问题,程序员需要逐一检查程序中指令和操作数,确保指令正确地使用了寄存器作为操作数,并且确保寄存器已被正确初始化。同时还需要检查操作数是否合法且支持该操作,否则需要根据需要调整或修复程序。通在编写程序时,尽量使用汇编语言提供的指令和寄存器,确保指令和操作数之间匹配,以避免 Register operand expected 错误发生。 ### 回答3: 当我们在编码中遇到“register operand expected”错误时,这意味着编译器期望代码中的某个位置有一个寄存器操作数,但实际上该位置没有给出一个寄存器操作数。 举个例子,让我们考虑以下的代码行: mov ax, [bx+si] 在这行代码中,我们使用了 mov 指令来将一个内存中的值传送到 ax 寄存器中。在方括号中的 bx+si 表示“以 bx 和 si 寄存器的和来寻址内存位置”。在传统的8086汇编中,这是使用基址寄存器加上索引寄存器的组合来实现的。 我们可能会遇到“register operand expected”错误的情况是,当我们想要使用寄存器操作数进行算术操作时,却意外地将字面量放在了下面的寄存器操作数的位置。例如: add ax, 10 在这行代码中,我们意图将 ax 寄存器中的值加上 10。但编译器却无法理解将值10传递给ax,因为它需要一个寄存器操作数来存储这个结果。正确的代码应该是: mov bx, 10 add ax, bx 这样,我们将值10保存在寄存器bx中,并将其传送到ax中供加法使用。 总之,“register operand expected”错误提示意味着我们需要提供一个寄存器操作数,而不是一个字面量或者其他非寄存器值。在使用指令时,我们需要始终牢记这个原则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值