dosbox生成可執行檔案時的錯誤列表

2021-08-14 09:12:30 字數 3991 閱讀 6479

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行的指令少了運算元,即單運算元指令缺少運算元或雙運算元指令缺少乙個運算元。

修改:給指令加上適當的運算元。

生成可執行檔案過程

c語言編譯全過程 編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj...

pycharm生成可執行檔案

1.pycharm開啟terminal對話方塊 view tool windows terminal 2.安裝pyinstaller pip3 install pyinstaller 3.將py檔案轉換為相應作業系統可執行檔案 pyinstaller f onefile py 4.開啟py檔案所在的...

Python 生成可執行檔案

準備 開發環境python3 首先需要安裝第三方庫 pyinstaller pip直接安裝庫如果遇到各種問題,戳這裡 接下來 從shell中進入cmd視窗 import os os.system cmd 在cmd視窗中輸入 pyinstaller c f main.py 注 main.py是main...