組譯工具(MASM)常見錯誤資訊

來源:互聯網
上載者:User

組譯工具在對來源程式的彙編過程中,若檢查出某語句有語法錯誤,隨時在螢幕上給出出錯資訊.如操作人員指定的列表檔案名稱(即.LST),組譯工具亦將在列表檔案中出錯的下面給出出錯資訊,以便操作人員即時尋找錯誤,給予更正.

MASM5.0出錯資訊格式如下:

來源程式檔案行:WARNING/ERROR錯誤資訊碼:錯誤描述資訊其中,錯誤描述資訊碼由五個字元組成,第一個是字母A

,表示組合語言程式出錯;接著有一個數字指明出錯類別:'2'為嚴重錯誤,'4'為嚴肅警告,'5'為建議性警告,最後三位為錯誤編號.                
錯誤編號         錯誤描述
0         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         Must be in conditional block        沒有在條件塊裡.通常是有ENDIF或ELSE語句,而無IF 語句
9         Symbol not defined                     符號未定義,在程式中引用了未定義的標識符
10       Syntax error                                語法錯誤.不是組譯工具所能識別的一個語句
11       Type illegal in context                 指定非法類型.例如對一個過程指定BYTE類型,而不是NEAR或FAR
12       Group name must be unique      組名應是唯一的.作為組名的符號作為其他符號使用
13       Must be declared during pass 1必須在第一遍掃描期間定義.在第一遍掃描期間,如一個符號在未定義前就引用,就會出現這種錯誤.
14       Illegal public declaration            一個標識符被非法的指定為PUBLIC類型
15       Symbol already defferent kind   重新定義一個符號為不同種類符號.例如一個段名重新被當作變數名定義使用
16       Reserved word used as symbol 把組合語言規定的保留字作標識符使用
17       Forward reference illegal           非法的向前引用.在第一遍掃描期間,引用一個未定義符號.                             
18       Operand must be register          運算元位置上應是寄存器,但出現了標識符
19       Wrong type of register               使用寄存器出錯
20       Operand must be segment or group   應該給出一個段名或組名.例如ASSUME語句中應為某段寄存器和指定一個段名或組名,而不應是別的標號或變數名等
21       Symbol has no segment            不知道標識符的段屬性
22       Operand must be type specifier 運算元應給出類型說明,如NEAR,FAR,BYTE等
23       Symbol alread defined locally    以被指定為內部的標識符,企圖在EXTRN語句中又定義外部標識
24       Segment paraneters are changed    段參數被改變.如同一標識符定義在不同段內
25       Improper align/combin type        段定義時的定位類型/組合類別型使用出錯
26       Reference to multidefined symbol    指令引用了多重定義的標識符
27       Operand expected                     需要一個運算元,只有操作符
28       Operator expected                     需要一個操作符,但只有運算元
29       Divdsion 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 field name     應為記錄名或記錄欄位名.在記錄名或記錄欄位名位置上出現另外的符號
35       Operand must be size             應指明運算元的長度(如BYTE,WORD等).通常使用PTR運算即可改正
36       Must be variable,label,or constant    應該是變數名,標號,或常數的位置上出現了其他資訊
37       Must be stucture field name     應該為結構欄位名.在結構欄位名位置上出現了另外的符號
38       Lefe operand must segment     運算元的左邊應該是段的資訊.如設DA1,DA2均是變數名,下列語句就是錯誤的:"MOV AX,DA1:DA2".DA1位置上應使用某段寄存器名
39       One operand must constant     運算元必須是常數.
40       Operand must be in same segment or one constant   "—"運算子用錯.例如"MOV AL,—VAR",其中VAR是變數名,應有一常數參加運算.又如兩個不同段的變數名相減出錯
41       Normal type operand expected     要求給出一個正常的運算元.
42       Constant expected         要求給出一個常數.
43       Operand must have segment     運算子SEG用錯.
44       Must be associated with data     在必須與資料區段有關的位置上出現了程式碼片段有關的項
45       Must be associated with code    在必須與程式碼片段有關的位置上出現了資料區段有關的項
46       Multiple base registers                同時使用了多個基底位址暫存器.如"MOV AX ,[SI][BP]"
47       Multiple index registers                同時使用了多個變址寄存器.如"MOV AX ,[SI][DI]"
48       Must be index or base register    指令僅要求使用基底位址暫存器或變址寄存器,而不能使用其他寄存器.
49       Illegal use of register                   非法使用寄存器出錯
50       Value is out of range                   數值太大,超過允許值.例如:"MOV AL ,100H"
51       Operand not in current CS ASSUME segment          運算元不在當前程式碼片段內.通常指轉移指令的目標地址不在當前CS段內
52       Improper operand type                運算元類型使用不當.例如:"MOV VAR1,VAR2".兩個運算元均為儲存空間運算元,不能彙編出目標代碼
53  Jump out of range by %ld byte    條件轉移指令跳轉範圍超過-128~ 127個位元組.出錯廠,資訊同時給出超過的位元組數
54        Index displacement must be constant    變址定址的位移量必須是常數
55        Illegal register value                   非法的寄存器值.目標代碼中表達寄存器的值超過7
56        Immediate mode illegal               不允許使用立即數定址.例如"MOV DS,CODE"其中CODE是段名,不能把段名作為立即數傳送給段寄存器DS
57        Illegal size for operand               使用運算元大小(位元組數)出錯.例如:使用雙字的儲存空間運算元
58        Byte register illegal                    要求用字寄存器的指令使用了位元組寄存器.如PUSH,POP指令的運算元寄存器必須是字寄存器
59        Illegal uer of CS register            指令中錯誤使用了段寄存器CS.如:"MOV CS,AX"CS不能做目的運算元
60   Must be accumulator register    要求用AX或AL的位置上使用可其他寄存器.如IN,OUT指令必須使用累加器AX或AL
61        Improper uer of segment register    不允許使用段寄存器的位置上使用了段寄存器.如"SHLDS,1"
62        Missing or unreachable CS       試圖跳轉去執行一個CS達不到的標號.通常是指缺少ASSUME語句中CS與程式碼片段相關聯
63        Operand combination illegal      雙運算元指令中兩個運算元組合出錯                                                             64        Near JMP/CALL to different CS  試圖用NEAR屬性的轉移指令跳轉到不在當前段的一個地址
65        Label cannot have segment override      段首碼使用出錯                                                                                66        Must have instuction agter prefix     重複首碼REP,REPE,REPNE後面必須有指令
67        Cannot override ES for destination      串操作指令中目的運算元不能用其他段寄存器替代ES                        68        Cannot address with srgment 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 id already external           在模組內試圖定義的符號,它已在外部符號偽指令中說明
74        DUP nesting too deep                  運算元DUP的嵌套太深
75        Illegak use of undefinde operand( )   不定操作符" "使用不當.例如"DB 10H DUP( 2)"                                       76        Too many valer for struc or record initialization     在定義結構變數或記錄變數時,初始值太多
77        Angle brackets requored around initialized list       定義結構體變數時,初始值未用角括弧()括起來
78        Directive illegal structure         在結構體定義中的偽指令使用不當.結構定義中的偽指令語句僅二種:分號(;)開始的備註陳述式和用DB,DW等資料定義偽指令語句
79        Override with DUP illegal        在結構變數初始值表中使用DUP操作符出錯
80        Field cannot be overridden     在定義結構變數語句中試圖對一個不允許修改的欄位設定初值
81        Override id of wrong type        在定義結構變數語句中設定初值時類型出錯
82        Circular chain of EQU aliases  用等值語句定義的符號名,最後又返回指向它自己.如:A EQU B   B EQU A
83        Cannot emulate cooprocessor opcode 模擬器不能支援的8087副處理器作業碼
84        End of file,not END directive    來源程式檔案無END檔案
85        Data emitted with no segment 語句資料沒有在段內 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.