匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西華師范大學(xué)計(jì)算機(jī)科學(xué)系自編講義匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)編著羅 建、李艷梅鐘樂(lè)海、賴(lài)曉風(fēng) 西華師范大學(xué)計(jì)算機(jī)科學(xué)系二OO三年八月匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)講義目 錄序言 IBM PC匯編語(yǔ)言實(shí)踐操作 1實(shí)驗(yàn)一 DOS常用命令及8088指令使用8實(shí)驗(yàn)二 內(nèi)存操作數(shù)及尋址方法11實(shí)驗(yàn)三 數(shù)據(jù)串傳送和查表程序13實(shí)驗(yàn)四 屏幕字符顯示程序15實(shí)驗(yàn)五 條件轉(zhuǎn)移指令17實(shí)驗(yàn)六 匯編語(yǔ)言程序上機(jī)過(guò)程20實(shí)驗(yàn)七 分支程序22實(shí)驗(yàn)八 多重循環(huán)程序24實(shí)驗(yàn)九 子程序25實(shí)驗(yàn)十 音樂(lè)程序28實(shí)驗(yàn)十一 數(shù)碼轉(zhuǎn)換程序30實(shí)驗(yàn)十二 鍵盤(pán)和窗口程序33實(shí)驗(yàn)十三 活動(dòng)圖形顯示程序35實(shí)驗(yàn)十四 磁盤(pán)文件操作程序38實(shí)驗(yàn)十五 絕

2、對(duì)磁盤(pán)讀寫(xiě)程序44IBM PC匯編語(yǔ)言實(shí)踐操作 本章主要介紹了匯編語(yǔ)言源程序的編輯、匯編、連接的方法,DEBUG調(diào)試命令及其使用方法 一、編輯源程序 匯編語(yǔ)言源程序:用匯編語(yǔ)句編寫(xiě)的解決應(yīng)用問(wèn)題的程序。匯編程序:將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言程序的系統(tǒng)。匯編:將匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序的過(guò)程。在編輯匯編語(yǔ)言源程序時(shí),對(duì)計(jì)算機(jī)硬件工作環(huán)境無(wú)特殊要求,對(duì)軟件工作環(huán)境要求也很簡(jiǎn)單,只需用建立ASCII碼文本文件的軟件即可。(1)編輯軟件行編輯軟件:EDLIN.COM全屏編輯軟件:WPS、EDIT.COM、NE.COM、WORD、PE等。當(dāng)輸入、建立和修改源程序時(shí),可任選一種編輯軟件,不要用格式

3、控制符,要求編輯完成的文件擴(kuò)展名一定是.ASM。(2)匯編程序有匯編ASM.EXE、宏匯編MASM.EXE及TASM等,一般使用宏匯編MASM.EXE,因它比ASM.EXE功能強(qiáng)。TASM適用于8086/8088Pentium系列指令系統(tǒng)所編寫(xiě)的匯編語(yǔ)言程序,是比較先進(jìn)的匯編工具。(3)連接程序用連接程序LINK.EXE或TLINK.EXE,將MASM.EXE產(chǎn)生的機(jī)器代碼程序(.OBJ)文件連接成可執(zhí)行程序.EXE,TLINK比LINK更先進(jìn)。(4)輔助工具程序(.EXE)進(jìn)行匯編語(yǔ)言程序調(diào)試和文件格式轉(zhuǎn)換的程序有:DEBUG.COM 動(dòng)態(tài)調(diào)試程序EXE2BIN.EXE文件格式轉(zhuǎn)換程序CRE

4、F.EXE交叉引用程序編輯、匯編、連接、調(diào)試過(guò)程如圖1.1所示。 TD(turbo Debugger簡(jiǎn)稱(chēng))也是動(dòng)態(tài)調(diào)試程序,可在DOS和Windows環(huán)境下運(yùn)行,用戶(hù)界面十分友好。二、 匯編源程序 用編輯軟件建立的源程序.ASM文件,必須經(jīng)過(guò)匯編才能產(chǎn)生.OBJ文件。為此,需鍵入:C:MASM 或C:MASM按前一種格式鍵入,屏幕上顯示: Microsoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved OBJ filename.obj: Source

5、listingnul.lst: Cross-referencenul.crf:以上信息中方括中為該項(xiàng)提示的缺省回答值,冒號(hào)后面等待用戶(hù)輸入信息,若不改變?nèi)笔≈祫t直接按回車(chē)鍵。匯編后生成以下幾個(gè)文件:(1).OBJ文件.OBJ文件是必須生成的一個(gè)目標(biāo)代碼文件,當(dāng)源程序中無(wú)語(yǔ)法錯(cuò)誤時(shí),則在當(dāng)前工作盤(pán)上自動(dòng)存入一個(gè).OBJ文件,供下一步連接用。若源程序有語(yǔ)法錯(cuò)誤時(shí),會(huì)出現(xiàn)錯(cuò)誤信息提示: 源程序文件行錯(cuò)誤信息代碼錯(cuò)誤說(shuō)明信息最后信息提示: Warningerrors(警告錯(cuò)誤) Severeerrors(嚴(yán)重錯(cuò)誤)若嚴(yán)重錯(cuò)誤總數(shù)不為0,則.OBJ文件沒(méi)有生成,需回到編輯狀態(tài)下修改源程序直到無(wú)錯(cuò)為止。(

6、2).LST文件(列表文件).LST文件對(duì)調(diào)試程序有幫助,它是將源程序中各語(yǔ)句及其對(duì)應(yīng)的目標(biāo)代碼和符號(hào)表以清單方式列出,如果需要,在屏幕顯示的第二個(gè)提問(wèn)的冒號(hào)后輸入文件名即可,如果不需要,直接按回車(chē)鍵。(3).CRF文件(交叉引用文件)交叉引用.CRF文件給出了源程序中定義的符號(hào)引用情況,按字母順序排列。.CRF文件不可顯示,須用CREF.EXE系統(tǒng)程序?qū)?CRF文件轉(zhuǎn)換成為.REF文件后方可顯示輸出。若按后一種格式輸入,系統(tǒng)會(huì)依次出現(xiàn)四個(gè)提示信息,比第一種格式多了一項(xiàng)源程序文件名的輸入。應(yīng)答方式與第一種格式相同。三、 連接目標(biāo)程序 匯編后生成的.OBJ文件,其所有目標(biāo)代碼的地址都是浮動(dòng)的偏移

