匯編語言程序設計實驗指導書_第1頁
匯編語言程序設計實驗指導書_第2頁
匯編語言程序設計實驗指導書_第3頁
匯編語言程序設計實驗指導書_第4頁
匯編語言程序設計實驗指導書_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、8086匯編語言程序設計實驗指導書計算機科學與技術學院計算機科學與技術系二一一年九月 目 錄第一部分 實驗方法- 1 -1.1 實驗目的與要求- 1 -1.2 實驗方法- 2 -第二部分 實驗內容- 7 -實驗1 簡單匯編語言程序設計- 7 -實驗2 分支循環(huán)及程序設計- 8 -實驗3 子程序程序設計- 9 -實驗4 綜合程序設計- 10 -附 錄- 11 -附錄1 常用DOS命令- 11 -附錄2 DEBUG主要命令- 13 -附錄3 匯編程序出錯信息- 16 -附錄4 常用字符ASCII碼值- 20 -附錄5 80888086指令系統(tǒng)- 21 -附錄6 IBM PCAT中斷功能表- 25

2、-附錄7 常用DOS功能調用(INT 21H)- 27 -附錄8 BIOS功能調用- 30 -第一部分 實驗方法1.1 實驗目的與要求一、實驗目的學習匯編語言程序設計的基本方法和技能,進一步加深對8086匯編語言程序設計的理解,熟練掌握用匯編語言設計、編寫、調試和運行程序的方法,為后繼課程接口技術打下堅實的程序設計基礎。二、實驗要求1. 上機前要做好充分的準備,包括程序框圖、源程序清單、調試步驟、測試方法、對運行結果的分析等。2. 上機時要遵守實驗室的規(guī)章制度,愛護實驗設備。要熟悉與實驗有關的系統(tǒng)軟件(如編輯程序、匯編程序、連接程序和調試程序等)的使用方法及實驗儀器。在程序的調試過程中,有意識

3、地學習及掌握DEBUG程序的各種操作命令,以便掌握程序的調試方法及技巧。為了更好地進行上機管理,要求用硬盤儲存程序,并建立和使用子目錄,以避免文件被別人刪除。有關目錄及文件操作的DOS命令見附錄1。此外,為了便于統(tǒng)一管理硬盤中的文件,要求實驗者按以下形式命名實驗文件:字母學號_序號.ASM其中,字母取az中的一個字母,按實驗項目序號從a至z排列,序號是指每次實驗中所編寫的程序的序號。例如:學號為學生的第二次實驗中的第1個程序所對應的文件名應為b_1.ASM。3每個實驗完成后,應寫出實驗報告。實驗報告的要求如下: 設計說明:用來說明設計的內容。它包括:程序名、功能、原理及算法說明、程序及數據結構

4、、主要符號名的說明等。 調試說明:便于學生總結經驗提高編程及調試能力。它包括:調試情況,如上機時遇到的問題及解決辦法,觀察到的現象及其分析,對程序設計技巧的總結及分析等;程序的輸出結果及對結果的分析;實驗的心得體會等。 程序框圖。 程序清單。1.2 實驗方法一、用編輯程序建立ASM文件用文字處理軟件編輯源程序。常用編輯軟件有:EDIT.EXE、記事本、WORD等。無論采用何種編輯工具,生成的文件必須是純文本文件,且文件擴展名為.ASM。下列程序完成兩個字節(jié)數相加,并將和存于SUM變量中。用編輯軟件建立以ABC.ASM為文件名的源程序文件。 DATA SEGMENT BUF DB 47H,6AH

5、;數據定義 SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX;段寄存器定義 MOV AL,BUF;數據處理部分從此開始,直到返回DOS ADD AL,BUF+1 MOV SUM,AL MOV AH,4CH;返回DOS INT 21H CODE ENDS END START二、用匯編程序匯編源文件,生成目標文件(.OBJ)當源程序建立以后,用匯編程序MASM對ABC.ASM源程序文件進行匯編,操作步驟如下:(以下劃線部分為用戶鍵盤輸入,“”代表回車,未劃線部分為屏幕顯示,小字部分為

6、說明)。C:MASM MASM ABC.ASM Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Crop 1981-1985,1987,All rights reservedObject filename ABC.OBJ 輸入目標文件名,若采用括號 中的名字,按Source listingNUL.LST 若需要列表文件,輸入文件名,按;如果不需要,直接按Cross-referenceNUL.CRF 若需要交叉索引文件,輸入文件名;如不需要,直接按 49758 + Bytes symbol space free0

