匯編語言實驗指導(dǎo)書用_第1頁
匯編語言實驗指導(dǎo)書用_第2頁
匯編語言實驗指導(dǎo)書用_第3頁
匯編語言實驗指導(dǎo)書用_第4頁
匯編語言實驗指導(dǎo)書用_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設(shè)計實驗指導(dǎo)書匯編語言程序設(shè)計課程建設(shè)小組二五年九月內(nèi) 容 簡 介本書是為了配合IBM匯編語言程序設(shè)計課程而編寫的實驗指導(dǎo)書。配合微型計算機匯編語言程序設(shè)計的教學(xué)體系及方法,通過上機實驗循序漸進地加深對8086/88匯編語言的認識與理解,進而掌握程序設(shè)計的一般方法和技巧,并通過對程序的調(diào)試和運行,熟悉DEBUG的使用。本書編排了9個單元實驗:3個驗證性實驗,5個設(shè)計性實驗,1個綜合性實驗(選做)。每個驗證性實驗包括實驗?zāi)康?,實驗環(huán)境,實驗內(nèi)容,原理和步驟等,設(shè)計性實驗給出了基本要求,啟發(fā)學(xué)生的思考和動手的能力。本書可供各高校計算機專業(yè)、非計算機專業(yè)開設(shè)匯編語言程序設(shè)計課程用作實驗教

2、材。前 言匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機所有硬件特性并能直接控制硬件的惟一語言。因而,對程序的存儲空間和運行時間要求較高的一些實際任務(wù),一般都使用匯編語言進行編程處理;至于很多實時性強、需要直接控制硬件的應(yīng)用場合,則更是非用匯編語言不可了。匯編語言程序設(shè)計是高等院校計算機科學(xué)與技術(shù)專業(yè)“匯編語言程序設(shè)計”必修課,實踐環(huán)節(jié)是幫助學(xué)生加深認識和理解理論教學(xué)知識的重要途徑。學(xué)生應(yīng)該通過大量的上機實驗熟悉8086 CPU的指令功能、用途和使用技巧,進而通過循序漸進的程序設(shè)計練習(xí),驗證各類指令的功能和提高程序設(shè)計的能力。本實驗指導(dǎo)書由9個單元實驗組成:匯編語

3、言的調(diào)試和運行、堆棧指令和算術(shù)指令、邏輯指令和串處理指令、匯編語言程序格式、邏輯指令和程序設(shè)計、循環(huán)程序設(shè)計、子程序結(jié)構(gòu)、DOS功能調(diào)用和綜合實驗。本書所給實驗程序全部通過上機驗證,各實驗之間相互配合而又自成體系,易于為不同類型專業(yè)按其實驗教學(xué)要求選做,所以本書具有較寬的適用面。目 錄實驗一 匯編語言的調(diào)試和運行1實驗二 堆棧指令和算術(shù)指令2實驗三 邏輯指令和串處理指令4實驗四 匯編語言程序格式6實驗五 分支程序設(shè)計5實驗六 循環(huán)程序設(shè)計9實驗七 子程序結(jié)構(gòu)13實驗八 DOS功能調(diào)用16實驗九 綜合實驗20附 錄 1 ASCII碼表22附 錄 2 匯編語言常用出錯信息23附 錄 3 DEBUG

4、命令27附 錄 4 C語言調(diào)用匯編語言30實驗一 匯編語言的調(diào)試和運行一、實驗?zāi)康?、 熟悉DEBUG程序和命令,并用它運行基本指令和察看運行結(jié)果。 怎樣調(diào)用Debug 如何顯示和修改內(nèi)存單元 如何顯示和修改CPU的寄存器 各標志位的狀態(tài)是如何表示的,怎樣修改標志寄存器 怎樣匯編與反匯編 怎樣執(zhí)行程序 怎樣跟蹤程序 怎樣命名和讀寫文件 怎樣退出Debug 2、 熟悉匯編中通用傳送指令。3、 理解指令不同的尋址方式,注意規(guī)定或限制使用的寄存器如:雙操作數(shù)指令中,源操作數(shù)和目的操作數(shù)的地址不能同時為存儲器地址,段跨越前綴不能使用CS,操作對象是地址還是地址中的內(nèi)容,指令隱含使用的寄存器。二、實驗內(nèi)