7、地址,機(jī)器不能直接運(yùn)行。必須用連接程序(LINK.EXE)對(duì)其進(jìn)行連接裝配定位,產(chǎn)生.EXE可執(zhí)行文件,方可運(yùn)行。在系統(tǒng)提示符下鍵入:LINK 或 LINK屏幕上出現(xiàn)以下提示信息: Microsoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved Run file .EXE: List File nul.map: Libraries .lib:連接后,可生成兩種文件:.EXE和.MAP(1).EXE文件(可執(zhí)行文件)若采用方括號(hào)中的默認(rèn)值,直接按回車(chē)鍵,

8、否則需重新輸入一文件名。若連接過(guò)程中無(wú)錯(cuò)誤,則自動(dòng)在當(dāng)前工作盤(pán)生成.EXE文件。若有錯(cuò)誤,則會(huì)給出錯(cuò)誤信息提示,這時(shí)必須重新修改源程序,再匯編、連接。(2).MAP(連接映像文件)(3).LIB庫(kù)文件連接程序詢(xún)問(wèn)是否使用某種庫(kù)文件,不需使用庫(kù)文件直接按回車(chē)鍵。(4)若要連接多個(gè)模塊目標(biāo)程序,可用“+”把它們連接起來(lái)。 如:LINK files1+files2+files3若直接鍵入:LINK會(huì)依次出現(xiàn)四個(gè)提示信息,應(yīng)答方式應(yīng)與LINK相同,僅增加了一項(xiàng)輸出,詢(xún)問(wèn)被連接的目標(biāo)文件名字:Object Modeules.OBJ:格式:LINK ;多了一個(gè)分號(hào),表示結(jié)束后續(xù)詢(xún)問(wèn)。四、 運(yùn)行程序 經(jīng)過(guò)匯

9、編、連接后生成的.EXE文件,可在DOS系統(tǒng)直接運(yùn)行,只要鍵入相應(yīng)的文件名即可。如:C:MASMDOS的COMMAND.COM模塊將該程序裝配到內(nèi)存,并設(shè)置和分配啟動(dòng)地址。也可在DEBUG調(diào)試程序下運(yùn)行。如何用DEBUG程序來(lái)運(yùn)行和調(diào)試程序?qū)⒃贒EBUG調(diào)試程序中詳細(xì)討論。五、 DEBUG調(diào)試程序 DEBUG.EXE程序是專(zhuān)門(mén)為分析、研制和開(kāi)發(fā)匯編語(yǔ)言程序而設(shè)計(jì)的一種調(diào)試工具,具有跟蹤程序執(zhí)行、觀(guān)察中間運(yùn)行結(jié)果、顯示和修改寄存器或存儲(chǔ)單元內(nèi)容等多種功能。它能使程序設(shè)計(jì)人員或用戶(hù)觸及到機(jī)器內(nèi)部,因此可以說(shuō)它是80X86CPU的心靈窗口,也是我們學(xué)習(xí)匯編語(yǔ)言必須掌握的調(diào)試工具。 1)DEBUG程序

10、使用在DOS提示符下鍵入命令: CDEBUG 盤(pán)符:路徑文件名.EXE參數(shù)1參數(shù)2 這時(shí)屏幕上出現(xiàn)DEBUG的提示符“-”,表示系統(tǒng)在DEBUG管理之下,此時(shí)可以用DEBUG進(jìn)行程序調(diào)試。若所有選項(xiàng)省略,僅把DEBUG裝入內(nèi)存,可對(duì)當(dāng)前內(nèi)存中的內(nèi)容進(jìn)行調(diào)試,或者再用N和L命令,從指定盤(pán)上裝入要調(diào)試的程序;若命令行中有文件名,則DOS把DEBUG程序調(diào)入內(nèi)存后,再由DEBUG將指定的文件名裝入內(nèi)存。2)DEBUG的常用命令(1)匯編命令 A格式:A起始地址功能:將輸入源程序的指令匯編成目標(biāo)代碼并從指定地址單元開(kāi)始存放。若缺省起始地址,則從當(dāng)前CS:100地址開(kāi)始存放。A命令按行匯編,主要是用于小

11、段程序的匯編或?qū)δ繕?biāo)程序的修改。 (2)反匯編命令 U 格式1:U起始地址 格式2:U起始地址結(jié)束地址|字節(jié)數(shù) 功能:格式1從指定起始地址處開(kāi)始將32個(gè)字節(jié)的目標(biāo)代碼轉(zhuǎn)換成匯編指令形式,缺省起始地址,則從當(dāng)前地址CS:IP開(kāi)始。 格式2將指定范圍的內(nèi)存單元中的目標(biāo)代碼轉(zhuǎn)換成匯編指令。(3)顯示、修改寄存器命令 R格式:R寄存器名功能:若給出寄存器名,則顯示該寄存器的內(nèi)容并可進(jìn)行修改。缺省寄存器名,則按以下格式顯示所有寄存器的內(nèi)容及當(dāng)前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000

