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...