5、容1、 鍵入 DEBUG 進入 DEBUG 控制狀態(tài),顯示提示符 - 。2、 用命令 F100 10F A 將A的ASCII碼填入內(nèi)存。3、 用命令 D100 10F 觀察內(nèi)存中的十六進制碼及屏幕右邊的ASCII字符。4、 用命令 F110 11F 41 重復(fù)上二項實驗,觀察結(jié)果并比較。5、 用命令 E100 30 31 32 3F將30H-3FH寫入地址為100開始的內(nèi)存單元中,再用D命令觀察結(jié)果,看鍵入的十六進制數(shù)是什么字符的ASCII碼?6、 用DEBUG調(diào)試和運行下列程序,記錄所用的DEBUG命令和運行結(jié)果。MOV WORD PTR 1100,3445MOV WORD PTR 1102

6、,5678MOV WORD PTR 1106,6732MOV AX,1100SUB AX,1102ADD AX,1106MOV 1104,AXHLT其中粗斜體的數(shù)字可以修改。7、 內(nèi)存操作數(shù)及各種尋址方式使用程序內(nèi)容:MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD PTRBX+SI+2,2846操作步驟 1)用A命令鍵入上述程序,并用T命令逐條運行。2)每運行一條有關(guān)內(nèi)存操作數(shù)的指令,要用D命令檢查并記錄有關(guān)內(nèi)存單元的內(nèi)

7、容并注明是什么尋址方式。注意:D命令顯示結(jié)果中右邊的ASCII字符及雙字節(jié)數(shù)存放法。思考:有關(guān)指令中BYTE PTR及WORD PTR偽操作不加行不行?試一試。實驗二 堆棧指令和算術(shù)指令一、實驗?zāi)康?、熟悉掌握堆棧操作指令、算術(shù)指令的格式、功能及用法。2、熟悉二進制數(shù)的四則運算指令,掌握各種運算指令的格式、用法、尋址方式和對標志位的影響,特別是對溢出標志位CF和OF的影響。二、實驗內(nèi)容1、寫出書中習(xí)題3.13所用指令,用DEBUG運行并察看和驗證運行結(jié)果,在實驗報告中畫出堆棧區(qū)和SP的內(nèi)容變化過程示意圖。2、用加減法指令計算下列各組十六進制數(shù)加減結(jié)果并和你的手算結(jié)果比較:(1)34H,22H(

8、2)56H,78H(3)A5,79H(4)1284H,5678H(5)A758H,347FH1) 用R命令檢查各寄存器內(nèi)容,特別注意AX,BX,CX,DX,IP及標志位中ZF,CF和AF的內(nèi)容。2) 用R命令將AX,BX內(nèi)容改寫為1050H及23A8H。3、加減法指令:1) 用A命令在內(nèi)存100H處鍵入下列內(nèi)容:MOVAH,34MOVAL,22ADDAL,AHSUBAL,78MOVCX,1284MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2) 用U命令檢查鍵入的程序及對應(yīng)的機器碼。3) 用T命令逐條運行這些指令,檢查并記錄有關(guān)寄存器及ZF情況。思考:這次運行還是鍵入T,

9、行不行?怎么辦?用R命令檢查一下IP的內(nèi)容。注意T命令與IP的關(guān)系。4、帶進位加減法: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é)果,怎么改?試修改并運行之。5、BCD碼加減法1)內(nèi)容:MOVAL,58ADDAL,25DAA2)要求:用A 命令鍵入,U命令檢查,T命令逐條運行并記錄有關(guān)寄存器及AF內(nèi)容。 6、自編