12、ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;輸入命令 AX 0014 ;顯示AX的內(nèi)容 : ;供修改,不修改按回車(chē)。 若對(duì)標(biāo)志寄存器進(jìn)行修改,輸入:-RF 屏幕顯示如下信息,分別表示OF、DF、IF、SF、ZF、AF、PF、CF的狀態(tài)。 NV UP DI PL NZ NA PO NC不修改按回車(chē)鍵。要修改需個(gè)別輸入一個(gè)或多個(gè)此標(biāo)志的相反值,再按回車(chē)鍵。R命令只能顯示、修改16位寄存器。(4)顯示存儲(chǔ)單元命令 D格式1:D起始地址 格式2:D起始地址結(jié)束地址|字節(jié)數(shù) 功能:格式1從起始地

13、址開(kāi)始按十六進(jìn)制顯示80H個(gè)單元的內(nèi)容,每行16個(gè)單元,共8行,每行右邊顯示16個(gè)單元的ASCII碼,不可顯示的ASCII碼則顯示“”。格式2顯示指定范圍內(nèi)存儲(chǔ)單元的內(nèi)容,其他顯示方式與格式1一樣。如果缺省起始地址或地址范圍,則從當(dāng)前的地址開(kāi)始按格式1顯示。例如:-D 200;表示從DS:0200H開(kāi)始顯示128個(gè)單元內(nèi)容-D 100 120;表示顯示DS:0100-DS:0120單元的內(nèi)容 說(shuō)明:在DEBUG中,地址表示方式有如下形式: 段寄存器名:相對(duì)地址,如:DS:100段基值:偏移地址(相對(duì)地址),如:23A0:1500(5)修改存儲(chǔ)單元命令 E格式1:E起始地址 內(nèi)容表 格式2:E地

14、址 功能:格式1按內(nèi)容表的內(nèi)容修改從起始地址開(kāi)始的多個(gè)存儲(chǔ)單元內(nèi)容,即用內(nèi)容表指定的內(nèi)容來(lái)代替存儲(chǔ)單元當(dāng)前內(nèi)容。例如:E DS:0100 VAR 12 34表示從DS:0100 為起始單元的連續(xù)五個(gè)字節(jié)單元內(nèi)容依次被修改為V、A、R、12H、34H。格式2是逐個(gè)修改指定地址單元的當(dāng)前內(nèi)容。如:E DS:0010 156F:0010 41.5F其中156F:0010單元原來(lái)的值是41H,5FH為輸入的修改值。若只修改一個(gè)單元的內(nèi)容,這時(shí)按回車(chē)鍵即可;若還想繼續(xù)修改下一個(gè)單元內(nèi)容,此時(shí)應(yīng)按空格鍵,就顯示下一個(gè)單元的內(nèi)容,需修改就鍵入新的內(nèi)容,不修改再按空格跳過(guò),如此重復(fù)直到修改完畢,按回車(chē)鍵返回D

15、EBUG“-”提示符。如果在修改過(guò)程中,將空格鍵換成按“-”鍵,則表示可以修改前一個(gè)單元的內(nèi)容。(6)運(yùn)行命令 G格式:G=起始地址第一斷點(diǎn)地址第二斷點(diǎn)地址功能:CPU從指定起始地址開(kāi)始執(zhí)行,依次在第一、第二等斷點(diǎn)處中斷。若缺省起始地址,則從當(dāng)前CS:IP指示地址開(kāi)始執(zhí)行一條指令。最多可設(shè)置10個(gè)斷點(diǎn)。(7)跟蹤命令 T格式:T起始地址正整數(shù)功能:從指定地址開(kāi)始執(zhí)行正整數(shù)條指令,若缺省正整數(shù),表示執(zhí)行一條指令,若兩項(xiàng)都缺省,表示從當(dāng)前CS:IP指示地址開(kāi)始執(zhí)行一條指令。(8)指定文件命令 N 格式:N功能:指定即將調(diào)入內(nèi)存或從內(nèi)存寫(xiě)入磁盤(pán)的文件名。該命令應(yīng)該用在L命令和W命令之前。(9)裝入命

16、令 L 格式1:L起始地址盤(pán)符號(hào)扇區(qū)號(hào)扇區(qū)數(shù) 格式2:L起始地址 功能:格式1根據(jù)盤(pán)符號(hào),將指定扇區(qū)的內(nèi)容裝入到指定起始地址的存儲(chǔ)區(qū)中。格式2將N命令指出的文件裝入到指定起始地址的存儲(chǔ)區(qū)中,若省略起始地址,則裝入到CS:100處或按原來(lái)文件定位約定裝入到相應(yīng)位置。(10)寫(xiě)磁盤(pán)命令 W格式1:W驅(qū)動(dòng)器號(hào)格式2:W起始地址 功能:格式1把指定地址開(kāi)始的內(nèi)容數(shù)據(jù)寫(xiě)到磁盤(pán)上指定的扇區(qū)中。格式2將起始地址的BX10000H+CX個(gè)字節(jié)內(nèi)容存放到由N命令指定的文件中。在格式2的W命令之前,除用N命令指定存盤(pán)的文件名外,還必須將要寫(xiě)的字節(jié)數(shù)用R命令送入BX和CX中。(11)退出命令 Q 格式:Q 功能:退