7、 Warning Errors0 Severe Errors回答上述問題后,匯編程序就對源程序進行匯編。若匯編中發(fā)現源程序有語法錯誤,則列出錯誤語句所在行、錯誤代碼及錯誤性質說明。錯誤分為:警告錯誤(Warning Errors)和嚴重錯誤(Severe Errors)兩種。警告錯誤指匯編程序認為的一般性錯誤;嚴重錯誤指匯編程序認為無法進行正確匯編的錯誤,給出其錯誤個數,錯誤性質。這時,就要對錯誤進行分析,找出問題和原因,然后再調用編輯程序對源程序進行修改。修改后重新匯編,直到無錯誤為止。除了用上述方法分步回答問題外,還可以用命令行的形式按順序對相應提示予以回答,其格式是:MASM 源文件名,

8、目標文件名,列表文件名,交叉引用文件名;其中文件名都不必給出擴展名,匯編程序會按照缺省情況使用或產生。若只想對部分提示給出回答,則在相應位置用逗號隔開,若不想對剩余部分作答,則用分號結束。例如以下命令經匯編后在當前目錄下產生ABC.OBJ文件,不產生LST文件和CRF文件。C:MASM MASM ABC; 三、用連接程序LINK目標文件,生成執(zhí)行文件EXEC:MASM LINK ABC Microsoft (R) 8086 Object Linker Version 5.00Copyright (C) Microsoft Crop 1981-1985,1987,All rights reser

9、vedRun File ABC.EXE 輸入可執(zhí)行文件名,若采用括號 中的名字,按List FileNUL.MAP 若需要映象文件,輸入文件名,按;如果不需要,按LibrariesNUL.LIB 若需要庫文件,輸入文件名,按;如果不需要庫文件,按Warning: no stack segment上述給出的警告信息,表示用戶程序沒有定義堆棧段。該警告不影響可執(zhí)行程序的生成和正常運行,因為運行時會自動使用系統(tǒng)提供的缺省堆棧?;卮鹕鲜鰡栴}后,連接程序開始連接,若連接過程中有錯,則顯示錯誤信息。此時,按錯誤提示,修改源程序,然后,回到第二步。直至匯編無錯誤,連接無錯誤(錯誤No Stack Segme

10、nt 除外),在當前目錄下產生可執(zhí)行文件(.EXE),進入第四步。同樣也可以用命令行的形式按順序對相應提示予以回答,其格式是:LINK 目標文件名,可執(zhí)行文件名,內存映象文件名,庫文件名;其中不必給出擴展名,連接程序會按照缺省情況使用。若只想對部分提示給出回答,則在相應位置用逗號隔開,若不想對剩余部分作答,則用分號結束。例如以下命令行對ABC.OBJ文件連接后在當前目錄下產生ABC.EXE文件,其余文件均不需要。C:MASM LINK ABC; 從6.0版以后,Microsoft公司把MASM和LINK的功能由一個ML.EXE程序完成,只需一個命令就可以把源程序匯編并連接生成.EXE文件。而不

11、再需要分兩步操作。ML.EXE常用格式為:ML /F1/Fm/Fr/c 源文件其中,源文件名的擴展名(.asm)不能省,中的F必須大寫,l,m,r,c必須小寫,各可選項含義如下:/F1:產生.lst列表文件,缺省時不產生。/Fm:產生.map內存映象文件,缺省時不產生。/Fr:產生.sbr交叉參考文件,缺省時不產生。/c:只產生,obj目標文件,不產生.exe可執(zhí)行文件。缺省時只產生.exe文件。例:ML /Fl ABC.ASM以上命令會對已存在的ABC.ASM文件匯編且連接,并在當前目錄下生成一個列表文件ABC.LST和一個可執(zhí)行文件ABC.EXE.四、運行程序設連接生成的執(zhí)行文件為ABC.