10、程序用16位減法指令編一個32位(4字節(jié))數(shù)減法程序,兩個源數(shù)及結(jié)果存放地址同上題。調(diào)試并做記錄。三、實驗報告要求:1、十六進制數(shù)加減法手算結(jié)果及實驗結(jié)果2、8088常用指令練習(xí)部分的逐條運行記錄,思考結(jié)果及自編程序運行記錄(列出自編程序)。3、各項實驗結(jié)果記錄。4、自編程序原稿及調(diào)試后修正稿,寫出原稿錯在那里。實驗三 邏輯指令和串處理指令一、實驗?zāi)康氖煜み壿嬤\算指令和串處理指令二、實驗內(nèi)容及步驟1、 編寫程序?qū)崿F(xiàn)AL中數(shù)乘10。2、 作業(yè)內(nèi)容上機驗證(分析結(jié)果 編寫程序 上機驗證)3、分析、理解、跟蹤執(zhí)行下列程序。 mov si,2000 mov di,3000 mov cx,000a re

11、p movsb hlt4、數(shù)據(jù)串搬家程序:1)用A命令鍵入下列程序:MOVSI,1000MOVDI,1500MOVCX,0FLOP: MOVAL,SIMOVDI,ALINCSIINCDILOOPLOPINT202)用A命令DB偽指令在1000H鍵入下列字符串:IBM_PC COMPUTER3)用G命令運行此程序,并用D命令檢查目的地址處的字符與源串是否一致。4)若此程序中的目的地址改為1002H,再運行此程序,看能不能把1000H開始的字符串搬到1002H開始的地方去?修改程序以做到這點。5、段寄存器概念及字符串傳送指令練習(xí)1)用A命令鍵入下列程序:MOVSI,0MOVDI,0MOVAX,10

12、00MOVDS,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)試記錄。實驗四 匯編語言程序格式一、實驗?zāi)康?、熟悉掌握編譯

13、和連接程序的使用。2、熟悉掌握匯編源程序的書寫格式。3、熟悉偽指令的用法,可以編寫簡單的源程序。1)掌握常用工具軟件EDIT,MASM和LINK的使用。2)偽指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。3)利用INT 21H的1號功能實現(xiàn)鍵盤輸入的方法。4)了解.EXE文件和.COM文件的區(qū)別及用INT 21H 4C號功能返回系統(tǒng)的方法。5)利用DOS功能調(diào)用INT 21H的2號和9號功能進行屏幕顯示的方法。二、實驗要求1、程序要結(jié)構(gòu)化:簡明、易讀和易調(diào)試。2、執(zhí)行速度較快。3、占用存儲空間較少。三、實驗內(nèi)容1、編一段程序,在內(nèi)存中自SQTAB(0200H)地址

14、開始的連續(xù)10個單元中存放0-9的平方值。要求利用簡單的查表法NUM(0210)單元中指定數(shù)(0-9)的平方值,并將所求平方值存入RESULT(0211)單元。2、通過編輯、編譯和連接、調(diào)試書中119、146頁的例題熟悉掌握編譯和連接程序的使用。3、作書中作業(yè)4.5 4.8 4.9 4.10 4.13 4.14 ,并編寫小程序驗證。4、編寫 4.17 程序,并上機運行。實驗五 分支程序設(shè)計一、實驗?zāi)康?、熟練掌握邏輯運算和轉(zhuǎn)移指令1)邏輯運算指令2)標號和無條件轉(zhuǎn)移指令3)比較指令和條件轉(zhuǎn)移指令2、掌握分支程序設(shè)計的原理和方法,重點掌握各種分支程序中形成和判斷條件而產(chǎn)生的程序段的設(shè)計方法和技巧