17、出DEBUG,返回到操作系統(tǒng)。以上介紹的是DEBUG常用命令,其他命令請(qǐng)參考有關(guān)書(shū)籍。實(shí)驗(yàn)一 DOS常用命令及8088指令使用實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)掌握下列知識(shí): 1、DOS命令:DIR,DEL,RENAME,FORMAT,COPY。2、8088指令:MOV,ADD,ADC,SUB,SBB,DAA,XCHG3、DEBUG命令: A,D,E,F,H,R,T,U。4、BCD碼,ASCII碼及用16進(jìn)制數(shù)表示二進(jìn)制碼的方法。5、8088寄存器: AX,BX,CX,DX,F,IP。內(nèi)容及步驟:一、DOS常用命令練習(xí):1、將機(jī)房提供的系統(tǒng)盤(pán)插入A驅(qū)動(dòng)器中,開(kāi)機(jī),出現(xiàn)提示符后打入命令FORMAT B:/S。等

18、屏幕上出現(xiàn)提示后將新盤(pán)插入B驅(qū)動(dòng)器并打回車(chē)。PC機(jī)即對(duì)新盤(pán)格式化并將糸統(tǒng)拷入。2、打命令 COPY A:*。* B 將糸統(tǒng)盤(pán)上全部文件拷到你的盤(pán)上。3、將新盤(pán)插到 A驅(qū)動(dòng)器中,用DIR命令查看盤(pán)上文件。4、用命令 COPY DEBUG。COM BUG 復(fù)制一個(gè)文件。5、用命令 RENAME BUG BG 將BUG 文件改為BG。6、用命令 DEL BG 將文件BG刪除。在操作時(shí)要注意提示信息,并按提示操作。二、DEBUG 命令使用:1、打 DEBUG 進(jìn)入 DEBUG 控制,顯示提示苻 _ 。2、用命令 F100 10F A 將A的ASCII碼填入內(nèi)存。3、用命令 D100 10F 觀(guān)察內(nèi)存中

19、的16進(jìn)制碼及屏幕右邊的ASCII字符。4、用命令 F110 11F 41 重復(fù)上二項(xiàng)實(shí)驗(yàn),觀(guān)察結(jié)果并比較。5、用命令 E100 30 31 32 3F將30H-3FH寫(xiě)入地址為100開(kāi)始的內(nèi)存單元中,再用D命令觀(guān)察結(jié)果,看鍵入的16進(jìn)制數(shù)是什么字符的ASCII碼?6、用H命令檢查下列各組16進(jìn)制數(shù)加減結(jié)果并和你的手算結(jié)果比較:(1)34H,22H(2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758,347FH7、用R 命令檢查各寄存器內(nèi)容,特別注意AX,BX,CX,DX,IP及標(biāo)志位中ZF,CF和AF的內(nèi)容。8、用R命令將AX,BX內(nèi)容改寫(xiě)為1050H及23A8H

20、。三、8088常用指令練習(xí)1、傳送指令1)用A命令在內(nèi)存100H處鍵入下列內(nèi)容:MOVAX,1234MOVBX,5678XCHGAX,BXMOVAH,35MOVAL,48MOVDX,75ABXCHGAX,DX2)用U命令檢查鍵入的程序并記錄,特別注意左邊的機(jī)器碼。3)用T命令逐條運(yùn)行這些指令,每運(yùn)行一行檢查并記錄有關(guān)寄存器及IP的變化情況。并注意標(biāo)志位有無(wú)變化。2、加減法指令:1)用A命令在內(nèi)存100H處鍵入下列內(nèi)容:MOVAH,34MOVAL,22ADDAL,AHSUBAL,78MOVCX,1284MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2)用U命令檢查鍵入的程序

21、及對(duì)應(yīng)的機(jī)器碼。3)用T命令逐條運(yùn)行這些指令,檢查并記錄有關(guān)寄存器及ZF情況。思考:這次運(yùn)行還是打入T,行不行?怎么辦?用R命令檢查一下IP的內(nèi)容。注意T命令與IP的關(guān)系。3、帶進(jìn)位加減法:1)用A命令在內(nèi)存200H處鍵入下列內(nèi)容,并用U命令檢查:MOVAH,12MOVAL,84MOVCH,56MOVCL,78ADDAL,CLADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,342)用T命令逐條運(yùn)行這些指令,檢查并記錄有寄存器及CF內(nèi)容。3)上面這段程序若改用16位操作指令達(dá)到同樣結(jié)果,怎么改?試修改并運(yùn)行之。4、BCD碼加減法1)內(nèi)容:MOVAL,58ADDAL,2

22、5DAA2)要求:用A 命令鍵入,U命令檢查,T命令逐條運(yùn)行并記錄有關(guān)寄存器及AF內(nèi)容。實(shí)驗(yàn)報(bào)告要求:1、16進(jìn)制數(shù)加減法手算結(jié)果及實(shí)驗(yàn)結(jié)果2、8088常用指令練習(xí)部分的逐條運(yùn)行記錄,思考結(jié)果及自編程序運(yùn)行記錄 (列出自編程序)。附:DEBUG 使用:1、打 DEBUG 進(jìn)入 DEBUG,顯示提示苻 _ 。2、退出DEBUG命令:Q3、顯示內(nèi)存命令:D 起始地址 結(jié)束地址4、修改內(nèi)存命令:E 起始地址,連續(xù)修改打空格鍵。打回車(chē)鍵退出E命令。5、檢查寄存器命令:R標(biāo)志位顯示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6、修改寄存器命令:R