12、EXE,運行程序只需在DOS提示符下鍵入文件名即可,如:C:MASMABC 若程序能夠運行但不能得到預期結果,則需要靜態(tài)或動態(tài)查錯。靜態(tài)查錯即檢查源程序,并對源程序進行修改,然后再匯編、連接、運行。如果靜態(tài)檢查無法發(fā)現錯誤,則需動態(tài)查錯。五、程序調試及結果查看這里使用DEBUG程序進行調試,DEBUG是一種使用廣泛的強有力的匯編語言程序或二進制文件的調試工具。設ABC.ASM經匯編及連接后,產生ABC.EXE文件,對它的調試操作如下:1把程序裝入內存,并顯示程序清單C:MASMDEBUG ABC.EXE -此時,DEBUG已將執(zhí)行程序裝入內存,可鍵入DEBUG的有關命令調試程序。-U 用反匯編

13、命令U列出程序清單13E3:0000 B8E213 MOV AX,13E213E3:0003 8ED8 MOV DS,AX13E3:0005 A00000 MOV AL,000013E3:0008 ADD AL,000113E3:000C A20200 MOV 0002,AL13E3:000F B44C MOV AH,4CH13E3:0011 CD21 INT 212查看數據段內容或查看寄存器內容-D DS:0000 查看數據段內容13E2:0000 47 6A 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Gj.可見0000、0001單元內容為數據段定義

14、的內容,分別為47H、6AH。DEBUG狀態(tài)下,缺省數制為十六進制數。-R 查看寄存器內容AX=13E2 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13D2 ES=13D2 SS=13E2 CS=13E3 IP=0003 NV UP EI PL NZ NA PO NC若查看指定寄存器內容,在R命令后跟上寄存器名,例:-R AX 查看寄存器AX的內容AX 13E2:若需修改AX的值,則鍵入新值;若無需更改,按回車。3連續(xù)運行程序,查看結果-G 或 -G =0 0013 運行程序,0為運行起始地址,0013為斷點地址-D D

15、S:0000 查看內存結果13E2:0000 47 6A B1 00 00 00 00 00 00 00 00 00 00 00 00 00 Gj.可見0002單元中內容已變?yōu)?000和0001兩單元內容之和。4如果連續(xù)得不到正確結果,需分步跟蹤運行-T=0000 0000這所需要運行指令的地址AX=13E2 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13D2 ES=13D2 SS=13E2 CS=13E3 IP=0003 NV UP EI PL NZ NA PO NC13E3:0003 8ED8 MOV DS,AX顯示

16、單步執(zhí)行后寄存器和標志狀態(tài)之后,停在下一條指令開始處。-T 順序運行下一條指令5退出DEBUG-Q第二部分 實驗內容實驗1 簡單匯編語言程序設計一、實驗目的與要求1熟悉匯編語言運行、調試環(huán)境及方法。2掌握簡單匯編語言程序的設計方法。3熟悉調試工具DEBUG,并運用DEBUG工具調試程序。二、實驗內容根據下列要求,編寫匯編源程序,匯編連接匯編源程序,并利用DEBUG工具調試程序,驗證程序的正確性。1. 若X、Y、R、W是存放8位帶符號數字節(jié)單元的地址,Z是16位字單元的地址。試編寫匯編程序,完成。2.試編寫一個程序,測試某數是否是奇數。如該數是奇數,則把DL的第0位置1,否則將該位置0。三、實驗

17、報告要求1.程序算法流程圖。2.源程序清單。3.程序運行結果。4.調試過程中遇到的問題和解決的方法。實驗2 分支及循環(huán)程序設計一、實驗目的與要求1熟悉匯編語言運行、調試環(huán)境及方法。2掌握分支程序和循環(huán)程序的設計方法。3熟悉調試工具DEBUG,并運用DEBUG工具調試程序。二、實驗內容根據下列要求,編寫匯編源程序,匯編連接匯編源程序,并利用DEBUG工具調試程序,驗證程序的正確性。1鍵入一數,判斷該數是否在3 X 15范圍內,是輸出標志0,不是輸出。 2試編程統(tǒng)計數據區(qū)中正數、零和負數的個數。3. 編程求無符號數字節(jié)序列中最大值和最小值。4.編寫匯編程序,統(tǒng)計某存儲區(qū)若干個數據中英文字母的個數,