15、.二、實驗內(nèi)容1、練習(xí)邏輯運算指令、比較指令和條件轉(zhuǎn)移指令的功能、用法以及與標志位的關(guān)系和可用的尋址方式2、用地址表法,完成下面要求的多分支程序的設(shè)計。根據(jù)MODE單元中的模式字(0-7)分別轉(zhuǎn)向L0-L7標號處執(zhí)行。L0-L7處分別完成顯示0-7字符。當MODE=0時,轉(zhuǎn)L0標號,完成顯示0 當MODE=1時,轉(zhuǎn)L1標號,完成顯示1當MODE=2時,轉(zhuǎn)L2標號,完成顯示2當MODE=3時,轉(zhuǎn)L3標號,完成顯示3當MODE=4時,轉(zhuǎn)L4標號,完成顯示4當MODE=5時,轉(zhuǎn)L5標號,完成顯示5當MODE=6時,轉(zhuǎn)L6標號,完成顯示6當MODE=7時,轉(zhuǎn)L7標號,完成顯示73、編制程序?qū)崿F(xiàn)如下操作

16、:設(shè)有10個學(xué)生成績,分別統(tǒng)計低于60分、6069分、7079分、8089分、9099分及100分的人數(shù),并存放于S5、S6、S7、S8、S9、S10單元中。程序清單:; 統(tǒng)計學(xué)生成績DATA SEGMENTGRADE DW 95H,60H,75H,92H,71H,86H,54H,89H,83H,76HN EQU ($GRADE)/2ORG 30HS5 DW0S6 DW0S7DW0S8DW0S9DW0S10DW0DATAENDS;STACK SEGMENT STACKSTA DB 20 DUP (0) TOP EQU $STASTACK ENDS;CODESEGMENTMAINPROC FAR

17、ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DSSUB AX,AX PUSH AXMOV AX,DATAMOV DS,AXMOV CX,NLEA BX,GRADE ;成績表首地址COMPARE:MOV AX,BX CMP AX,60H ;60?JL FIVECMP AX,70H ;70?JL SIXCMP AX,80H ;80?JL SEVENCMP AX,90H ;90?JL EIGHTCMP AX,100H ;=100JNE NINEINC S10JMP CHANINE: INC S9JMP CHAEIGHT: INC S8JMP CHASEV

18、EN:INC S7JMP CHASIX:INC S6JMP CHAFIVE: INC S5 JMP CHACHA: ADD BX,2 ;循環(huán)學(xué)生人數(shù)LOOP COMPARERETMAIN ENDPCODE ENDS END START執(zhí)行程序后,將結(jié)果分別填入下列表中N(總?cè)藬?shù))S5S6S7S8S9S10三、實驗要求: 1、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的正、負數(shù),自編程序,試統(tǒng)計其中正數(shù)的個數(shù)存放于M_DATA單元中,負數(shù)的個數(shù)存放于P_DATA單元中。2、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的奇、偶數(shù),自編程序,試統(tǒng)計其中偶數(shù)的個數(shù)存放于M_DATA單元中,奇數(shù)的

19、個數(shù)存放于P_DATA單元中。部分程序清單 BLOCK DB 37,90,32,60,7,120COUNT EQU $BLOCKP_DATA DB COUNT DCP (0)M_DATA DB COUNT DCP (0) LEA SI,BLOOK LEA DI,P_DATA LEA BX,M_DATA MOV CX,COUNTRETRY: MOV AL,SI CMP AL,0 JGE PP MOV BX,AL INC BX JMP LOOP1PP: MOV DI,AL INC DILOOP1: INC SILOOP RETRY 要求:1 分析問題,畫出算法框圖。寫實驗預(yù)習(xí)報告。2 用匯編語言格

20、式編寫程序。3 在DOS下編輯、匯編、連接程序。4 用Debug調(diào)試程序。5 在DOS下運行并分析結(jié)果。6 寫實驗報告,畫出算法框圖。實驗六 循環(huán)程序設(shè)計一實驗?zāi)康? 掌握循環(huán)程序設(shè)計的方法(兩重性循環(huán)結(jié)構(gòu))2 掌握正確分配與使用寄存器。3 掌握控制循環(huán)的方法。二實驗內(nèi)容與要求1 請編寫一程序,從附加段中一個未排序的字數(shù)組中,找出最大數(shù)和最小數(shù)分別存放在AX 和BX寄存器中。2 以GRADE為首地址的10個字的數(shù)組中保存有學(xué)生成績。建立一個10個字的RNAK 數(shù)組,并根據(jù)GRADE中的學(xué)生成績將學(xué)生名次填入RANK數(shù)組中(提示:一個學(xué)生的名次等于成績高于等于該學(xué)生的人數(shù)加1)。 寄存器分配情況