23、寄存器名7、小匯編命令:A 起始地址,不輸入指令打回車(chē)鍵退出A命令。8、反匯編命令:U 起始地址 結(jié)束地址9、文件命名命令:N 盤(pán)號(hào):文件名10、讀文件命令:L 內(nèi)存地址11、寫(xiě)文件命令:W 內(nèi)存地址10、讀扇區(qū)命令:L 內(nèi)存地址 盤(pán)號(hào)(0-A:,1-B:) 扇區(qū)號(hào) 扇區(qū)數(shù)11、寫(xiě)扇區(qū)命令:W 內(nèi)存地址 盤(pán)號(hào) 扇區(qū)號(hào) 扇區(qū)數(shù)12、運(yùn)行命令:G=起始地址 結(jié)束(斷點(diǎn))地址13、單步命令:T=起始地址 運(yùn)行指令數(shù),進(jìn)入子程序內(nèi)部。14、單步命令:P=起始地址 運(yùn)行指令數(shù),不進(jìn)入子程序內(nèi)部。15、內(nèi)存搬家命令:M 起始地址 結(jié)束地址 目的地址實(shí)驗(yàn)二 內(nèi)存操作數(shù)及尋址方法 實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)掌握下列知

24、識(shí): 1、DEBUG命令:G,N,W,L及Q。 2、8088系統(tǒng)中數(shù)據(jù)在內(nèi)存中的存放方式和內(nèi)存操作數(shù)的幾種尋址方式。 3、8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。 4、8088匯編語(yǔ)言偽操作:BYTE PTR,WORD PTR。 5、求累加和程序和多字節(jié)加減法程序。 實(shí)驗(yàn)內(nèi)容和步驟: 一、內(nèi)存操作數(shù)及各種尋址方式使用: 內(nèi)容:MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD P

25、TRBX+SI+2,2846步驟: 1)用A命令鍵入上述程序,并用T命令逐條運(yùn)行。2)每運(yùn)行一條有關(guān)內(nèi)存操作數(shù)的指令,要用D命令檢查并記錄有關(guān)內(nèi)存單元的內(nèi)容并注明是什么尋址方式。注意D命令顯示結(jié)果中右邊的ASCII字符及雙字節(jié)數(shù)存放法。思考:有關(guān)指令中BYTE PTR及WORD PTR偽操作不加行不行?試一試。 二、求累加和程序:程序:MOVBX,1000MOVCX,10SUBAX,AXLOP: ADDAL,BXADCAH,0INCBXJ:LOOPLOPINT3步驟:1)用A命令將程序鍵入到100H開(kāi)始的內(nèi)存中,在鍵入時(shí)記下標(biāo)號(hào)LOP和J的實(shí)際地址,在鍵入LOOP指令時(shí)LOP用實(shí)際地址值代替。

26、2)用命令N AA將此程序命名為文件AA(文件名可任取)。3)用R命令將BX:CX改為程序長(zhǎng)度值(即最后一條指令后面的地址減去開(kāi)始地址)4)用命令W 100將此程序存到AA命名的磁盤(pán)文件中。5)用命令Q退出DEBUG。6)用命令DEBUG AA再次調(diào)入DEBUG和文件AA,可用U命令檢查調(diào)入程序。若調(diào)入DEBUG時(shí)忘了加AA文件名,可用N命令和L命令將文件調(diào)入。7)用E命令在內(nèi)存地址1000H處鍵入16個(gè)數(shù)字8)用命令G=100 J(J用實(shí)際地址代替),使程序運(yùn)行并停在斷點(diǎn)J上,檢查AX,BX的值是否符合你的預(yù)計(jì)值。9)用T命令運(yùn)行一步,觀(guān)察程序方向(IP值)和CX值是否與你的估計(jì)一樣,若不一

27、樣,檢查程序是否有錯(cuò)。10)重復(fù)G J與T,再檢查AX是否正確。11)用G命令使程序運(yùn)行到結(jié)束,檢查AX值是否正確。三、多字節(jié)加法程序。程序:MOVDI,1000MOVCX,8MOVSI,2000CLCLOP: MOVAL,SIADCDI,ALINCSIINCDILOOPLOPINT20步驟:1)用命令鍵入此程序2)用E命令在1000H開(kāi)始處鍵入一個(gè)8字節(jié)被加數(shù),在2000H開(kāi)始處鍵入一個(gè)8字節(jié)加數(shù),均為低字節(jié)在前面。3)。用G命令運(yùn)行此程序,并用D命令檢查其結(jié)果(存放在哪里?),是否正確?4)將INT 20H指令改為INT 3,有何區(qū)別?若這條指令不加,行不行?試一試。四。自編程序:用16位

28、減法指令編一個(gè)32位(4字節(jié))數(shù)減法程序,兩個(gè)源數(shù)及結(jié)果存放地址同上題。調(diào)試并做記錄。實(shí)驗(yàn)報(bào)告要求:1、各項(xiàng)實(shí)驗(yàn)結(jié)果記錄。2、自編程序原稿及調(diào)試后修正稿,寫(xiě)出原稿錯(cuò)在那里。實(shí)驗(yàn)三 數(shù)據(jù)串傳送和查表程序?qū)嶒?yàn)?zāi)康?通過(guò)實(shí)驗(yàn)掌握下列知識(shí):1、堆棧。堆棧指示器SP和堆棧操作指令PUSH。POP。2、段寄存器和物理地址計(jì)算。3、查表法和查表指令XLAT。4、數(shù)據(jù)串傳送程序和數(shù)據(jù)串傳送指令MOVS。STOS及重復(fù)前輟REP。5、循環(huán)指令ROL。邏輯與指令A(yù)ND和清方向位指令CLD。6、偽操作指令DB。實(shí)驗(yàn)內(nèi)容及步驟:一、利用查表方法把DX的內(nèi)容(16進(jìn)制數(shù))轉(zhuǎn)換成ASCII碼:1、用A命令鍵入下列程序:M