18、并將結果在屏幕上顯示。6.從鍵盤任意輸入一組字符數據,請編寫匯編程序將該組數據加密后在屏幕上顯示。參考加密方法是:每個數乘以2。(說明:本題的加密方法,同學們可以自己擬定)三、實驗報告要求1.程序算法流程圖。2.源程序清單。3.程序運行結果。4.調試過程中遇到的問題和解決的方法。 實驗3 子程序程序設計一、實驗目的與要求1熟悉匯編語言運行、調試環(huán)境及方法。2掌握子程序的設計方法。3熟悉調試工具DEBUG,并運用DEBUG工具調試程序。二、實驗內容根據下列要求,編寫匯編源程序,并利用DEBUG工具調試程序,驗證程序的正確性。1.編程以十進制形式和十六進制形式顯示AX的內容,并把兩個顯示功能分別封

19、裝成子程序dispDEC和dispHEX。2.設在以EXAMSCORE為首地址的數據緩沖區(qū)依次存放某班10名同學5門功課的成績,現要統(tǒng)計各位同學的總分,并將總分放在該學生單科成績后的單元,并調用第1個程序封裝好的子程序,以十進制方式顯示統(tǒng)計情況,顯示格式自行設計。請編程完成此功能。數據緩沖區(qū)參考數據定義如下:EXAMSCORE DB 01;學號 DB 89,76,54,77,99 ;單科成績 DW ? ;該學生的總分DB 02;學號 DB 79,88,64,97,92 ;單科成績 DW ? ;該學生的總分三、實驗報告要求1.程序算法流程圖。2.源程序清單。3.程序運行結果。4.調試過程中遇到的

20、問題和解決的方法。實驗4 綜合程序設計一、實驗目的與要求1熟悉匯編語言運行、調試環(huán)境及方法。2掌握匯編語言程序的設計方法。3熟悉調試工具DEBUG,并運用DEBUG工具調試程序。二、實驗內容根據下列要求,編寫匯編源程序,并利用DEBUG工具調試程序,驗證程序的正確性。1. 編寫匯編程序接收用戶從鍵盤鍵入的月份數,在終端上顯示該月的英文縮寫名。當用戶按下ESC鍵時,程序退出,返回DOS。參考程序執(zhí)行過程如下:month?5MAYmonth?9SEPmonth?2. 按15行16列的表格形式顯示ASCII碼為10HFFH的所有字符。每16個字符為一行,每行中的相鄰兩個字符之間用空白符(ASCII碼

21、為0)分隔。3.在第2題程序的基礎上進行修改。將顯示表格的行、列數由固定的15行16列改為由用戶從鍵盤輸入。然后,按用戶輸入的行列值進行顯示。4.編寫匯編程序將內存數據區(qū)保存的若干個帶符號16位數據按從大到小的順序排列后,以十進制真值的形式在屏幕上顯示。三、實驗報告要求1.程序算法流程圖。2.源程序清單。3.程序運行結果。4.調試過程中遇到的問題和解決的方法。附 錄附錄1 常用DOS命令1 顯示目錄命令DIR該命令用來列出指定盤、指定目錄或指定文件的目錄。命令格式有一下三種:DIR /P/WDIR /P/WDIR /P/W 其中/P表示分頁顯示;/W表示緊縮格式顯示,即一行顯示多個文件。 中內

22、容為任選項;中內容必須輸入。文件路徑名為:目錄路徑名為: 文件名中可用通配符“*”和“?”,“*”代表任意一串字符,“?”代表任意一個字符。例如:若要顯示D盤MASM目錄下的所有擴展名為ASM文件的DOS命令為:DIR D:MASM*.ASM2 文件改名命令REN 該命令用來更改文件名,格式為: REN 舊文件路徑名定義同第一點中的文件路徑名,文件名中可用通配符“*”和“?”。例如:若要將D盤MASM目錄下的test.lst文件改名為test.asm,其DOS命令為: REN D:MASMTEST.LST TEST.ASM3 文件復制命令COPY該命令將一個或多個文件復制成副本,格式為: CO