21、說明如下: AX 存放當前被測學(xué)生的成績 BX 存放當前被測學(xué)生的相對地址指針 CX 內(nèi)循環(huán)計數(shù)值 DX 存放當前被測學(xué)生的名次計數(shù)值 SI 內(nèi)循環(huán)測試時的地址指針 DI 外循環(huán)計數(shù)值部分程序清單 (將程序補充完整);建立學(xué)生成績名次表DATA SEGMENTGRADEDW 88H,75H,95H,63H,98H,78H,87H,73H,90H,60HCOUNTEQU ($-GRADE) /2ORG 20HRANKDW 10 DUP(?)DATAENDS;STACKSEGMENT STACKSTA DB 20 DUP (20H)TOPEQU $STASTACK ENDS;CODESEGMENT

22、 ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPMOV DI, ;成績的個數(shù)MOV BX,0 LOOP1:MOV AX,GRADEBX,1MOV CX,COUNT SI,GRADE ;成績的存放地址 NEXT:CMP AX,SI NO_COUNTINC WORD PTR RANKBX;存放學(xué)生名次NO_COUNT:ADD SI,2 NEXTADD BX,2DEC DI LOOP1MOV AX,4C00HINT 21HCODEENDSENDSTART 3、 一個數(shù)組

23、DATAX,其中的數(shù)據(jù)排列規(guī)律是:頭三項是0,0,1,以每項的值均是前三項之和。試將項值小于等于2000以前的各項數(shù)據(jù)填入數(shù)組DATAX中。 算法: n 4時: an=an-1+an-2+an-3 an=2an-1an-4 要求:按上述兩種算法編程4、從DATA_BUF(1000H)開始存放50個字節(jié)數(shù)據(jù),編寫程序?qū)⑦@些數(shù)據(jù)由小到大排序,排序后的數(shù)據(jù)仍放在該區(qū)域中。要求原始數(shù)據(jù)在源程序中給出,排序前后的數(shù)據(jù)以每行10個的格式顯示在屏幕上。實驗提示: 參見教材第134頁,例5.7所用的數(shù)據(jù)如下:stack segment para stack stack db 1024 dup (?)stack

24、 endsdata segment para data data_buf db 50,49,48,47,46,45,44,43,42,41 db 40,39,38,37,36,35,34,33,32,31 db 30,29,28,27,26,25,24,23,22,21 db 20,19,18,17,16,15,14,13,12,11 db 10, 9, 8, 7, 6, 5, 4, 3, 2, 1msg1 db Raw Data:, 0dh, 0ah, $msg2 db Sorted Data:, 0dh, 0ah, $ data ends5、測量一字符串長度,并用十六進制數(shù)顯示之程序內(nèi)容:

25、JMPSTARTDBThis is a program to measure the length of a string。DB0D,0ADBthe length of the string is: $START: MOVAH,9MOVDX,102INT21MOVBX,101MOVAL,24MOVDH,FFLOP: INCBXINCDHCMPAL,BXJNZLOPMOVCH,2MOVCL,4LOP1: ROLDH,CLMOVDL,DHANDDL,0FADDDL,30CMPDL,3AJCJADDDL,7J: MOVAH,2INT21DECCHJNZLOP1INT20鍵入此程序,存入DD.COM文