29、OVBX,1000MOVDI,2000MOVCX,4LOP: PUSHCXMOVCL,4ROLDX,CLPOPCXMOVAL,DLANDAL,OFXLATCLDSTOSBLOOPLOPINT202、用A命令在1000H處鍵入下列ASCII碼并用D命令檢查之:DB 0 1 2 3 4 5 6 7 8 9 A B C D E F用D命令檢查時(shí)注意左邊的ASCII碼值和右邊的字符。3、用R命令給DX送一個(gè)四位的16進(jìn)制數(shù)(例7F8E)。4、用T命令逐條運(yùn)行這程序到LOOP指令處,觀(guān)察并記錄每次運(yùn)行結(jié)果,特別是SP和堆棧內(nèi)容(用D命令檢查)5、用G命令將此程序運(yùn)行到結(jié)束,并用D命令檢查2000H處所轉(zhuǎn)

30、換的結(jié)果??勺⒁馄聊挥疫叺腁SCII字符與DX是否一致。二、數(shù)據(jù)串搬家程序:1、用A命令鍵入下列程序:MOVSI,1000MOVDI,1500MOVCX,0FLOP: MOVAL,SIMOVDI,ALINCSIINCDILOOPLOPINT202、用A命令DB偽指令在1000H鍵入下列字符串:IBM_PC COMPUTER3、用G命令運(yùn)行此程序,并用D命令檢查目的地址處的字符與源串是否一致。4、若此程序中的目的地址改為1002H,再運(yùn)行此程序,看能不能把1000H開(kāi)始的字符串搬到1002H開(kāi)始的地方去?修改程序以做到這一點(diǎn)。三、段寄存器概念及字符串傳送指令練習(xí):1、用A命令鍵入下列程序:MOV

31、SI,0MOVDI,0MOVAX,1000MOVDS,AXMOVAX,1500MOVES,AXMOVCX,0FCLDREPMOVSBINT202、用A命令DB偽指令在1000:0000處鍵入字符串IBM_PC COMPUTER,并用D命檢查之3、用D命令檢查0F00:1000處內(nèi)容,看是否一樣。為什么?4、用G命令運(yùn)行此程序,檢查目的地址1500:0000處內(nèi)容。并記下DS與ES值。5、修改此程序,使ES與DS為同一值,以減少一條指令,而源物理地址和目的物理地址(是多少?)仍和原來(lái)一樣。實(shí)驗(yàn)報(bào)告要求:1、各項(xiàng)實(shí)驗(yàn)記錄和思考題。2、要求你修改的程序的清單(修改后)和調(diào)試記錄。實(shí)驗(yàn)四 屏幕字符顯示

32、程序?qū)嶒?yàn)?zāi)康?通過(guò)實(shí)驗(yàn)掌握下列知識(shí):1、8088指令: JMP,ROR,XOR,HLT。2、利用DOS功能調(diào)用INT21H的2號(hào)和9號(hào)功能進(jìn)行屏幕顯示的方法。3、直接向視頻RAM(VRAM)送ASCII碼進(jìn)行屏幕顯示的方法。4、IBM-PC機(jī)的ASCII碼表及控制字符。5、命令(。COM)文件及使用方法。6、利用Break退出程序的方法及局限性。實(shí)驗(yàn)內(nèi)容及步驟:一、利用INT 21 0AH號(hào)功能調(diào)用顯示字符串。1、用A命令在100H處鍵入下列程序:MOVAH, 9MOVDX,110INT21INT202、用A命令在110H處鍵入下列字符串的ASCII碼:DBThis is a sample!$

33、3、用N命令和W命令將此程序(包括數(shù)據(jù)區(qū))存入文件名為AA。COM的磁盤(pán)文件中。(存入前BX:CX必須置為文件長(zhǎng)度值)。4、用Q命令退出DEBUG。5、在DOS命令下打AA,運(yùn)行此程序,即在屏幕上顯示This is a sample!字符串,若不出現(xiàn),用DEBUG檢查程序有無(wú)錯(cuò)誤。二、利用INT 21H 2號(hào)功能顯示字符:1、用A命令在100H處鍵入下列程序:XORDL,DLMOVCX,100LOP:MOVAH,2INT21INCDLPUSH CXMOVCX,8DELY: PUSHCXMOVCX,0J: LOOPJPOPCXLOOPDELYPOPCXLOOPLOPINT202、用G命令運(yùn)行程序

34、,即在屏幕上依次緩慢的顯示256個(gè)ASCII字符。仔細(xì)觀(guān)察每個(gè)字符,和IBM-PC ASCII碼表對(duì)照,看07H-0DH處控制字符顯示結(jié)果與表上有何不同?3、按CTRL+BREAK退出此程序,若一次不行可多做幾次。三、直接向VRAM送ASCII碼顯示字符1、用A命令在100H處鍵入下列程序:MOVAX,B000MOVDS,AXXORAL,ALXORBX,BXMOVCX,100LOP: MOVBX,ALINCBXINCALPUSHCXMOVCX,8DELY: PUSHCXMOVCX,0J: LOOPJPOPCXLOOPDELYPOPCXLOOPLOPINT202、用N命令和W命令將此程序存入BB

35、.COM文件中。(一定要先存入!)3、用G命令運(yùn)行此程序,仔細(xì)觀(guān)察每一個(gè)ASCII碼顯示結(jié)果,并和字符表及上一道程序運(yùn)行情況進(jìn)行對(duì)照,其控制字符區(qū)(07-0DH)顯示結(jié)果和INT 21H2號(hào)功能調(diào)用有何不同?四。自編一個(gè)程序,要求顯示AX的內(nèi)容,即能顯示AX=xxxx。調(diào)試時(shí)AX的內(nèi)容可用R命令賦值,也可用MOV指令賦值。實(shí)驗(yàn)報(bào)告要求:1、各項(xiàng)實(shí)驗(yàn)記錄及觀(guān)察體會(huì)。2、利用INT 21H顯示和直接向VRAM送ASCII碼顯示方法在顯示結(jié)果上有什么不同?3、自編程序草稿及調(diào)試結(jié)果。實(shí)驗(yàn)五 條件轉(zhuǎn)移指令實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)掌握下列知識(shí):1、8088指令:JZ,JNZ,JC,JNC,CMP,SHR。2、