23、PY 文件路徑名定義同第一點中的文件路徑名,文件名中可用通配符“*”和“?”。例如:若要將D盤MASM目錄下的所有擴展名為ASM的文件復制到C盤的EXAMPLE目錄下,其DOS命令為: COPY D:MASM*.ASM C:EXAMPLE若要將當前目錄下的TEST.ASM文件復制成TEST1.ASM,其DOS命令為: COPY TEST.ASM TEST1.ASM4 文件刪除命令DEL該命令將一個或多個文件刪除,格式為: DEL 文件路徑名定義同第一點中的文件路徑名,文件名中可用通配符“*”和“?”。例如:若要將D盤MASM目錄下的所有擴展名為ASM的文件刪除,其DOS命令為:DEL D:MA

24、SM*.ASM5 建立子目錄命令MD該命令用于建立子目錄,格式為:MD 目錄路徑名定義同第一點中的目錄路徑名。例如: MD SUBDIR1 MD SUBDIR1SUBDIR2 MD USER1其中第一條命令在當前目錄下建一個名為SUBDIR1的子目錄;第二條命令在子目錄SUBDIR1中建立SUBDIR2子目錄;第三條命令表示在根目錄中建立USER1子目錄。6 刪除子目錄命令RD該命令用于刪除一個空目錄,但不允許刪除根目錄和當前目錄,格式為: RD 目錄路徑名定義同第一點中的目錄路徑名。例如:若要刪除根目錄下的USER1子目錄,其DOS命令為: RD USER1在刪除USER1子目錄前,子目錄U

25、SER1必須為空,且USER1不是當前目錄。7 改變當前目錄命令CD該命令用于顯示或改變當前目錄,格式為: CD 目錄路徑名定義同第一點中的目錄路徑名。例如:CD USER1 CD CD . CD其中第一條命令是將根目錄下的USER1子目錄設為當前目錄;第二條命令是將根目錄設為當前目錄;第三條命令是將當前目錄的上一級目錄設為當前目錄(即退回到上一級目錄)。第四條命令為顯示當前目錄。8 設置可執(zhí)行文件的搜索路徑命令PATH用戶在當前目錄中工作時,時常會運行其它目錄下的可執(zhí)行文件(即擴展名為EXE或COM的文件),PATH命令可滿足這一要求。PATH命令用來指出,假如在當前目錄中找不到可執(zhí)行文件時

26、應進一步去查找的目錄。格式為: PATH ;若命令不帶參數,將顯示當前設置的搜索路徑。例如將搜索路徑設置為C盤的DOS目錄以及D盤的MASM目錄的DOS命令為:PATH C:DOS;D:MASM附錄2 DEBUG主要命令DEBUG是為匯編語言設計的一種調試工具,它通過單步、設置斷點等方式為匯編語言程序員提供了非常有效的調試手段。1 DEBUG程序的調用在DOS的提示符下,可鍵入命令:C:DEBUG d:path文件名參數1參數2其中文件名是被調試文件的名字,它必須是可執(zhí)行文件(EXE),兩個參數是運行被調試文件所需要的命令參數,在DEBUG程序調入后,出現提示符“”,此時,可鍵入所需的DEBU

27、G命令。2 DEBUG的主要命令 顯示內存單元內容的命令D,格式為: -D 地址 或 -D 范圍例如,顯示指定范圍內存單元內容的方法為:-D 100 1FF18E4:0100 47 06 04 02 38 01 47 06 06 02 00 02 47 06 08 02 G8GG18E4:0110 02 02 3B 04 02 68 02 00 4D 20 50 51 56 57 8B 37 ;hM PQVW7其中左邊為十六進制表示形式,右邊為ASCII碼表示形式,“”表示不可顯示字符。這里沒有指定段地址,D命令自動顯示DS段的內容。 修改內存單元內容的命令E,它有兩種格式1) 用給定內容代替