26、件中并在DOS命令狀態(tài)下直接運行之,若未出現(xiàn)預(yù)期結(jié)果,用DEBUG檢查有否錯誤?三、實驗步驟和要求1、分析問題,畫出算法框圖。寫實驗預(yù)習(xí)報告。2、用匯編語言格式編寫程序。3、在DOS下編輯、匯編、連接程序。4、用Debug調(diào)試程序。5、在DOS下運行并分析結(jié)果。6、寫實驗報告,畫出算法框圖。實驗七 子程序結(jié)構(gòu)一、實驗?zāi)康?、掌握程序設(shè)計方法,合理劃分層次。2、掌握子程序的調(diào)用與返回的方法。3、了解子程序的嵌套與遞歸。二實驗內(nèi)容與要求1、將主程序中BX寄存器內(nèi)的二進制數(shù)用十六進制數(shù)的形式在屏幕上顯示出來。實驗參考程序:code segmentmain proc farassume cs:code

27、start:push dsxor ax,axpush axmov bx,1234hcall sub1 retmain endpsub1proc nearmov ch,4rotate:mov cl,4rol bx, clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit: mov dl,almov ah,2int 21hdec chjnz rotateretsub1 endpcode ends end要求:1) 分析問題,畫出算法框圖。寫實驗預(yù)習(xí)報告。2) 用匯編語言格式編寫程序。3) 在上題的基礎(chǔ),將MEM中的4個

28、字節(jié)內(nèi)容輸出到屏幕顯示。4) 在DOS下編輯、匯編、連接程序。5) 在DOS下運行并分析結(jié)果。6) 寫實驗報告,畫出算法框圖。2、編制一程序,要求鍵入一個班的學(xué)生成績,并存放于50字的ERADE數(shù)組中,然后根據(jù)ERADE中的成績,把學(xué)生名次填入50字的RANK數(shù)組中,再按學(xué)號順序把名次從終端上顯示出來。提示:1) 程序MAIN 功能:根據(jù)輸入的學(xué)生成績,計算并顯示出學(xué)生名次。2) 程序INPUT 功能:接收一個班級學(xué)生的成績,各成績之間用空格隔開。3) 程序RANKP 功能:計算一個班級學(xué)生的名次。(可參照循環(huán)程序(一)中的程序段)4) 程序OUTPUT 功能:輸出(顯示)一個班級的學(xué)生名次5

29、) 程序DECIBIN 功能:十進制轉(zhuǎn)換二進制,存入BX6) 程序BINDEC 功能:十進制轉(zhuǎn)換二進制,并在屏幕上顯示。7) 程序DEC_DIV功能:BX的內(nèi)容除以CX的內(nèi)容,并在屏幕上顯示一位商。部分程序清單: 1)鍵入學(xué)生成績 (成績之間用空格間隔,回車結(jié)束輸入) INPUT PROC MOVSI, 0MOV COUNT, 0ENTER: CALL DECIBIN INCCOUNT CMPDL, JZSTORE CMPDL,0DH JZEXIT JMPRET1STORE: MOVGRADE SI,BX ADD SI,2 JMPENTEREXIT: MOV GRADE SI, BXRET1:

30、RETINPUTENDP 2)十進制轉(zhuǎn)換成二進制DECIBIN PROC MOVBX, 0NEM: MOVAH, 1 INT 21H MOV DL, AL CMP AL, 30H JL EXIT1 CMP AL, 39H JG EXIT SUB AL, 30H CBW XCHG AX, BX MOV CX, 10 MUL CL XCHG AX, BX ADD BX, AX JMP NEW EXIT1: RET DECIBINENDP3)二進制轉(zhuǎn)換成十進制BINIDEC PROC PUSH BX PUSH CX PUSH SI PUSH DI MOV CX,100 CALL DEC_DIV MO

31、V CX,10 CALL DEC_DIV MOV CX,1 CALL DEC_DIV POP DI POPSI POPCX POP BX RETBINIDEC ENDP4)十進制轉(zhuǎn)換成ASCII碼,并輸出DEC_DIV PROC MOV AX, BX MOV DX, 0 DIV CX MOVBX, DX MOVDL, AL ADD DL, 30H MOV AH, 02H INT 21H RET DEC_DIV ENDP要求:1)自編程序主程序MAIN,子程序 OUTPUT和子程序 RANKP。2)將上述程序與自編程序統(tǒng)調(diào)。3)輸入本班級某門基礎(chǔ)課成績。 思考題 1) 寫出4位BCD碼轉(zhuǎn)二進制數(shù)