36、程序:用字符搜索法確定字符串長(zhǎng)度。3、程序:16進(jìn)制數(shù)化為ASCII碼的一般方法。實(shí)驗(yàn)內(nèi)容及步驟:一、用字符搜索法確定字符串長(zhǎng)度:1、用A命令在100H開(kāi)始的內(nèi)存處鍵入下列程序:JMPSTARTDBThis is the program to measureDBthe length of a string!$START: MOVBX,102MOVAL,24XORCL,CLLOP: CMPAL,BXJZEXITINCBXINCCLJMPLOPEXIT: INT32、用G命令運(yùn)行此程序,并檢查CL的統(tǒng)計(jì)長(zhǎng)度是否與你自己統(tǒng)計(jì)的實(shí)際長(zhǎng)度是否一樣?二、16進(jìn)制數(shù)化ASCII碼的一般方法(顯示內(nèi)存內(nèi)容)1

37、、用A命令在100H處鍵入下列程序:MOVSI,0MOVBL,10LOP: MOVDL,SIMOVCL,4SHRDL,CLCMPDL,0AJCJ1ADDDL,7J1: ADDDL,30MOVAH,2INT21MOVDL,SIANDDL,0FCMPDL,0AJCJ2ADDDL,7J2: ADDDL,30MOVAH,2INT21MOVDL,20MOVAH,2INT21INCSIDECBLJNZLOPINT202、用N,W命令將此程序用CC.COM文件名存入磁盤(pán)。3、用Q命令退出DEBUG。4、在DOS命令狀態(tài)下直接運(yùn)行CC.COM命令文件,應(yīng)在屏幕上顯示出內(nèi)存從0000H開(kāi)始的16個(gè)字節(jié)的內(nèi)容,若

38、有錯(cuò)誤,用DEBUG檢查之。5、自編程序:修改上面程序,使除以16進(jìn)制數(shù)形式顯示內(nèi)存內(nèi)容外,還能在其右邊顯示該16進(jìn)制碼所對(duì)應(yīng)的ASCII字符,07-0D的控制字符用.代替。三、綜合程序(選做):測(cè)量一字符串長(zhǎng)度,并用16進(jìn)制數(shù)顯示之程序:JMPSTARTDBThis is a program to measure the length of a string。DB0D,0ADBthe length of the string is: $START: MOVAH,9MOVDX,102INT21MOVBX,101MOVAL,$MOVDH,FFLOP: INCBXINCDHCMPAL,BXJNZL

39、OPMOVCH,2MOVCL,4LOP1: ROLDH,CLMOVDL,DHANDDL,0FADDDL,30CMPDL,3AJCJADDDL,7J: MOVAH,2INT21DECCHJNZLOP1INT20鍵入此程序,存入?.COM文件中并在DOS命令狀態(tài)下直接運(yùn)行之,若未出現(xiàn)預(yù)期結(jié)果,用DEBUG檢查有否錯(cuò)誤?實(shí)驗(yàn)報(bào)告要求:1、自編程序草稿及調(diào)試后的正確程序。2、實(shí)驗(yàn)體會(huì)。實(shí)驗(yàn)六 匯編語(yǔ)言程序上機(jī)過(guò)程實(shí)驗(yàn)?zāi)康?1、掌握常用工具軟件 PE,MASM和LINK的使用。2、偽指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。3、利用的 1號(hào)功能實(shí)現(xiàn)鍵盤(pán)輸入的方法。4、

40、了解.EXE文件和.COM文件的區(qū)別及用INT 21H 4C號(hào)功能返回系統(tǒng)的方法。程序:datasegmentmessagedbThis is a sample program of keyboard and displydb0dh,0ah,Please strike the key!,0dh,0ah,$dataendsstacksegmentpara stack stackdb50 dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovdx,offset messagemovah,

41、9int21hagain:movah,1int21hcmpal,1bhjeexitcmpal,61hjcndcmpal,7ahjandandal,bnd:movdl,almovah,2int21hjmpagainexit:movah,4chint21hcodeendsendstart實(shí)驗(yàn)步驟:1、用用文字編輯工具(記事本或EDIT)將源程序輸入,其擴(kuò)展名為.ASM。2、用MASM對(duì)源文件進(jìn)行匯編,產(chǎn)生.OBJ文件和.LST文件。若匯編時(shí)提示有錯(cuò),用文字編輯工具修改源程序后重新匯編,直至通過(guò)。3、用TYPE命令顯示1產(chǎn)生的.LST文件。4、用LINK將.OBJ文件連接成可執(zhí)行的.EXE文件。5、

42、在DOS狀態(tài)下運(yùn)行LINK產(chǎn)生的。EXE文件。即在屏幕上顯示標(biāo)題并提示你按鍵。每按一鍵在屏幕上顯示二個(gè)相同的字符,但小寫(xiě)字母被改成大寫(xiě)。按ESC鍵可返回DOS。若未出現(xiàn)預(yù)期結(jié)果,用DEBUG檢查程序。實(shí)驗(yàn)報(bào)告:1、匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。2、思考:1)若在源程序中把INT 21H的H省去,會(huì)產(chǎn)生什么現(xiàn)象?2)把 INT 21H 4CH號(hào)功能改為 INT 20H,行不行?實(shí)驗(yàn)七 分支程序?qū)嶒?yàn)?zāi)康?1、掌握利用間接轉(zhuǎn)移指令JMP BX實(shí)現(xiàn)多岔分支的方法。2、宏替換指令MACRO及ENDM。3、符號(hào)擴(kuò)展指令CBW。實(shí)驗(yàn)程序:dispmacromsgleadx,msgmovah

