![匯編語言程序設計實驗指導書_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/26/a5cff9c6-5014-43d8-a963-dbfc330f900f/a5cff9c6-5014-43d8-a963-dbfc330f900f1.gif)
![匯編語言程序設計實驗指導書_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/26/a5cff9c6-5014-43d8-a963-dbfc330f900f/a5cff9c6-5014-43d8-a963-dbfc330f900f2.gif)
![匯編語言程序設計實驗指導書_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/26/a5cff9c6-5014-43d8-a963-dbfc330f900f/a5cff9c6-5014-43d8-a963-dbfc330f900f3.gif)
![匯編語言程序設計實驗指導書_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/26/a5cff9c6-5014-43d8-a963-dbfc330f900f/a5cff9c6-5014-43d8-a963-dbfc330f900f4.gif)
![匯編語言程序設計實驗指導書_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-6/26/a5cff9c6-5014-43d8-a963-dbfc330f900f/a5cff9c6-5014-43d8-a963-dbfc330f900f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、西華師范大學計算機科學系自編講義匯編語言程序設計實驗指導書編著羅 建、李艷梅鐘樂海、賴曉風 西華師范大學計算機科學系二OO三年八月匯編語言程序設計實驗指導講義目 錄序言 IBM PC匯編語言實踐操作 1實驗一 DOS常用命令及8088指令使用8實驗二 內(nèi)存操作數(shù)及尋址方法11實驗三 數(shù)據(jù)串傳送和查表程序13實驗四 屏幕字符顯示程序15實驗五 條件轉(zhuǎn)移指令17實驗六 匯編語言程序上機過程20實驗七 分支程序22實驗八 多重循環(huán)程序24實驗九 子程序25實驗十 音樂程序28實驗十一 數(shù)碼轉(zhuǎn)換程序30實驗十二 鍵盤和窗口程序33實驗十三 活動圖形顯示程序35實驗十四 磁盤文件操作程序38實驗十五 絕
2、對磁盤讀寫程序44IBM PC匯編語言實踐操作 本章主要介紹了匯編語言源程序的編輯、匯編、連接的方法,DEBUG調(diào)試命令及其使用方法 一、編輯源程序 匯編語言源程序:用匯編語句編寫的解決應用問題的程序。匯編程序:將匯編語言源程序翻譯成機器語言程序的系統(tǒng)。匯編:將匯編語言程序翻譯成機器語言程序的過程。在編輯匯編語言源程序時,對計算機硬件工作環(huán)境無特殊要求,對軟件工作環(huán)境要求也很簡單,只需用建立ASCII碼文本文件的軟件即可。(1)編輯軟件行編輯軟件:EDLIN.COM全屏編輯軟件:WPS、EDIT.COM、NE.COM、WORD、PE等。當輸入、建立和修改源程序時,可任選一種編輯軟件,不要用格式
3、控制符,要求編輯完成的文件擴展名一定是.ASM。(2)匯編程序有匯編ASM.EXE、宏匯編MASM.EXE及TASM等,一般使用宏匯編MASM.EXE,因它比ASM.EXE功能強。TASM適用于8086/8088Pentium系列指令系統(tǒng)所編寫的匯編語言程序,是比較先進的匯編工具。(3)連接程序用連接程序LINK.EXE或TLINK.EXE,將MASM.EXE產(chǎn)生的機器代碼程序(.OBJ)文件連接成可執(zhí)行程序.EXE,TLINK比LINK更先進。(4)輔助工具程序(.EXE)進行匯編語言程序調(diào)試和文件格式轉(zhuǎn)換的程序有:DEBUG.COM 動態(tài)調(diào)試程序EXE2BIN.EXE文件格式轉(zhuǎn)換程序CRE
4、F.EXE交叉引用程序編輯、匯編、連接、調(diào)試過程如圖1.1所示。 TD(turbo Debugger簡稱)也是動態(tài)調(diào)試程序,可在DOS和Windows環(huán)境下運行,用戶界面十分友好。二、 匯編源程序 用編輯軟件建立的源程序.ASM文件,必須經(jīng)過匯編才能產(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:以上信息中方括中為該項提示的缺省回答值,冒號后面等待用戶輸入信息,若不改變?nèi)笔≈祫t直接按回車鍵。匯編后生成以下幾個文件:(1).OBJ文件.OBJ文件是必須生成的一個目標代碼文件,當源程序中無語法錯誤時,則在當前工作盤上自動存入一個.OBJ文件,供下一步連接用。若源程序有語法錯誤時,會出現(xiàn)錯誤信息提示: 源程序文件行錯誤信息代碼錯誤說明信息最后信息提示: Warningerrors(警告錯誤) Severeerrors(嚴重錯誤)若嚴重錯誤總數(shù)不為0,則.OBJ文件沒有生成,需回到編輯狀態(tài)下修改源程序直到無錯為止。(
6、2).LST文件(列表文件).LST文件對調(diào)試程序有幫助,它是將源程序中各語句及其對應的目標代碼和符號表以清單方式列出,如果需要,在屏幕顯示的第二個提問的冒號后輸入文件名即可,如果不需要,直接按回車鍵。(3).CRF文件(交叉引用文件)交叉引用.CRF文件給出了源程序中定義的符號引用情況,按字母順序排列。.CRF文件不可顯示,須用CREF.EXE系統(tǒng)程序?qū)?CRF文件轉(zhuǎn)換成為.REF文件后方可顯示輸出。若按后一種格式輸入,系統(tǒng)會依次出現(xiàn)四個提示信息,比第一種格式多了一項源程序文件名的輸入。應答方式與第一種格式相同。三、 連接目標程序 匯編后生成的.OBJ文件,其所有目標代碼的地址都是浮動的偏移
7、地址,機器不能直接運行。必須用連接程序(LINK.EXE)對其進行連接裝配定位,產(chǎn)生.EXE可執(zhí)行文件,方可運行。在系統(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í)行文件)若采用方括號中的默認值,直接按回車鍵,
8、否則需重新輸入一文件名。若連接過程中無錯誤,則自動在當前工作盤生成.EXE文件。若有錯誤,則會給出錯誤信息提示,這時必須重新修改源程序,再匯編、連接。(2).MAP(連接映像文件)(3).LIB庫文件連接程序詢問是否使用某種庫文件,不需使用庫文件直接按回車鍵。(4)若要連接多個模塊目標程序,可用“+”把它們連接起來。 如:LINK files1+files2+files3若直接鍵入:LINK會依次出現(xiàn)四個提示信息,應答方式應與LINK相同,僅增加了一項輸出,詢問被連接的目標文件名字:Object Modeules.OBJ:格式:LINK ;多了一個分號,表示結(jié)束后續(xù)詢問。四、 運行程序 經(jīng)過匯
9、編、連接后生成的.EXE文件,可在DOS系統(tǒng)直接運行,只要鍵入相應的文件名即可。如:C:MASMDOS的COMMAND.COM模塊將該程序裝配到內(nèi)存,并設置和分配啟動地址。也可在DEBUG調(diào)試程序下運行。如何用DEBUG程序來運行和調(diào)試程序?qū)⒃贒EBUG調(diào)試程序中詳細討論。五、 DEBUG調(diào)試程序 DEBUG.EXE程序是專門為分析、研制和開發(fā)匯編語言程序而設計的一種調(diào)試工具,具有跟蹤程序執(zhí)行、觀察中間運行結(jié)果、顯示和修改寄存器或存儲單元內(nèi)容等多種功能。它能使程序設計人員或用戶觸及到機器內(nèi)部,因此可以說它是80X86CPU的心靈窗口,也是我們學習匯編語言必須掌握的調(diào)試工具。 1)DEBUG程序
10、使用在DOS提示符下鍵入命令: CDEBUG 盤符:路徑文件名.EXE參數(shù)1參數(shù)2 這時屏幕上出現(xiàn)DEBUG的提示符“-”,表示系統(tǒng)在DEBUG管理之下,此時可以用DEBUG進行程序調(diào)試。若所有選項省略,僅把DEBUG裝入內(nèi)存,可對當前內(nèi)存中的內(nèi)容進行調(diào)試,或者再用N和L命令,從指定盤上裝入要調(diào)試的程序;若命令行中有文件名,則DOS把DEBUG程序調(diào)入內(nèi)存后,再由DEBUG將指定的文件名裝入內(nèi)存。2)DEBUG的常用命令(1)匯編命令 A格式:A起始地址功能:將輸入源程序的指令匯編成目標代碼并從指定地址單元開始存放。若缺省起始地址,則從當前CS:100地址開始存放。A命令按行匯編,主要是用于小
11、段程序的匯編或?qū)δ繕顺绦虻男薷摹?(2)反匯編命令 U 格式1:U起始地址 格式2:U起始地址結(jié)束地址|字節(jié)數(shù) 功能:格式1從指定起始地址處開始將32個字節(jié)的目標代碼轉(zhuǎn)換成匯編指令形式,缺省起始地址,則從當前地址CS:IP開始。 格式2將指定范圍的內(nèi)存單元中的目標代碼轉(zhuǎn)換成匯編指令。(3)顯示、修改寄存器命令 R格式:R寄存器名功能:若給出寄存器名,則顯示該寄存器的內(nèi)容并可進行修改。缺省寄存器名,則按以下格式顯示所有寄存器的內(nèi)容及當前值(不能修改)。 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)容 : ;供修改,不修改按回車。 若對標志寄存器進行修改,輸入:-RF 屏幕顯示如下信息,分別表示OF、DF、IF、SF、ZF、AF、PF、CF的狀態(tài)。 NV UP DI PL NZ NA PO NC不修改按回車鍵。要修改需個別輸入一個或多個此標志的相反值,再按回車鍵。R命令只能顯示、修改16位寄存器。(4)顯示存儲單元命令 D格式1:D起始地址 格式2:D起始地址結(jié)束地址|字節(jié)數(shù) 功能:格式1從起始地
13、址開始按十六進制顯示80H個單元的內(nèi)容,每行16個單元,共8行,每行右邊顯示16個單元的ASCII碼,不可顯示的ASCII碼則顯示“”。格式2顯示指定范圍內(nèi)存儲單元的內(nèi)容,其他顯示方式與格式1一樣。如果缺省起始地址或地址范圍,則從當前的地址開始按格式1顯示。例如:-D 200;表示從DS:0200H開始顯示128個單元內(nèi)容-D 100 120;表示顯示DS:0100-DS:0120單元的內(nèi)容 說明:在DEBUG中,地址表示方式有如下形式: 段寄存器名:相對地址,如:DS:100段基值:偏移地址(相對地址),如:23A0:1500(5)修改存儲單元命令 E格式1:E起始地址 內(nèi)容表 格式2:E地
14、址 功能:格式1按內(nèi)容表的內(nèi)容修改從起始地址開始的多個存儲單元內(nèi)容,即用內(nèi)容表指定的內(nèi)容來代替存儲單元當前內(nèi)容。例如:E DS:0100 VAR 12 34表示從DS:0100 為起始單元的連續(xù)五個字節(jié)單元內(nèi)容依次被修改為V、A、R、12H、34H。格式2是逐個修改指定地址單元的當前內(nèi)容。如:E DS:0010 156F:0010 41.5F其中156F:0010單元原來的值是41H,5FH為輸入的修改值。若只修改一個單元的內(nèi)容,這時按回車鍵即可;若還想繼續(xù)修改下一個單元內(nèi)容,此時應按空格鍵,就顯示下一個單元的內(nèi)容,需修改就鍵入新的內(nèi)容,不修改再按空格跳過,如此重復直到修改完畢,按回車鍵返回D
15、EBUG“-”提示符。如果在修改過程中,將空格鍵換成按“-”鍵,則表示可以修改前一個單元的內(nèi)容。(6)運行命令 G格式:G=起始地址第一斷點地址第二斷點地址功能:CPU從指定起始地址開始執(zhí)行,依次在第一、第二等斷點處中斷。若缺省起始地址,則從當前CS:IP指示地址開始執(zhí)行一條指令。最多可設置10個斷點。(7)跟蹤命令 T格式:T起始地址正整數(shù)功能:從指定地址開始執(zhí)行正整數(shù)條指令,若缺省正整數(shù),表示執(zhí)行一條指令,若兩項都缺省,表示從當前CS:IP指示地址開始執(zhí)行一條指令。(8)指定文件命令 N 格式:N功能:指定即將調(diào)入內(nèi)存或從內(nèi)存寫入磁盤的文件名。該命令應該用在L命令和W命令之前。(9)裝入命
16、令 L 格式1:L起始地址盤符號扇區(qū)號扇區(qū)數(shù) 格式2:L起始地址 功能:格式1根據(jù)盤符號,將指定扇區(qū)的內(nèi)容裝入到指定起始地址的存儲區(qū)中。格式2將N命令指出的文件裝入到指定起始地址的存儲區(qū)中,若省略起始地址,則裝入到CS:100處或按原來文件定位約定裝入到相應位置。(10)寫磁盤命令 W格式1:W驅(qū)動器號格式2:W起始地址 功能:格式1把指定地址開始的內(nèi)容數(shù)據(jù)寫到磁盤上指定的扇區(qū)中。格式2將起始地址的BX10000H+CX個字節(jié)內(nèi)容存放到由N命令指定的文件中。在格式2的W命令之前,除用N命令指定存盤的文件名外,還必須將要寫的字節(jié)數(shù)用R命令送入BX和CX中。(11)退出命令 Q 格式:Q 功能:退
17、出DEBUG,返回到操作系統(tǒng)。以上介紹的是DEBUG常用命令,其他命令請參考有關(guān)書籍。實驗一 DOS常用命令及8088指令使用實驗目的:通過實驗掌握下列知識: 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進制數(shù)表示二進制碼的方法。5、8088寄存器: AX,BX,CX,DX,F,IP。內(nèi)容及步驟:一、DOS常用命令練習:1、將機房提供的系統(tǒng)盤插入A驅(qū)動器中,開機,出現(xiàn)提示符后打入命令FORMAT B:/S。等
18、屏幕上出現(xiàn)提示后將新盤插入B驅(qū)動器并打回車。PC機即對新盤格式化并將糸統(tǒng)拷入。2、打命令 COPY A:*。* B 將糸統(tǒng)盤上全部文件拷到你的盤上。3、將新盤插到 A驅(qū)動器中,用DIR命令查看盤上文件。4、用命令 COPY DEBUG。COM BUG 復制一個文件。5、用命令 RENAME BUG BG 將BUG 文件改為BG。6、用命令 DEL BG 將文件BG刪除。在操作時要注意提示信息,并按提示操作。二、DEBUG 命令使用:1、打 DEBUG 進入 DEBUG 控制,顯示提示苻 _ 。2、用命令 F100 10F A 將A的ASCII碼填入內(nèi)存。3、用命令 D100 10F 觀察內(nèi)存中
19、的16進制碼及屏幕右邊的ASCII字符。4、用命令 F110 11F 41 重復上二項實驗,觀察結(jié)果并比較。5、用命令 E100 30 31 32 3F將30H-3FH寫入地址為100開始的內(nèi)存單元中,再用D命令觀察結(jié)果,看鍵入的16進制數(shù)是什么字符的ASCII碼?6、用H命令檢查下列各組16進制數(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及標志位中ZF,CF和AF的內(nèi)容。8、用R命令將AX,BX內(nèi)容改寫為1050H及23A8H
20、。三、8088常用指令練習1、傳送指令1)用A命令在內(nèi)存100H處鍵入下列內(nèi)容:MOVAX,1234MOVBX,5678XCHGAX,BXMOVAH,35MOVAL,48MOVDX,75ABXCHGAX,DX2)用U命令檢查鍵入的程序并記錄,特別注意左邊的機器碼。3)用T命令逐條運行這些指令,每運行一行檢查并記錄有關(guān)寄存器及IP的變化情況。并注意標志位有無變化。2、加減法指令:1)用A命令在內(nèi)存100H處鍵入下列內(nèi)容:MOVAH,34MOVAL,22ADDAL,AHSUBAL,78MOVCX,1284MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2)用U命令檢查鍵入的程序
21、及對應的機器碼。3)用T命令逐條運行這些指令,檢查并記錄有關(guān)寄存器及ZF情況。思考:這次運行還是打入T,行不行?怎么辦?用R命令檢查一下IP的內(nèi)容。注意T命令與IP的關(guān)系。3、帶進位加減法:1)用A命令在內(nèi)存200H處鍵入下列內(nèi)容,并用U命令檢查:MOVAH,12MOVAL,84MOVCH,56MOVCL,78ADDAL,CLADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,342)用T命令逐條運行這些指令,檢查并記錄有寄存器及CF內(nèi)容。3)上面這段程序若改用16位操作指令達到同樣結(jié)果,怎么改?試修改并運行之。4、BCD碼加減法1)內(nèi)容:MOVAL,58ADDAL,2
22、5DAA2)要求:用A 命令鍵入,U命令檢查,T命令逐條運行并記錄有關(guān)寄存器及AF內(nèi)容。實驗報告要求:1、16進制數(shù)加減法手算結(jié)果及實驗結(jié)果2、8088常用指令練習部分的逐條運行記錄,思考結(jié)果及自編程序運行記錄 (列出自編程序)。附:DEBUG 使用:1、打 DEBUG 進入 DEBUG,顯示提示苻 _ 。2、退出DEBUG命令:Q3、顯示內(nèi)存命令:D 起始地址 結(jié)束地址4、修改內(nèi)存命令:E 起始地址,連續(xù)修改打空格鍵。打回車鍵退出E命令。5、檢查寄存器命令:R標志位顯示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6、修改寄存器命令:R
23、寄存器名7、小匯編命令:A 起始地址,不輸入指令打回車鍵退出A命令。8、反匯編命令:U 起始地址 結(jié)束地址9、文件命名命令:N 盤號:文件名10、讀文件命令:L 內(nèi)存地址11、寫文件命令:W 內(nèi)存地址10、讀扇區(qū)命令:L 內(nèi)存地址 盤號(0-A:,1-B:) 扇區(qū)號 扇區(qū)數(shù)11、寫扇區(qū)命令:W 內(nèi)存地址 盤號 扇區(qū)號 扇區(qū)數(shù)12、運行命令:G=起始地址 結(jié)束(斷點)地址13、單步命令:T=起始地址 運行指令數(shù),進入子程序內(nèi)部。14、單步命令:P=起始地址 運行指令數(shù),不進入子程序內(nèi)部。15、內(nèi)存搬家命令:M 起始地址 結(jié)束地址 目的地址實驗二 內(nèi)存操作數(shù)及尋址方法 實驗目的:通過實驗掌握下列知
24、識: 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匯編語言偽操作:BYTE PTR,WORD PTR。 5、求累加和程序和多字節(jié)加減法程序。 實驗內(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命令逐條運行。2)每運行一條有關(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開始的內(nèi)存中,在鍵入時記下標號LOP和J的實際地址,在鍵入LOOP指令時LOP用實際地址值代替。
26、2)用命令N AA將此程序命名為文件AA(文件名可任取)。3)用R命令將BX:CX改為程序長度值(即最后一條指令后面的地址減去開始地址)4)用命令W 100將此程序存到AA命名的磁盤文件中。5)用命令Q退出DEBUG。6)用命令DEBUG AA再次調(diào)入DEBUG和文件AA,可用U命令檢查調(diào)入程序。若調(diào)入DEBUG時忘了加AA文件名,可用N命令和L命令將文件調(diào)入。7)用E命令在內(nèi)存地址1000H處鍵入16個數(shù)字8)用命令G=100 J(J用實際地址代替),使程序運行并停在斷點J上,檢查AX,BX的值是否符合你的預計值。9)用T命令運行一步,觀察程序方向(IP值)和CX值是否與你的估計一樣,若不一
27、樣,檢查程序是否有錯。10)重復G J與T,再檢查AX是否正確。11)用G命令使程序運行到結(jié)束,檢查AX值是否正確。三、多字節(jié)加法程序。程序:MOVDI,1000MOVCX,8MOVSI,2000CLCLOP: MOVAL,SIADCDI,ALINCSIINCDILOOPLOPINT20步驟:1)用命令鍵入此程序2)用E命令在1000H開始處鍵入一個8字節(jié)被加數(shù),在2000H開始處鍵入一個8字節(jié)加數(shù),均為低字節(jié)在前面。3)。用G命令運行此程序,并用D命令檢查其結(jié)果(存放在哪里?),是否正確?4)將INT 20H指令改為INT 3,有何區(qū)別?若這條指令不加,行不行?試一試。四。自編程序:用16位
28、減法指令編一個32位(4字節(jié))數(shù)減法程序,兩個源數(shù)及結(jié)果存放地址同上題。調(diào)試并做記錄。實驗報告要求:1、各項實驗結(jié)果記錄。2、自編程序原稿及調(diào)試后修正稿,寫出原稿錯在那里。實驗三 數(shù)據(jù)串傳送和查表程序?qū)嶒災康?通過實驗掌握下列知識:1、堆棧。堆棧指示器SP和堆棧操作指令PUSH。POP。2、段寄存器和物理地址計算。3、查表法和查表指令XLAT。4、數(shù)據(jù)串傳送程序和數(shù)據(jù)串傳送指令MOVS。STOS及重復前輟REP。5、循環(huán)指令ROL。邏輯與指令AND和清方向位指令CLD。6、偽操作指令DB。實驗內(nèi)容及步驟:一、利用查表方法把DX的內(nèi)容(16進制數(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命令檢查時注意左邊的ASCII碼值和右邊的字符。3、用R命令給DX送一個四位的16進制數(shù)(例7F8E)。4、用T命令逐條運行這程序到LOOP指令處,觀察并記錄每次運行結(jié)果,特別是SP和堆棧內(nèi)容(用D命令檢查)5、用G命令將此程序運行到結(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命令運行此程序,并用D命令檢查目的地址處的字符與源串是否一致。4、若此程序中的目的地址改為1002H,再運行此程序,看能不能把1000H開始的字符串搬到1002H開始的地方去?修改程序以做到這一點。三、段寄存器概念及字符串傳送指令練習: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命令運行此程序,檢查目的地址1500:0000處內(nèi)容。并記下DS與ES值。5、修改此程序,使ES與DS為同一值,以減少一條指令,而源物理地址和目的物理地址(是多少?)仍和原來一樣。實驗報告要求:1、各項實驗記錄和思考題。2、要求你修改的程序的清單(修改后)和調(diào)試記錄。實驗四 屏幕字符顯示
32、程序?qū)嶒災康?通過實驗掌握下列知識:1、8088指令: JMP,ROR,XOR,HLT。2、利用DOS功能調(diào)用INT21H的2號和9號功能進行屏幕顯示的方法。3、直接向視頻RAM(VRAM)送ASCII碼進行屏幕顯示的方法。4、IBM-PC機的ASCII碼表及控制字符。5、命令(。COM)文件及使用方法。6、利用Break退出程序的方法及局限性。實驗內(nèi)容及步驟:一、利用INT 21 0AH號功能調(diào)用顯示字符串。1、用A命令在100H處鍵入下列程序:MOVAH, 9MOVDX,110INT21INT202、用A命令在110H處鍵入下列字符串的ASCII碼:DBThis is a sample!$
33、3、用N命令和W命令將此程序(包括數(shù)據(jù)區(qū))存入文件名為AA。COM的磁盤文件中。(存入前BX:CX必須置為文件長度值)。4、用Q命令退出DEBUG。5、在DOS命令下打AA,運行此程序,即在屏幕上顯示This is a sample!字符串,若不出現(xiàn),用DEBUG檢查程序有無錯誤。二、利用INT 21H 2號功能顯示字符:1、用A命令在100H處鍵入下列程序:XORDL,DLMOVCX,100LOP:MOVAH,2INT21INCDLPUSH CXMOVCX,8DELY: PUSHCXMOVCX,0J: LOOPJPOPCXLOOPDELYPOPCXLOOPLOPINT202、用G命令運行程序
34、,即在屏幕上依次緩慢的顯示256個ASCII字符。仔細觀察每個字符,和IBM-PC ASCII碼表對照,看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命令運行此程序,仔細觀察每一個ASCII碼顯示結(jié)果,并和字符表及上一道程序運行情況進行對照,其控制字符區(qū)(07-0DH)顯示結(jié)果和INT 21H2號功能調(diào)用有何不同?四。自編一個程序,要求顯示AX的內(nèi)容,即能顯示AX=xxxx。調(diào)試時AX的內(nèi)容可用R命令賦值,也可用MOV指令賦值。實驗報告要求:1、各項實驗記錄及觀察體會。2、利用INT 21H顯示和直接向VRAM送ASCII碼顯示方法在顯示結(jié)果上有什么不同?3、自編程序草稿及調(diào)試結(jié)果。實驗五 條件轉(zhuǎn)移指令實驗目的:通過實驗掌握下列知識:1、8088指令:JZ,JNZ,JC,JNC,CMP,SHR。2、
36、程序:用字符搜索法確定字符串長度。3、程序:16進制數(shù)化為ASCII碼的一般方法。實驗內(nèi)容及步驟:一、用字符搜索法確定字符串長度:1、用A命令在100H開始的內(nèi)存處鍵入下列程序:JMPSTARTDBThis is the program to measureDBthe length of a string!$START: MOVBX,102MOVAL,24XORCL,CLLOP: CMPAL,BXJZEXITINCBXINCCLJMPLOPEXIT: INT32、用G命令運行此程序,并檢查CL的統(tǒng)計長度是否與你自己統(tǒng)計的實際長度是否一樣?二、16進制數(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文件名存入磁盤。3、用Q命令退出DEBUG。4、在DOS命令狀態(tài)下直接運行CC.COM命令文件,應在屏幕上顯示出內(nèi)存從0000H開始的16個字節(jié)的內(nèi)容,若
38、有錯誤,用DEBUG檢查之。5、自編程序:修改上面程序,使除以16進制數(shù)形式顯示內(nèi)存內(nèi)容外,還能在其右邊顯示該16進制碼所對應的ASCII字符,07-0D的控制字符用.代替。三、綜合程序(選做):測量一字符串長度,并用16進制數(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)下直接運行之,若未出現(xiàn)預期結(jié)果,用DEBUG檢查有否錯誤?實驗報告要求:1、自編程序草稿及調(diào)試后的正確程序。2、實驗體會。實驗六 匯編語言程序上機過程實驗目的:1、掌握常用工具軟件 PE,MASM和LINK的使用。2、偽指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。3、利用的 1號功能實現(xiàn)鍵盤輸入的方法。4、
40、了解.EXE文件和.COM文件的區(qū)別及用INT 21H 4C號功能返回系統(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實驗步驟:1、用用文字編輯工具(記事本或EDIT)將源程序輸入,其擴展名為.ASM。2、用MASM對源文件進行匯編,產(chǎn)生.OBJ文件和.LST文件。若匯編時提示有錯,用文字編輯工具修改源程序后重新匯編,直至通過。3、用TYPE命令顯示1產(chǎn)生的.LST文件。4、用LINK將.OBJ文件連接成可執(zhí)行的.EXE文件。5、
42、在DOS狀態(tài)下運行LINK產(chǎn)生的。EXE文件。即在屏幕上顯示標題并提示你按鍵。每按一鍵在屏幕上顯示二個相同的字符,但小寫字母被改成大寫。按ESC鍵可返回DOS。若未出現(xiàn)預期結(jié)果,用DEBUG檢查程序。實驗報告:1、匯編,連接及調(diào)試時產(chǎn)生的錯誤,其原因及解決辦法。2、思考:1)若在源程序中把INT 21H的H省去,會產(chǎn)生什么現(xiàn)象?2)把 INT 21H 4CH號功能改為 INT 20H,行不行?實驗七 分支程序?qū)嶒災康?1、掌握利用間接轉(zhuǎn)移指令JMP BX實現(xiàn)多岔分支的方法。2、宏替換指令MACRO及ENDM。3、符號擴展指令CBW。實驗程序: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實驗步驟:1、輸入并匯編此程序。要求生成一個 .LST文件。用TYPE命令檢查 .LST文件,觀察宏替換命令產(chǎn)生的指令集。2、將OBJ文件連接成EXE文件(假設為AA。EXE)。3、用命令DEBUG AA.EXE XXX (XXX為任意字符串)將AA.EXE帶參數(shù)調(diào)入DEBUG用D命令觀察DS:0080處的命令行,記錄80H處的內(nèi)容和字符個數(shù)的關(guān)糸。4、退出DEBUG。直接帶參數(shù)運行此程序:AA n(n=0-5)依次觀察并記錄 n從0到5時的運行結(jié)果。實驗八 多重循環(huán)程序?qū)?/p>
46、驗目的:1、掌握多重循環(huán)程序和排序程序設計方法。2、掌握帶符號數(shù)的比較轉(zhuǎn)移指令:JL,JLE,JG,JGE3、偽指令 EQU 及操作符 $的使用。4、 COM文件的要求和生成過程。程序: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實驗步驟:1、輸入,匯編并連接此程序。忽略連接時的無堆棧告警。2、用EXE2BIN將 .exe文件轉(zhuǎn)換為 。COM文件,命令格式:EXE2BIN? ?.EXE ?.COM3、在DEBUG下運行此程序,記錄運行結(jié)果。4、將轉(zhuǎn)移指令JLE改為JBE,JGE和JAE,分別運行并記錄排序結(jié)果。實驗九 子程
48、序?qū)嶒災康? 1、掌握利用堆棧傳遞參數(shù)的子程序調(diào)用方法。2、掌握子程序遞歸調(diào)用方法。3、過程調(diào)用偽指令: PROC,ENDP,NEAR和FAR。4、8088指令: CALL,RET,RET n。5、利用RET指令退出EXE文件的方法。實驗內(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的斷點命令和T命令運行此程序,觀察并記錄每次過程調(diào)用及進出棧指令前后(帶;的語句)的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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能電網(wǎng)建設項目勞務分包施工合同范本
- 2025年度新能源材料進口合同標準范本
- 金華浙江金華蘭溪市衛(wèi)健系統(tǒng)面向高校招聘醫(yī)學類應屆畢業(yè)生29人筆試歷年參考題庫附帶答案詳解
- 金華浙江金華義烏市公證處招聘工作人員筆試歷年參考題庫附帶答案詳解
- 菏澤山東菏澤特殊教育職業(yè)學校引進高水平教練員急需緊缺人才2人筆試歷年參考題庫附帶答案詳解
- 肇慶廣東肇慶市建設工程質(zhì)量檢測站招聘合同制工作人員筆試歷年參考題庫附帶答案詳解
- 湛江廣東湛江市綠塘河濕地公園管理處招聘工作人員筆試歷年參考題庫附帶答案詳解
- 濟寧2025年山東濟寧市任城區(qū)教體系統(tǒng)校園招聘35人(曲阜師范大學站)筆試歷年參考題庫附帶答案詳解
- 畢節(jié)2025年貴州畢節(jié)市納雍縣婦幼保健院(醫(yī)共體)利園分院招聘6人筆試歷年參考題庫附帶答案詳解
- 杭州浙江杭州市余杭區(qū)良渚第一中學2024學年第二學期招聘臨時聘用教師筆試歷年參考題庫附帶答案詳解
- 室內(nèi)裝飾拆除專項施工方案
- 醫(yī)院院外會診申請單、醫(yī)師外出會診審核表、醫(yī)師外出會診回執(zhí)
- 鋼筋工程精細化管理指南(中建內(nèi)部)
- 核酸的分離與純化技術(shù)
- 2024年山西省高考考前適應性測試 (一模)英語試卷(含答案詳解)
- 教科版六年級下冊科學第三單元《宇宙》教材分析及全部教案(定稿;共7課時)
- 2024年中國鐵路投資集團有限公司招聘筆試參考題庫含答案解析
- 干部人事檔案數(shù)字化 制度
- 經(jīng)營開發(fā)部工作目標責任書
- 小班繪本教學《藏在哪里了》課件
- 滄州師范學院學士學位論文寫作指南2020版
評論
0/150
提交評論