32、的算法。2) 寫出AX中進二制數(shù)轉(zhuǎn)BCD碼的算法。3) 將上述子程序結(jié)構(gòu)改為模塊化程序設(shè)計。實驗八 DOS功能調(diào)用一、實驗?zāi)康模?、掌握DOS功能調(diào)用的使用方法。2、進一步熟悉子程序的應(yīng)用。二、實驗內(nèi)容:1、從鍵盤輸入數(shù)據(jù)并顯示1) 從鍵盤輸入字符。2) 刪除指定的字符。3) 將剩余字符在屏幕上顯示。參考程序:data segmentbuffer db 80 dup(?)flag db ?data endscode segmentmain proc far assume cs:code,ds:datastart: push ds xor ax,ax push ax mov ax,data mo

33、v ds,ax mov bx,offset buffer mov flag,0next: mov ah,01h int 21h test flag,01h jnz follow cmp al,20h jnz exit mov flag,1 jmp nextfollow: cmp al,20h jz exit mov bx,al inc bx jmp nextexit: mov bx,al mov di,offset buffer mov al,5 call del mov si,offset buffer call disp retmain endpdel proc near cldloop1

34、: mov ah,di cmp ah,20h jz exit0 cmp al,di jz loop2 inc di jmp loop1loop2: mov al,di+1 mov di,al cmp al,20h jz exit0 inc di jmp loop2exit0: retdel endpdisp proc neardisp0: mov dl,si mov ah,02h int 21h inc si mov al,si cmp al,20h jnz disp0 retdisp endpcode endsend start2、輸入以空格開始以空格結(jié)束的一串字符,并在另一行顯示。參考程序

35、:data segmentbuffer db 80 dup(?)flag db ?data endscode segmentmain proc far assume cs:code,ds:datastart: push ds xor ax,ax push ax mov ax,data mov ds,ax mov bx,offset buffer mov flag,0next: mov ah,01h int 21h test flag,01h jnz follow cmp al,20h jnz exit mov flag,1 jmp nextfollow: cmp al,20h jz exit

36、mov bx,al inc bx jmp nextexit: retmain endpcode endsend start3、主程序調(diào)用三個子程序,子程序分別實現(xiàn)輸入一串字符,刪除特定字符,并顯示剩余字符。參考程序:data segmentbuffer db 80 dup(?)flag db ?data endscode segmentmain proc far assume cs:code,ds:datastart: push ds xor ax,ax push ax mov ax,data mov ds,ax mov bx,offset buffer mov flag,0next: mov

37、 ah,01h int 21h test flag,01h jnz follow cmp al,20h jnz exit mov flag,1 jmp nextfollow: cmp al,20h jz exit mov bx,al inc bx jmp nextexit: mov bx,al mov di,offset buffer mov al,5 call del mov si,offset buffer call disp retmain endpdel proc near cldloop1: mov ah,di cmp ah,20h jz exit0 cmp al,di jz loo

38、p2 inc di jmp loop1loop2: mov al,di+1 mov di,al cmp al,20h jz exit0 inc di jmp loop2exit0: retdel endpdisp proc neardisp0: mov dl,si mov ah,02h int 21h inc si mov al,si cmp al,20h jnz disp0 retdisp endpcode endsend start三、實驗步驟和要求:1、分析問題,畫出算法框圖。2、在DOS下編輯、匯編、連接程序。3、用Debug調(diào)試程序。4、在DOS下運行并分析結(jié)果。實驗九 綜合實驗一、