28、指定范圍的單元內容,格式為: -E 地址 內容表 例如: -E DS:100 FA8D,即用F3,58,59,5A,8D五個字節(jié)代替內存單元DS:100到DS:104的內容。2) 逐個單元相繼地修改,格式為: -E 地址例如: -E DS:10018E4:0100 89.78此命令是將0100單元內容89改為78。78是程序員從鍵盤輸入的。程序員在修改完一個單元后,可按“空格”鍵繼續(xù)修改下一單元內容,直至按“回車”鍵結束該命令。 檢查和修改寄存器內容的命令R,它有三種方式1) 顯示CPU內部所有寄存器內容和標志寄存器中的各標志位狀態(tài)-R該命令可顯示AX,BX,CX,DX,SP,BP,SI,DI

29、,DS,ES,SS,CS,IP及標志寄存器內容。R命令顯示中標志位狀態(tài)的含義如下所示:標 志 名置 位復 位溢出Overflow(是否)OVNV方向Direction(減量)增量DNUP中斷Interrupt(允許屏蔽)EIDI符號Sign(負正)NGPL零Zero(是否)ZRNZ輔助進位Auxiliary Carry(是否)ACNA奇偶Parity(偶奇)PEPO進位Carry(是否)CYNC2) 顯示和修改某個指定寄存器內容,格式為:-R 寄存器名例如: -R AX系統(tǒng)響應如下:AX F130:表示AX當前內容為F130,此時若不對其作修改,可按“回車”鍵,否則,鍵入修改內容。3) 顯示和

30、修改標志寄存器內容 -RF 系統(tǒng)將給出響應,例如: OV DN EI NG ZR AC PE CY- 這時若不作修改可按“回車”,否則在“-”之后鍵入修改值,鍵入順序任意,各標志位的取值如上表所示。 運行命令G,格式為: -G =地址1地址2地址3其中,地址1指定了運行的起始地址,后面的均為斷點地址,當指令執(zhí)行到斷點時,就停止執(zhí)行并顯示當前所有寄存器及標志位的內容和下一條要執(zhí)行的指令。 跟蹤命令T,它有兩種格式:1) 逐條指令跟蹤,格式為:-T地址該命令從指定地址起執(zhí)行一條指令后停下來,顯示所有寄存器及標志位的內容,如未指定地址從當前的CS:IP開始執(zhí)行。2) 多條指令跟蹤,格式為: -T地址

31、值該命令從指定地址起執(zhí)行n條指令后停下來,n由值確定。 匯編命令A,格式為: -A 地址 該命令允許輸入匯編語言語句,并能把它們匯編成機器代碼,相繼地存放在從指定地址開始的存儲區(qū)中。必須注意:輸入的數字均默認為十六進制數。 反匯編命令A,它有兩種格式:1) 從指定地址開始,反匯編32個字節(jié),其格式為:-U 地址2) 對指定范圍內的存儲單元進行反匯編,其格式為:-U 范圍 命名命令N,格式為:-N 文件標識符 文件標識符該命令將兩個文件標識符格式化在CS:5CH和CS:6CH的兩個文件控制塊內,以便使用L或W命令把文件裝入或者存盤。文件標識符格式為:d:path 文件名.擴展名 裝入命令L,它有

32、兩種功能:1) 將磁盤上指定扇區(qū)的內容裝入到內存指定地址起始的單元中,其格式為:-L 地址 驅動器 扇區(qū)號 扇區(qū)數2) 裝入指定文件,其格式為:-L 地址此命令裝入已在CS:5CH中格式化的文件控制塊所指定的文件。如未指定地址,則裝入CS:0100開始的存儲區(qū)中。 寫命令W,它有兩種功能:1) 將數據寫入磁盤的指定扇區(qū),其格式為:-W 地址 驅動器 扇區(qū)號 扇區(qū)數2) 將數據寫入指定文件中,其格式為:-W 地址此命令把指定內存區(qū)域中的數據寫入由CS:5CH處的文件控制塊所指定的文件中。如未指定地址,則數據從CS:0100開始。要寫入文件的字節(jié)數應先放入BX和CX中。 退出DEBUG命令Q,格式

