




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
_實驗?zāi)康募皩嶒灜h(huán)境實驗環(huán)境:熟悉宏指令、宏定義、宏調(diào)用以及宏展開的概念;掌握宏指令的定義與調(diào)用的方法。掌握子程序的定義、調(diào)用以及調(diào)用程序與子程序之間參數(shù)的傳遞方法。了解宏指令與子程序的異同以及各自的適用場合。實驗環(huán)境:80x86系列微型計算機一臺以及進行匯編語言程序設(shè)計所必需的編程工具(文本編輯器、ASM.EXE、LINK.EXE、DEBUG.EXE)實驗內(nèi)容從鍵盤輸入10個無符號十進制數(shù)(小于256),將其轉(zhuǎn)換為二進制數(shù)并存放在NUM字節(jié)型變量中,找出其中的最大數(shù),并將找出的最大數(shù)在屏幕上顯示出來。要求:=1\*GB3①在屏幕上顯示字符串提示信息的功能由宏指令DSTRING實現(xiàn);=2\*GB3②將鍵盤輸入的十進制數(shù)轉(zhuǎn)換成二進制數(shù)由子程序DTOB實現(xiàn);=3\*GB3③在N個無符號字節(jié)型二進制數(shù)中找出最大數(shù)的功能由子程序FMAX實現(xiàn);=4\*GB3④將一個無符號字節(jié)型二進制數(shù)轉(zhuǎn)換為十進制數(shù)并在屏幕上顯示的功能由子程序BTOAD實現(xiàn)。程序運行結(jié)果如右圖所示。方案設(shè)計編程指導(dǎo)顯示提示信息的宏指令DSTRING的編寫宏指令通常用于在程序中需要反復(fù)使用但所需指令條數(shù)又不是很多的情形;而對于需要經(jīng)常使用且需要較多指令才能完成的功能通常通過子程序調(diào)用來實現(xiàn)。這是因為,從執(zhí)行速度上看,由于子程序調(diào)用涉及到保護斷點的操作,因此,子程序調(diào)用比宏調(diào)用執(zhí)行時間相對要稍長一些;但從生成的可執(zhí)行文件的大小方面考慮,子程序調(diào)用生成的文件要小一些。讀者在進行匯編語言程序設(shè)計時,應(yīng)綜合考慮兩者的利弊,以便進行合理選擇。下面給出實現(xiàn)提示信息顯示的宏指令的定義:DSTRING MACRO STRING PUSH DX PUSHAX MOV DX,OFFSETSTRING MOV AH,09H INT 21H POP AX POP DX ENDM請讀者注意,宏指令應(yīng)該先定義,后調(diào)用。因此,宏定義通常緊跟在代碼段中段寄存器賦值指令之后給出。將鍵盤輸入的十進制數(shù)轉(zhuǎn)換為二進制數(shù)的子程序DTOB的編寫子程序的定義方法請參閱教材“5.6.4子程序設(shè)計”一節(jié)。將十進制數(shù)轉(zhuǎn)換為二進制數(shù)的程序代碼請參閱本書“2.4.3實驗內(nèi)容”中“編程指導(dǎo)”部分。在N個無符號字節(jié)型二進制數(shù)中找出最大數(shù)的子程序FMAX的編寫請參閱教材“5.6.3循環(huán)程序設(shè)計”一節(jié)例5.12。將一個無符號字節(jié)型二進制數(shù)轉(zhuǎn)換為十進制數(shù)并在屏幕上顯示的子程序BTOAD的編寫程序代碼請參閱本書“2.4.3實驗內(nèi)容”中“編程指導(dǎo)”部分。程序框架COUNTEQU 10DATA SEGMENT NUM DB10DUP(?) IBUF DB7,0,6DUP(?) OBUF DB6DUP(?) INFOR1 DB"Pleaseinput10numbers:",0AH,0DH,'$' INFOR2 DB"Themaxfoundinthe10numbersis$" INFOR3 DB0AH,0DH,'$'DATA ENDSSTACK SEGMENTstack DATA2DW40DUP(?) TOP EQULENGTHDATA2STACKENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKstart: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP定義顯示字符串信息的宏指令DSTRING MOV SP,AX定義顯示字符串信息的宏指令DSTRING DSTRINGINFOR1 MOV BX,OFFSETNUM MOV CX,COUNTLOOP1: CALLDTOB DSTRINGINFOR3 MOV [BX],AL INC BX LOOP LOOP1 MOV AX,OFFSETNUM PUSH AX ;通過堆棧向子程序傳遞參數(shù)(數(shù)據(jù)個數(shù)及數(shù)據(jù)在數(shù)據(jù)段內(nèi)的偏移地址) MOV CX,COUNT PUSH CX CALL FMAX DSTRINGINFOR2 CALL BTOAD MOV AH,4CH定義將鍵盤輸入的十進制數(shù)轉(zhuǎn)換為二進制數(shù)的子程序DTOB INT 21H定義將鍵盤輸入的十進制數(shù)轉(zhuǎn)換為二進制數(shù)的子程序DTOB定義將一個無符號字節(jié)型二進制數(shù)轉(zhuǎn)換為十進制數(shù)并在屏幕上顯示的子程序BTOAD定義在N個無符號字節(jié)型二進制數(shù)中找出最大數(shù)的子程序FMAX CODE ENDS定義將一個無符號字節(jié)型二進制數(shù)轉(zhuǎn)換為十進制數(shù)并在屏幕上顯示的子程序BTOAD定義在N個無符號字節(jié)型二進制數(shù)中找出最大數(shù)的子程序FMAX END start3、實驗習題。計算1+2+3+……N。要求N由鍵盤輸入;給出必要的提示信息(由宏調(diào)用實現(xiàn));累加功能由子程序調(diào)用實現(xiàn);二進制數(shù)(累加和)轉(zhuǎn)換為十進制數(shù)并顯示由子程序調(diào)用實現(xiàn)。測試數(shù)據(jù)及運行結(jié)果(1)從鍵盤輸入10個無符號十進制數(shù)(小于256),將其轉(zhuǎn)換為二進制數(shù)并存放在NUM字節(jié)型變量中,找出其中的最大數(shù),并將找出的最大數(shù)在屏幕上顯示出來。課后題計算1+2+3+……N。要求N由鍵盤輸入;給出必要的提示信息(由宏調(diào)用實現(xiàn));累加功能由子程序調(diào)用實現(xiàn);二進制數(shù)(累加和)轉(zhuǎn)換為十進制數(shù)并顯示由子程序調(diào)用實現(xiàn)。總結(jié)通過此次實驗我熟悉了宏指令、宏定義、宏調(diào)用以及宏展開的概念,掌握了宏指令的定義與調(diào)用的方法,子程序的定義、調(diào)用以及調(diào)用程序與子程序之間參數(shù)的傳遞方法,并了解了宏指令與子程序的異同以及各自的適用場合。這次實驗總體來說較難,一開始沒有成功,最終通過研究課本和同學討論,再此進行調(diào)試才得到了正確的程序。要想熟練地掌握會匯編語言,還要更多地練習。附錄:宏指令及子程序設(shè)計源代碼COUNTEQU10DATASEGMENT NUM DB10DUP(?)IBUFDB7,0,6DUP(?) OBUFDB6DUP(?)INFOR1 DB"Pleaseinput10numbers:",0AH,0DH,'$'INFOR2 DB"Themaxfoundinthe10numbersis$"INFOR3 DB0AH,0DH,'$'DATA ENDSSTACK SEGMENTstackDATA2DW40DUP(?)TOP EQULENGTHDATA2STACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXDSTRINGMACROSTRING PUSHDX PUSHAX MOVDX,OFFSETSTRING MOVAH,09H INT21H POPAX POPDX ENDM DSTRINGINFOR1 MOVBX,OFFSETNUM MOVCX,COUNTLOOP1: CALLDTOB DSTRINGINFOR3 MOV[BX],AL INCBX LOOPLOOP1 MOVAX,OFFSETNUM PUSHAX MOVCX,COUNT PUSHCX CALLFMAX DSTRINGINFOR2 CALLBTOAD MOVAH,4CH INT21H DTOBPROCNEAR PUSHCX MOVDX,OFFSETIBUF MOVAH,0AH INT21H MOVCL,IBUF+1 MOVCH,0 MOVSI,OFFSETIBUF+2 MOVAX,0AGAIN:MOVDX,10 MULDX ANDBYTEPTR[SI],0FH ADDAL,[SI] ADCAH,00H INCSI LOOPAGAIN POPCX RET DTOBENDP FMAXPROCNEAR MOVAL,NUM MOVSI,OFFSETNUM MOVCX,9LOOP2:INCSI CMPAL,[SI] JAELOOP3 XCHGAL,[SI]LOOP3:DECCX JNZLOOP2 XORAH,AH MOVOBUF,AL RET FMAXENDP BTOADPROCNEAR MOVBX,OFFSETOBUF+5 MOVBYTEPTR[BX],'$' MOVCX,10LOOP4:MOVDX,0 DIVCX ADDDL,30H DECBX MOV[BX],DL ORAX,AX JNZLOOP4 MOVDX,BX MOVAH,09H INT21H RET BTOADENDPCODE ENDS ENDSTART(2)實驗課后習題源代碼STACK SEGMENTSTACK DB100DUP(?)STACK ENDSDATA SEGMENT INF1 DB"PleaseinputanumberN:$" IBUF DB7,0,6DUP(?) OBUF DB6DUP(?) INF2 DB0AH,0DH,"$"DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AXDSTRINGMACROSTRING PUSH DX PUSH AX MOVDX,OFFSETSTRING MOVAH,09H INT21H POPAX POPDX ENDM DSTRINGINF1 CALL DTOB CALL ADDN CALL BTOAD MOV AH,4CH INT 21HDTOB PROCNEAR PUSH CX MOV DX,OFFSETIBUF MOV AH,0AH INT 21H MOV CL,IBUF+1 MOV CH,0 MOV SI,OFFSETIBUF+2 MOV AX,0AGAIN: MOV DX,10 MUL DX AND BYTEPTR[SI],0FH ADD AL,[SI] ADC AH,0 INC SI LOOP AGAIN POP CX RETDTOB ENDPADDN PROCNEAR MOV CX,AX XOR AX,AX MOV BX,01HLOOP5: ADD AX,BX INC BX LOO
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黨章黨紀黨史黨建知識競賽多項選擇題庫及答案(共210道題)
- 2025年激光掃描繪圖機項目發(fā)展計劃
- 診所裝修環(huán)保保證金協(xié)議
- 農(nóng)業(yè)科技節(jié)水灌溉技術(shù)推廣應(yīng)用策略
- 公司可行性分析報告
- 廣汽充電樁 遠程
- 垃圾發(fā)電采購
- 高速電動汽車充電樁
- 保險行業(yè)保險科技創(chuàng)新與風險管理方案
- 智能家電產(chǎn)品開發(fā)與生產(chǎn)標準
- 呼吸內(nèi)科小講課血氣分析在呼吸內(nèi)科的應(yīng)用
- 知識產(chǎn)權(quán)案件調(diào)解實務(wù)
- 手術(shù)室護理查房之甲狀腺切除術(shù)手術(shù)配合
- 毫米波集成電路詳述
- 打印設(shè)備維護服務(wù)投標方案
- JGT454-2014 建筑門窗、幕墻中空玻璃性能現(xiàn)場檢測方法
- 一定溶質(zhì)質(zhì)量分數(shù)的氯化鈉溶液的配制
- DB5301∕T 24-2019 園林綠化養(yǎng)護規(guī)范
- 地坪漆施工合同地坪漆施工合同范本
- 高風險供應(yīng)商管理程序(經(jīng)典-專業(yè)-建議收藏)
- 專家評審意見表 模板
評論
0/150
提交評論