43、,9int21hmovah,4chint21hendmstacksegmentstackdb256 dup(0)stackendsdatasegmentparmdb16 dup(?)brtabledwoffset bra,offset brb,offset brcdwoffset brd,offset bre,offset brfmsgadbI like my IBM-PC!$msgbdbHow are you!$msgcdbNibao College$msgddbThis is a sample$msgedbWellcome use my coputer!$msgfdbTheassemder

44、 language of 8088$errmsdbError! invalid parameter!$dataendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamoves,axmovsi,80hleadi,parmmovcx,16cldrepmovsbmovds,axcmpparm,2jcerrmoval,parm+2subal,30hjcerrcmpal,6jncerrleabx,brtablecbwaddax,axaddbx,axjmpbxerr:disperrmsbra:dispmsgabrb:dispmsgbbrc

45、:dispmsgcbrd:dispmsgdbre:dispmsgebrf:dispmsgfcodeendsendstart實(shí)驗(yàn)步驟:1、輸入并匯編此程序。要求生成一個(gè) .LST文件。用TYPE命令檢查 .LST文件,觀(guān)察宏替換命令產(chǎn)生的指令集。2、將OBJ文件連接成EXE文件(假設(shè)為AA。EXE)。3、用命令DEBUG AA.EXE XXX (XXX為任意字符串)將AA.EXE帶參數(shù)調(diào)入DEBUG用D命令觀(guān)察DS:0080處的命令行,記錄80H處的內(nèi)容和字符個(gè)數(shù)的關(guān)糸。4、退出DEBUG。直接帶參數(shù)運(yùn)行此程序:AA n(n=0-5)依次觀(guān)察并記錄 n從0到5時(shí)的運(yùn)行結(jié)果。實(shí)驗(yàn)八 多重循環(huán)程序?qū)?/p>

46、驗(yàn)?zāi)康?1、掌握多重循環(huán)程序和排序程序設(shè)計(jì)方法。2、掌握帶符號(hào)數(shù)的比較轉(zhuǎn)移指令:JL,JLE,JG,JGE3、偽指令 EQU 及操作符 $的使用。4、 COM文件的要求和生成過(guò)程。程序:codesegmentorg100hassumecs:code,ds:codemain:jmpstartarraydw1234h,5673h,7fffh,8000h,0dffhdw0ab5h,0369h,005fh,5634h,9069hcountequ$-arraystart:movcx,countshrcx,1deccxmovbl,-1again:movdx,cxandbl,bljeexitxorbl,bl

47、xorsi,siagain1:movax,arraysicmpax,arraysi+2jlenchgxchgarraysi+2,axmovarraysi,axmovbl,-1nchg:incsiincsidecdxjnzagain1loopagainexit:int20hcodeendsendmain實(shí)驗(yàn)步驟:1、輸入,匯編并連接此程序。忽略連接時(shí)的無(wú)堆棧告警。2、用EXE2BIN將 .exe文件轉(zhuǎn)換為 。COM文件,命令格式:EXE2BIN? ?.EXE ?.COM3、在DEBUG下運(yùn)行此程序,記錄運(yùn)行結(jié)果。4、將轉(zhuǎn)移指令JLE改為JBE,JGE和JAE,分別運(yùn)行并記錄排序結(jié)果。實(shí)驗(yàn)九 子程

48、序?qū)嶒?yàn)?zāi)康? 1、掌握利用堆棧傳遞參數(shù)的子程序調(diào)用方法。2、掌握子程序遞歸調(diào)用方法。3、過(guò)程調(diào)用偽指令: PROC,ENDP,NEAR和FAR。4、8088指令: CALL,RET,RET n。5、利用RET指令退出EXE文件的方法。實(shí)驗(yàn)內(nèi)容及步驟: 一、利用堆棧傳遞參數(shù)的子程序調(diào)用。(求累加和)程序:stacksegment stackdb256 dup(0)stackendsdatasegmentary1db1,2,3,4,5,6,7,8,9,10count1equ$-ary1sum1dw?ary2db10,11,12,13,14,15,16,17,18count2equ$-ary2sum

49、2dw?dataendsmainsegmentassumecs:main,ds:data,ss:stackstartprocfarpushdsxorax,axpushaxmovax,datamovds,axmovax,count1pushaxleaax,ary1pushaxcallfar ptr summovax,count2pushaxleaax,ary2pushaxcallfar ptr sumretstartendpmainendsprocesegmentassumecs: procesumprocfarmovbp,spmovcx,bp+6movbx,bp+4xorax,axadn:ad

50、dal,bxadcah,0incbxloopadnmovbx,axret4sumendpproceendsendstar步驟:1、輸入,匯編并將此程序連接成EXE文件。2、用DEBUG的斷點(diǎn)命令和T命令運(yùn)行此程序,觀(guān)察并記錄每次過(guò)程調(diào)用及進(jìn)出棧指令前后(帶;的語(yǔ)句)的SP和堆棧內(nèi)容。3、記錄最后結(jié)果:SUM1,SUM2的段及偏移地址和它們的內(nèi)容。二、子程序遞歸調(diào)用(求階乘)。程序:stacksegment stackdb100h dup(?)stackendsdatasegmentresuldw?dataendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:pushdssubax,axpushaxmovax,datamovds,axmovax,5callfactmovresul,axretfactprocandal,aljneiiamoval,1retiia:pushaxdecalcallfactx2:popcxmulclretfactendpmainendpcodeendsendstart步驟:1、將程序輸入,匯編并連接成EXE文件。2、用D

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論