33、為:-Q該命令退出DEBUG程序,返回DOS。附錄3 匯編程序出錯信息編 碼說 明0Block nesting error嵌套過程、段、結構、宏指令等不是正確結束。1Extra character on line當一行上已接受了定義指令的足夠信息,而又出現了多余的字符。2Register already defined匯編內部出現邏輯錯誤。3Unknown symbol type在符號語句的類型字段中,有些不能識別的東西。4Redefinition of symbol在第二遍掃視時,接著又定義一個符號。5Symbol is multi-defined重復定義一個符號。6Phase error

34、between passes程序中有模棱兩可的指令,以至于在匯編程序的兩次掃視中,程序標號的位置在數值上改變了。7Already had ELSE clause在ELSE從句子試圖再定義ELSE從句。8Not in conditional block在沒有提供條件匯編指令的情況下,指定了ENDIF或ELSE。9Symbol not defined符號沒有定義。10Syntax error語句的語法與任何可識別的語法不匹配。11Type illegal in context指定的類型在長度上不可接收。12Should have been group name給出的組合不符合要求。13Must b

35、e declared in pass 1得到的不是匯編程序所要求的常數值。例如,向前引用的向量長度。14Symbol type usage illegalPUBLIC符號的使用不合法。15Symbol already different kind企圖定義與以前定義不同的符號。16Symbol is reserved word企圖非法使用一個匯編程序的保留定(例如,宣布MOV為一個變量)。17Forward reference is illegal向前引用必須是在第一遍掃視中定義過的。18Must be register希望寄存器作為操作數,但用戶提供的是符號而不是寄存器。19Wrong typ

36、e of register指定的寄存器類型并不是指令中或偽操作中所要求的。例如ASSUME AX。20Must be segment or group希望給出段或組,而不是其它。21Symbol has no segment想使用帶有SEG的變量,而這個變量不能識別段。22Must be symbol type必須是WORD、DW、QW、BYTE或TB,但接收的是其它內容。23Already defined locally試圖定義一個符號作為EXTERNAL,但這個符號已經在局部定義過了。24Segment parameters are changedSEGMENT的自變量與第一次使用這個段的

37、情況不一樣。25Not proper align/combine typeSEGMENT參數不正確。26Reference to mult defined指令引用的內容已是多次定義過的。27Operand was expected匯編程序需要的是操作數,但得到的卻是其它內容。編 碼說 明28Operator was expected匯編程序需要的是操作符,但得到的卻是其它內容。29Division by 0 or overflow給出一個用0作除數的表達式。30Shift count is negative移位表達式產生的移位計數值為負數。31Operand type must match在自

38、變量的長度或類型應該一致的情況下,匯編程序得到的并不一樣。例如,交換。32Illegal use of external用非法手段進行外部使用。33Must be record field name需要的是記錄字段名,但得到的是其它東西。34Must be record or field name需要的是記錄名或字段名,但得到的是其它東西。35Operand must have size需要的是操作數的長度,但得到的是其它內容。36Must be var,label or constant需要的是變量、標號或常數,但得到的是其它內容。37Must be structure field name

39、需要的是結構字段名,但得到的是其它內容。38Left operand must have segment操作數的右邊要求它的左邊必須是某個段。39One operand must be const這是加法指令的非法使用。40Operands must be same or 1 abs這是減法指令的非法使用。41Normal type operand expected當需要變量、標號時,得到的卻是STRUCT、FIELDS、NAMES、BYTE、WORD或DW。42Constant was expected需要的是一個常量,得到的卻是另外一個內容。43Operand must have segm

40、entSEG偽操作使用不合法。44Must be associated with data有關項用的是代碼,而這里需要的是數據,例如一個過程的DS取代。45Must be associated with code有關項用的是數據,而這里需要的是代碼。46Already have base register試圖重復基地址。47Already have index register試圖重復變址地址。48Must be index or base register指令需要基址或變址寄存器,而指定的是其它寄存器。49Illegal use of register在指令中使用了8088指令中沒有的寄存器

41、。50Value is out of range數值大于需要使用的,例如將DW傳送到寄存器中。51Operand not in IP segment由于操作數不在當前IP段中,因此不能存取。52Improper operand type使用的操作數不能產生操作碼。53Relative jump out of range指定的轉移超出了允許的范圍(128127字節(jié))。54Index disp.must be constant試圖使用脫胎換骨離變址寄存器的變量位移量。位移量必須是常數。55Illegal register value拽定的寄存器值不能放入“reg”字段中。(即“reg”字段大于7)

