免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)一 DOS 環(huán)境下的匯編語(yǔ)言編程環(huán)境使用一、 實(shí)驗(yàn)?zāi)康?、掌握匯編語(yǔ)言程序設(shè)計(jì)的基本流程和學(xué)會(huì)上機(jī)開(kāi)發(fā)簡(jiǎn)單程序;2、熟練掌握宏匯編程序 MASM 的使用;3、熟練掌握連接程序 LINK 的使用;4、熟練掌握 DEBUG 的使用;二、 實(shí)驗(yàn)內(nèi)容1、 匯編、鏈接并調(diào)試下面給出的簡(jiǎn)單程序,找出程序中的錯(cuò)誤。(一)錄入并建立匯編語(yǔ)言源程序文件(ASM 文件) 可以在 DOS 模式下用編輯程序 EDIT.EXE 建立匯編語(yǔ)言源程序文件 TEST01.ASM,注意文件名的擴(kuò)展名必須是.ASM。也可以使用 Windows 環(huán)境下其他的編輯軟件。(二)用匯編程序 MASM 將 ASM 文件匯編成目標(biāo)程序文件(OBJ 文件)當(dāng)源程序建立以后, TEST01.ASM 程序?yàn)槔?,以我們用匯編程序 MASM 對(duì) TEST01.ASM源程序文件進(jìn)行匯編,以便產(chǎn)生機(jī)器碼的目標(biāo)程序文件 TEST01.OBJ。 由此可知,匯編程序調(diào)入后,首先顯示版本號(hào),然后出現(xiàn)三個(gè)提示行。 第一個(gè)提示行為:Object filename TEST01.OBJ: 這是詢問(wèn)目標(biāo)程序文件名,方括號(hào)內(nèi)為機(jī)器規(guī)定的默認(rèn)的文件名,通常直接按回車鍵,表示采用默認(rèn)的文件名(如上所示),這是我們匯編的主要目的。 第二個(gè)提示行為: Source listing NUL.LST: 這是詢問(wèn)是否建立列表文件。若不建立,直接回車;若要建立,可以輸入文件名 TEST01再回車,表示要建立名為 TEST01 的列表文件。列表文件中同時(shí)列出源程序和機(jī)器語(yǔ)言程序清單,并給出符號(hào)表,有利于程序調(diào)試。 第三個(gè)提示行為:Cross-reference NUL.CRF:這是詢問(wèn)是否要建立交叉索引文件。若不建立,則直接回車;若要建立,可以輸入文件名TEST01,表示要建立 TEST01.CRF 文件。由于.CRF 是非文本文件,為了建立交叉索引文件,還必須調(diào)用 CREF.EXE 程序.調(diào)入?yún)R編程序,當(dāng)我們回答了上述各提示行的詢問(wèn)之后,匯編程序就對(duì)源程序進(jìn)行匯編。若匯編過(guò)程中發(fā)現(xiàn)源程序有語(yǔ)法錯(cuò)誤,則列出有錯(cuò)誤的語(yǔ)句和錯(cuò)誤的代碼。錯(cuò)誤分警告錯(cuò)誤(Wraning Errors)和嚴(yán)重錯(cuò)誤(Severe Errors)。警告錯(cuò)誤是指匯編程序認(rèn)為的一般性錯(cuò)誤;嚴(yán)重錯(cuò)誤是指匯編程序認(rèn)為無(wú)法進(jìn)行正確匯編的錯(cuò)誤,并給出錯(cuò)誤的個(gè)數(shù)及行號(hào)、錯(cuò)誤的性質(zhì)等。這時(shí),就要對(duì)錯(cuò)誤進(jìn)行分析,找出問(wèn)題和原因,然后再調(diào)用編輯程序加以修改,修改后重新匯編,直到匯編后無(wú)錯(cuò)誤為止。(三) 用連接程序 LINK 生成可執(zhí)行程序文件(EXE 文件)經(jīng)匯編后產(chǎn)生的二進(jìn)制的目標(biāo)程序文件(OBJ 文件)并不是可執(zhí)行程序文件(EXE 文件),必須經(jīng)連接以后,才能成為可執(zhí)行文件。連接程序并不是專為匯編語(yǔ)言程序設(shè)計(jì)的。如果一個(gè)程序是由若干個(gè)模塊組成的,也可通過(guò)連接程序 LINK 把它們連接在一起。這些模塊可以是匯編程序產(chǎn)生的目標(biāo)文件,也可以是高級(jí)語(yǔ)言編譯程序產(chǎn)生的目標(biāo)文件。在連接程序調(diào)入后,首先顯示版本號(hào),然后出現(xiàn)三個(gè)提示行。第一個(gè)提示行為:Run File TEST01.EXE:這是詢問(wèn)要產(chǎn)生的可執(zhí)行文件的文件名。一般直接回車采用方括號(hào)內(nèi)規(guī)定的隱含文件名。 第二個(gè)提示行為:List File NUL.MAP:這是詢問(wèn)是否要建立連接映象文件。若不建立,則直接回車;若要建立,則輸入文件名再回車。如果要建立該文件,可以輸入文件名 TEST01。第三個(gè)提示行為:Libraries .LIB:這是詢問(wèn)是否用到庫(kù)文件。若無(wú)特殊需要,則直接回車即可。上述提示行回答后,連接程序開(kāi)始連接。若連接過(guò)程中有錯(cuò),則顯示錯(cuò)誤信息,錯(cuò)誤分析清楚后,要重新調(diào)入編輯程序進(jìn)行修改,然后重新匯編,再經(jīng)過(guò)連接,直至無(wú)錯(cuò)為止。連接以后,便產(chǎn)生了可執(zhí)行程序文件(EXE 文件)。(四) 程序的調(diào)試調(diào)試過(guò)程: 進(jìn)入 Debug 并裝入可執(zhí)行文件 TEST01.EXED:MASMDebug TEST01.EXE- 觀察寄存器初始狀態(tài)-R 以單步工作方式開(kāi)始運(yùn)行程序首先用 T 命令順序執(zhí)行用戶程序的前 l 兩條指令,將段寄存器 DS 預(yù)置為用戶的數(shù)據(jù)段。 觀察用戶程序數(shù)據(jù)段初始內(nèi)容-D ds:0 連續(xù)工作方式運(yùn)行程序至返回 DOS 前,查看運(yùn)行結(jié)果。為此,現(xiàn)使用 U 命令反匯編。 修改源程序,重新匯編、鏈接并調(diào)試,查看運(yùn)行結(jié)果。退出-Q 2、完成下列程序設(shè)計(jì):分類統(tǒng)計(jì)字?jǐn)?shù)組 data 中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù),并分別存入內(nèi)存字變量 Positive、Negative和 Zero 中,數(shù)組元素個(gè)數(shù)保存在其第一個(gè)字中。使用 Debug 查看 Positive、Negative 和Zero 三個(gè)變量的數(shù)據(jù)。三、 實(shí)驗(yàn)理論1、匯編語(yǔ)言源程序的匯編過(guò)程匯編語(yǔ)言源程序的匯編過(guò)程是是利用匯編程序(MASM)對(duì)已編輯好的源程序文件(.ASM)進(jìn)行匯編,將源程序文件中以 ASCII 碼表示的助記符指令逐條翻譯成機(jī)器碼指令,并完成源程序中的偽指令所指出的各種操作,最后可以建立 3 個(gè)文件:擴(kuò)展名為 .OBJ 的目標(biāo)文件、擴(kuò)展名為 .LST 的列表文件和擴(kuò)展名為 .CRF 的交叉索引文件。目標(biāo)文件是必須建立的,它包含了程序中所有的機(jī)器碼指令和偽指令指出的各種有關(guān)信息,但該文件中的操作數(shù)地址還不是內(nèi)存的絕對(duì)地址,只是一個(gè)可浮動(dòng)的相對(duì)地址。列表文件(.LST)中包含了源程序的全部信息(包括注釋)和匯編后的目標(biāo)程序,列表文件可以打印輸出,可供調(diào)試檢查用。交叉索引文件(.CRF)是用來(lái)了解源程序中各符號(hào)的定義和引用情況的。.LST 和.CRF 兩個(gè)文件不是必須建立的,可有有無(wú),可以通過(guò)匯編時(shí)的命令加以選擇。在對(duì)源程序文件(ASM 文件)匯編時(shí),匯編程序?qū)?duì) ASM 文件進(jìn)行兩遍掃描,若程序文件中有語(yǔ)法錯(cuò)誤,則結(jié)束匯編,匯編程序?qū)⒅赋鲈闯绦蛑写嬖诘腻e(cuò)誤,這時(shí)應(yīng)返回編輯環(huán)境修改源程序中的錯(cuò)誤,再經(jīng)過(guò)匯編,直到最后得到無(wú)錯(cuò)誤的目標(biāo)程序,即 OBJ 文件。因此,匯編程序的主要功能可以概括為以下三點(diǎn):(1) 檢查源程序中的語(yǔ)法錯(cuò)誤,并給出錯(cuò)誤信息;(2) 產(chǎn)生目標(biāo)程序文件(OBJ 文件),并可給出列表文件(.LST 文件);(3) 展開(kāi)宏指令。匯編程序是系統(tǒng)提供的用于匯編的系統(tǒng)軟件,目前常用的匯編程序有 Microsoft 公司推出的宏匯編程 MASM(MACRO ASSEMBLER)和 BORLAND 公司推出的 TASM(TURBO ASSEMBLER)兩種。Microsoft 公司推出有宏匯編程序 MASM 和小匯編程序 ASM 兩種,二者的區(qū)別在于:MASM有宏處理功能,而 ASM 沒(méi)有宏處理功能,因此,MASM 比 ASM 的功能強(qiáng)大。 實(shí)驗(yàn)開(kāi)發(fā)過(guò)程中選用 MASM。2、目標(biāo)程序的連接過(guò)程匯編后產(chǎn)生的目標(biāo)程序(OBJ 文件)并不是可執(zhí)行程序文件(EXE 文件),還不能直接運(yùn)行,它必須通過(guò)連接程序(LINK)連接成一個(gè)可執(zhí)行程序后才能運(yùn)行。連接程序進(jìn)行連接時(shí),其輸入有兩個(gè)部分:一是目標(biāo)文件(.OBJ),目標(biāo)文件可以是一個(gè)也可以是多個(gè),可以是匯編語(yǔ)言經(jīng)匯編后產(chǎn)生的目標(biāo)文件,也可以是高級(jí)語(yǔ)言(例如 C 語(yǔ)言)經(jīng)編譯后產(chǎn)生的目標(biāo)文件;另一是庫(kù)文件(.LIB),庫(kù)文件是系統(tǒng)中已經(jīng)建立的,主要是為高級(jí)語(yǔ)言提供的。連接后輸出兩個(gè)文件,一是擴(kuò)展名為 .EXE 的可執(zhí)行文件,另一個(gè)是擴(kuò)展名為 .MAP 的內(nèi)存分配文件,它是連接程序的列表文件,又稱為連接映像(Link Map),它給出每個(gè)段在存儲(chǔ)器中的分配情況,該文件可有可無(wú)。連接程序給出的“無(wú)堆棧段的警告性錯(cuò)誤”并不影響程序的運(yùn)行。所以,到此為止,連接過(guò)程已經(jīng)結(jié)束,可以在操作系統(tǒng)下執(zhí)行該.EXE 程序了。3、Debug 調(diào)試過(guò)程通過(guò)編輯、匯編和連接后的程序是可以執(zhí)行的程序。但是,一個(gè)程序特別是比較復(fù)雜的程序不能保證沒(méi)有一點(diǎn)錯(cuò)誤。因此,在投入正式運(yùn)行前必須進(jìn)行調(diào)試,以檢查程序的正確性。調(diào)試程序 Debug 就是用來(lái)調(diào)試匯編語(yǔ)言程序的一種工具。Debug 的主要功能有顯示和修改寄存器及內(nèi)存單元的內(nèi)容;按指定地址啟動(dòng)并運(yùn)行程序;設(shè)置斷點(diǎn)使程序分段運(yùn)行,以便檢查程序運(yùn)行過(guò)程中的中間結(jié)果或確定程序出錯(cuò)的位置;反匯編被調(diào)試程序,它將一個(gè)可執(zhí)行文件中的指令機(jī)器碼反匯編成助記符指令并同時(shí)給出指令所在的內(nèi)存地址;單條追蹤或多條追蹤被調(diào)試程序,它可以逐條指令執(zhí)行或幾條指令執(zhí)行被調(diào)試程序,每執(zhí)行一條(或幾條)指令后,Debug 程序?qū)⒅袛喑绦虻倪\(yùn)行并提供有關(guān)結(jié)果信息;匯編一段程序,在 Debug 的匯編命令下可以直接輸入助記符指令,并將其匯編成可運(yùn)行程序段。此外,Debug 還可以將磁盤(pán)指定區(qū)的內(nèi)容或一個(gè)文件裝入到內(nèi)存或?qū)?nèi)存的信息寫(xiě)到磁盤(pán)上等等。4、匯編語(yǔ)言和 DOS 操作系統(tǒng)的接口編寫(xiě)的匯編語(yǔ)言源程序是在 DOS 環(huán)境下運(yùn)行的,為了保證用戶程序執(zhí)行完后能返回到DOS 狀態(tài),可使用如下兩種方法。(一)標(biāo)準(zhǔn)方法 首先將用戶程序的主程序定義成一個(gè) FAR 過(guò)程,其最后一條指令為 RET。然后在代碼段的主程序(即 FAR 過(guò)程)的開(kāi)始部分用如下三條指令將 PSP 中 INT 20H 指令的段地址及偏移地址壓入堆棧: PUSH DS;保護(hù) PSP 段地址 MOVAX,0;保護(hù)偏移地址 0 PUSH AX 這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令 RET 時(shí),由于該過(guò)程具有 FAR 屬性,故存在堆棧內(nèi)的兩個(gè)字就分別彈出到 CS 和 IP,從而執(zhí)行 INT 20H 指令,使控制返回到 DOS 狀態(tài)。返回 DOS 的標(biāo)志就是程序運(yùn)行完后出現(xiàn)一個(gè) DOS 的標(biāo)識(shí)符,如 D:。(二)非標(biāo)準(zhǔn)方法 也可在用戶的程序中不定義過(guò)程段,只在代碼段結(jié)束之前(即 CODE ENDS 之前)增加兩條語(yǔ)句: MOV AH,4CH INT 21H 則程序執(zhí)行完后也會(huì)自動(dòng)返回 DOS 狀態(tài)。 此外,由于開(kāi)始執(zhí)行用戶程序時(shí),DS 并不設(shè)置在用戶的數(shù)據(jù)段的起始處,ES 同樣也不設(shè)置在用戶的附加段起始處,因而在程序開(kāi)始處使用以下方法裝填 DS 和 ES 的值使其向用戶的數(shù)據(jù)段: MOV AX,段名 MOV 段寄存器名,AX ;段寄存器名可以是 DS、ES、SS 之一四、 程序代碼1、DATA1 SEGMENTword1 DW 1,9078Hbyte1 DB 21,WorldDD 12345678HMsg DB Hello , everyone!$DATA1 ENDSSTACK SEGMENTsta dw 20 dup(?)top equ size staSTACK ENDScode segmentassume cs:code,ds:data1,ss:stackStart: MOV AX,data1 MOV DS,AX MOV DX,OFFSET Msg MOV AH,9 INT 21h Nop MOV AX,0 MOV BX,1HADDITION: ADD AX,BX INC BX Cmp BX,10 JNAE ADDITION MOV AH,4ch INT 21hcode ends END Start2、DATAS SEGMENTdata dw 10,-20,30,-20,20,2positive dw ?ngtive dw ?zero dw ?DATAS ENDSSTACKS SEGMENT ;此處輸入堆棧段代碼STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX lea si,data mov ax,0;zero mov bx,0;positive mov dx,0;ngtivemov cx,6again: cmp word ptr si,0 jl lower jg higher inc ax jmp looplhigher: inc bx jmp loopllower: inc dx jmp looplloopl: add si,2 dec cx cmp cx,0 jne againsave: mov zero,ax mov positive,bx mov ngtive,dx MOV AH,4CH INT 21HCODES ENDSEND START五、 實(shí)驗(yàn)結(jié)果1、2、-u0B4D:0020 EB03 JMP 00250B4D:0022 42 INC DX0B4D:0023 EB00 JMP 00250B4D:0025 83C602 ADD SI,+020B4D:0028 49 DEC CX0B4D:0029 83F900 CMP CX,+000B4D:002C 75E7 JNZ 00150B4D:002E A31000 MOV 0010,AX0B4D:0031 891E0C00 MOV 000C,BX0B4D:0035 89160E00 MOV 000E,DX0B4D:0039 B44C MOV AH,4C0B4D:003B CD21 INT 210B4D:003D 92 XCHG DX,AX0B4D:003E 5B POP BX0B4D:003F 5D POP BP-g2EAX=0000 BX=0004 CX=0000 DX=0002 SP=0000 BP=0000 SI=000C DI=0000DS=0B4B ES=0B3B SS=0B4B CS=0B4D IP=002E NV UP EI PL ZR NA PE NC0B4D:002E A31000 MOV 0010,AX DS:0010=0000-tAX=0B4B BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B3B ES=0B3B SS=0B4B CS=0B4D IP=0003 NV UP EI PL NZ NA PO NC0B4D:0003 8ED8 MOV DS,AX-tAX=0B4B BX=0000 CX=005D DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B4B ES=0B3B SS=0B4B CS=0B4D IP=0005 NV UP EI PL NZ NA PO NC0B4D:0005 8D360000 LEA SI,0000 DS:0000=000A-tAX=0B4B BX=00
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年滬教版必修3生物上冊(cè)階段測(cè)試試卷含答案
- 2025年粵人版選擇性必修3地理下冊(cè)月考試卷
- 2024年滬教新版必修1物理上冊(cè)月考試卷
- 事業(yè)單位臨時(shí)工勞動(dòng)合同范本
- 抗震及安全鑒定檢測(cè)工作技術(shù)服務(wù)合同(2篇)
- 房屋合同范本(2篇)
- 打疫苗農(nóng)業(yè)技術(shù)服務(wù)合同(2篇)
- 二零二五版農(nóng)用車綠色出行推廣計(jì)劃合同4篇
- 2025年度農(nóng)家樂(lè)旅游電子商務(wù)平臺(tái)建設(shè)與運(yùn)營(yíng)承包合同4篇
- 2025年度新能源電站運(yùn)營(yíng)派遣人員勞動(dòng)合同3篇
- 開(kāi)展課外讀物負(fù)面清單管理的具體實(shí)施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國(guó)洗衣液市場(chǎng)未來(lái)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 北京市房屋租賃合同自行成交版北京市房屋租賃合同自行成交版
- 《AM聚丙烯酰胺》課件
- 系統(tǒng)動(dòng)力學(xué)課件與案例分析
- 《智能網(wǎng)聯(lián)汽車智能傳感器測(cè)試與裝調(diào)》電子教案
- 客戶分級(jí)管理(標(biāo)準(zhǔn)版)課件
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)數(shù)據(jù)的收集整理與描述小結(jié)
評(píng)論
0/150
提交評(píng)論