8086 彙編程序報錯信息解釋

轉載於彙編錯誤信息說明的文檔(百度上一大堆)

筆者編寫和調試彙編程序時經常遇到這樣那樣的問題,此文檔可以給調試彙編程序提供便利。

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行的指令少了操作數,即單操作數指令缺少操作數或雙操作數指令缺少一個操作數。
修改:給指令加上適當的操作數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章