39、實驗?zāi)康模和ㄟ^作一個這樣的綜合練習(xí)題,來全面的鞏固已學(xué)過的知識和編程方法,進一步提高編程和調(diào)試程序的能力。二、實驗內(nèi)容:應(yīng)用所學(xué)過的知識,作一個綜合練習(xí)題。題中包含數(shù)制和碼制的變換、數(shù)據(jù)傳送指令、算術(shù)運算指令、邏輯運算指令及轉(zhuǎn)移指令的應(yīng)用。也包含分支程序、循環(huán)程序、子程序和中斷程序及C語言與匯編語言程序的互相調(diào)用和DOS常用功能的調(diào)用。(可由教師根據(jù)學(xué)生的具體情況命題,在課后完成,作為期終考核的一項內(nèi)容)三、實驗步驟和要求:1、分析問題,畫出算法框圖。2、在DOS下編輯、匯編、連接程序。3、用Debug調(diào)試程序。4、在DOS下運行并分析結(jié)果。附錄1 ASCII碼表編碼字符編碼字符編碼字符編碼字

40、符00NUL20SPACE406001SOH21!41A61a02STX22“42B62b03ETX23#43C63c04EOT24$44D64d05ENQ25%45E65e06ACK26&46F66f07BEL2747G67g08BS28(48H68h09HT29)49I69i0ALF2A*4AJ6Aj0BVT2B+4BK6Bk0CFF2C,4CL6Cl0DCR2D-4DM6Dm0ESO2E.4EN6En0FSI2F/4FO6Fo10DEL30050P70p11DC131151Q71q12DC232252R72r13DC333353S73s14DC434454T74t15NAK35555U7

41、5u16SYN36656V76v17ETB37757W77w18CAN38858X78x19EM39959Y79y1ASUB3A:5AZ7Az1BESC3B;5B7B1CFS3C5E7E1FUS3F?5F_7FDEL附錄2 匯編語言常用出錯信息匯編程序在對源程序的匯編過程中,若檢查出某語句有語法錯誤,隨時在屏幕上給出出錯信息。如操作人員指定的列表文件名(即.LST),匯編程序亦將在列表文件中出錯的下面給出出錯信息,以便操作人員即時查找錯誤,給予更正。MASM5.0出錯信息格式如下:源程序文件行:WARNING/ERROR錯誤信息碼:錯誤描述信息其中,錯誤描述信息碼由五個字符組成。第一個是字母A

42、,表示匯編語言程序出錯;接著有一個數(shù)字指明出錯類別:2為嚴重錯誤,4為嚴肅警告,5為建議性警告,最后三位為錯誤編號。錯誤編號錯誤描述0Block nesting error嵌套出錯。嵌套的過程、段、結(jié)構(gòu)、宏指令或重復(fù)塊等非正常結(jié)束。例如在嵌套語句中有外層的結(jié)束語句,而無內(nèi)層的結(jié)束語局1Extra characters on line一語句行有多余字符,可能是語句中給出的參數(shù)太多2Internal error-Register already defined這是一個內(nèi)部錯誤。如出現(xiàn)該錯誤,請記下發(fā)生錯誤的條件,并使用Product Assistance Request 表與Microsoft公司

43、聯(lián)系3Unkown type specifer未知的類型說明符。例如類型字符拼錯,把BYTE寫成BIT,NEAR寫成NAER等4Redefinition of symbol符號重定義。同一標識符在兩個位置上定義。在匯編第一遍掃描時,在這個標識符的第二個定義位置上給出這個錯誤5Symbol is multidefined符號多重定義。同一標識符在兩個位置上定義。在匯編第二遍掃描時,每當遇到這個標識符都給出這個錯誤6Phase error between passes兩次掃描間的遍錯。一個標號在二次掃描時得到不同的地址值,就會給出這種錯誤。若在啟動MASM時使用/D任選項,產(chǎn)生第一遍掃描的列表文件,它可幫助你查找這種錯誤7Already had ELSE clause已有ELSE語句。在一個條件塊里使用多于一個

溫馨提示

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

評論

0/150

提交評論