42、56No immediate mode指定的立即方式或操作碼都不能接收立即數。例如:PUSH。57Illegal size for item引用的項的長度是非法的。例如:雙字移位。編 碼說 明58Byte register is illegal在上下文中,使用一個字節(jié)寄存器是非法的。例如:PUSH AL。59CS register illegal usage試圖非法使用CS寄存器。例如:XCHG CS,AX60Must be AX or AL某些指令只能用AX或AL。例如:IN指令。61Improper use of segment reg.段寄存器使用不合法。例如:1立即數傳送到寄存器。62

43、No or unreachable CS試圖轉移到不可到達的標號。63Operand combination illegal在雙操作數指令中,兩個操作數的組合不合法。64Near JMP/CALL to different CS企圖在不同的代碼段內執(zhí)行NEAR轉移或調用。65Label cant have seg override非法使用段取代。66Must have opcode after prefix使用前綴指令之后,沒有正確的操作碼說明。67Cant override ES segment企圖非法地在一條指令中取代ES寄存器。例如:存儲字符串。68Cant reach with seg

44、ment reg.沒有使變量可達到的ASSUME語句。69Must be in segment block企圖在段外產生代碼。70Cant use EVEN on BYTE segment被提出的是一個字節(jié)段,但試圖使用EVEN。71Forward needs override目前不使用這個信息。72Illegal value for DUP countDUP計數必須是常數,不能是0或負數。73Symbol already external企圖定義一個局部符號,但此符號已經是外部符號了。74DUP is too large for linkerDUP嵌套太長,以至于從連接程序不能得到所要的記錄

45、。75Usage of ? ( indeterminate ) bad“?”使用不合適。例如:?+5。76More values than defined with77Only initialize list legal78Directive illegal in STRUC79Override with DUP is illegal80Field cannot be overridden81Override is of wrong type82Register cant be farward ref83Circular chain of EQU aliases84Feature not su

46、pported by Small Assembler (ASM)附錄4 常用字符ASCII碼值字符ASCII值字符ASCII值字符ASCII值字符ASCII值NUL00434M4Df66BS08535N4Eg67LF0A636O4Fh68CR0D737P50i69ESC1B838Q51j6ASP20939R52k6B!21:3AS53l6C“22;3BT54m6D#233EW57p70&26?3FX58q712740Y59r72(28A41Z5As73)29B425Bt74*2AC435Cu75+2BD445Dv76,2CE455Ew77-2DF46_5Fx78.2EG4760y79/2FH4

47、8a61z7A030I49b627B131J4Ac63|7C232K4Bd647D333L4Ce657ENUL 空 BS 退格LF 換行 CR 回車ESC 退出 SP 空格附錄5 80888086指令系統(tǒng)附表5.1 指令符號說明符 號說 明r8任意一個8位通用寄存器AH、AL、BH、BL、CH、CL、DH、DLr16任意一個16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SPreg代表r8、r16seg段寄存器CS、DS、ES、SSm8一個8位存儲器單元m16一個16位存儲器單元mem代表m8、m16i8一個8位立即數i16一個16位立即數imm代表i8、i16dest目的操作數sr

48、c源操作數label標號附表5.2 指令匯編格式指令類型指令匯編格式指令功能簡介備 注傳送指令MOV reg/mem,immdestsrcMOV reg/mem/seg,regCS除外MOV reg/seg,memCS除外MOV reg/mem,seg交換指令XCHG reg,regreg/memXCHG reg/mem,reg轉換指令XLAT labelALBX+ALXLAT堆棧指令PUSH r16/m16/seg入棧POP r16/m16/seg出棧CS除外標志傳送CLCCF0STCCF1CMCCFCLDDF0STDDF1CLIIF0STIIF1LAHFAH標志寄存器低字節(jié)SAHF標志寄存器低字節(jié)AHPUSHF標志寄存器入棧POPF出棧到標志寄存器地址傳送LEA r16,memr1616位有效地址LDS r16,memDS:r1632位遠指針LES r16,memES:r1632位遠指針輸入IN AL/AX,i8/DXAL/AXI/O端

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論