汇编语言 masm常见报错原因
補充
1、Operand must have size
說明:這條傳送指令,編譯軟件不能確定是8位數的,還是16位數的。
修改:
mov BYTE PTR [si+08h],'$' ;說明是字節傳送。
另外,還有:WORD PTR。說明是字傳送。
原文
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行的指令少了操作數,即單操作數指令缺少操作數或雙操作數指令缺少一個操作數。
修改:給指令加上適當的操作數。
總結
以上是生活随笔為你收集整理的汇编语言 masm常见报错原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构与算法】中缀表达式 - 后缀表
- 下一篇: 汇编语言 修改显存 在屏幕上显示图案