北京理工大學(xué)匯編實(shí)驗(yàn)五實(shí)驗(yàn)報(bào)告_第1頁(yè)
北京理工大學(xué)匯編實(shí)驗(yàn)五實(shí)驗(yàn)報(bào)告_第2頁(yè)
北京理工大學(xué)匯編實(shí)驗(yàn)五實(shí)驗(yàn)報(bào)告_第3頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Beijing Institute oj Technology本科實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:子程序設(shè)計(jì)實(shí)驗(yàn)課程名稱:課程設(shè)計(jì)(CPU與匯編)(實(shí)驗(yàn))實(shí)驗(yàn)時(shí)間:2014.11.2任課教師:馬永鋒實(shí)驗(yàn)地點(diǎn):10-102實(shí)驗(yàn)教師:蘇京霞實(shí)驗(yàn)類型:原理驗(yàn)證 V綜合設(shè)計(jì) 自主創(chuàng)新學(xué)生姓名:朱賀學(xué)號(hào)/班級(jí):1120121427/05411202組號(hào):學(xué)院:信息與電了學(xué)院同組搭檔:無(wú)專業(yè):電了科學(xué)與技術(shù)成績(jī):信息與電子學(xué)院實(shí)驗(yàn)五子程序設(shè)計(jì)實(shí)驗(yàn)(設(shè)計(jì)性實(shí)驗(yàn))一、實(shí)驗(yàn)要求和目的1. 熟悉匯編語(yǔ)言程序設(shè)計(jì)結(jié)構(gòu):2. 熟悉匯編語(yǔ)言子程序設(shè)計(jì)方法;3. 熟悉利用匯編語(yǔ)言子程序參數(shù)傳遞方法;4. 熟悉匯編語(yǔ)言字符串處理基本指令

2、的使用方法;5. 掌握利用匯編語(yǔ)言實(shí)現(xiàn)字符串的輸入輸出程序設(shè)計(jì)方法:6. 掌握數(shù)制轉(zhuǎn)換程序?qū)崿F(xiàn)方法。二、軟硬件環(huán)境1、硬件壞境:計(jì)算機(jī)系統(tǒng)windows;2、軟件壞境:裝有MASM、DEBUG, LINK、等應(yīng)用程序。三、實(shí)驗(yàn)涉及的主要知識(shí)A)子程序知識(shí)要點(diǎn):1、掌握子程序的定義語(yǔ)句;過(guò)程名 PROC near/far 過(guò)程體RET過(guò)程名ENDP2. 子程序結(jié)構(gòu)形式一個(gè)完整的子程序一般應(yīng)包含下列內(nèi)容:1. )子程序的說(shuō)明部分在設(shè)計(jì)了程序時(shí),要建立子程序的文檔說(shuō)明,使用戶能清楚此子程序的功能和調(diào)用方法. 說(shuō)明時(shí),應(yīng)含如下內(nèi)容:.子程序名:命名時(shí)要名中見(jiàn)意.子程序的功能:說(shuō)明子程序完成的任務(wù);.子

3、程序入門參數(shù):說(shuō)明子程序運(yùn)行所需參數(shù)及存放位置;.子程序出I I參數(shù):說(shuō)明子程序運(yùn)行結(jié)果的參數(shù)及存放位置;.子程序所占用的寄存器和工作單元;.子程序調(diào)用示例;2. )掌握子程序的調(diào)用與返回在匯編語(yǔ)言中,子程序的調(diào)用用CALL,返回用RET指令 來(lái)完成。.段內(nèi)調(diào)用與返回:調(diào)用子程序指令與子程序同在一個(gè)段內(nèi)。因此只修改IP;.段間調(diào)用與返回:調(diào)用子程序與子程序分別在不同的段,因此在返回時(shí),需同時(shí)修改CS: IP。3. )子程序的現(xiàn)場(chǎng)保護(hù)與恢復(fù)保護(hù)現(xiàn)場(chǎng):在子程序設(shè)計(jì)時(shí),CPU內(nèi)部寄存器內(nèi)容的保護(hù)和恢復(fù)。一般利用堆棧實(shí)現(xiàn)現(xiàn)場(chǎng)保護(hù)和恢復(fù)的格式:過(guò)程名PROCNEARFARPUSH AXPUSH BXPU

4、SH DXPOP DXPOP AXRET過(guò)程名ENDP4. 子程序的參數(shù)傳遞方法1. 寄存器傳遞參數(shù)這種方式是最基本的參數(shù)傳遞方式。2. 存儲(chǔ)器單元傳(變量)遞參數(shù)這種方法是在主程序調(diào)用子程序前,將入I 1參數(shù)存放到約定的存儲(chǔ)單元中;子程序運(yùn)行時(shí) 到約定存儲(chǔ)位置讀取參數(shù):子程序執(zhí)行結(jié)束后將結(jié)果也放在約定存儲(chǔ)單元中。3. 用堆棧傳遞參數(shù)利用共享堆棧區(qū),來(lái)傳遞參數(shù)是重要的的方法之一。B)字符、字符串輸入輸出知識(shí)要點(diǎn):在實(shí)際應(yīng)用中,經(jīng)常需要從鍵盤(pán)輸入數(shù)據(jù)并將結(jié)果等內(nèi)容顯示到屏幕上,方便程序控制及 查看結(jié)果。匯編語(yǔ)言的數(shù)據(jù)輸入和輸出分成兩類,一是單個(gè)字符數(shù)據(jù)的輸入輸出,一是字符串 數(shù)據(jù)的輸入輸出。都可

5、以通過(guò)DOS功能調(diào)用來(lái)實(shí)現(xiàn),卞面就分別介紹下用來(lái)實(shí)現(xiàn)數(shù)據(jù)輸入輸出 的功能調(diào)用的使用方法。1、單個(gè)字符輸入單個(gè)字符輸入可以利用DOS的1號(hào)功能調(diào)用來(lái)完成,使用方法為:MOVAH,1INT21H這兩條語(yǔ)句執(zhí)行后,光標(biāo)會(huì)在屏幕上閃爍,等待輸入數(shù)據(jù),輸入的數(shù)據(jù)以ASCH碼 形式存儲(chǔ)在AL寄存器中。2、單個(gè)字符輸出單個(gè)字符輸出可利用DOS2號(hào)功能調(diào)用來(lái)完成,使用方法為:MOVDL,'?'MOVAH,2INT21H單個(gè)字符輸出需要把要輸出字符的ASCII碼放在DL寄存器中。3、字符串輸入 用方法為:BUF DB 50DB?從鍵盤(pán)輸入一串字符串可以利用DOS的10號(hào)功能調(diào)用來(lái)完成,使;預(yù)定義

6、可以輸入的最大字符個(gè)數(shù);實(shí)際輸入字符個(gè)數(shù),根據(jù)輸入自動(dòng)統(tǒng)計(jì)DB 50 DUP;存放輸入字符串?dāng)?shù)據(jù)緩沖區(qū)LEA DX,BUFMOV AH JOINT21H4、字符串輸出字符串輸出可由DOS 9號(hào)功能調(diào)用來(lái)完成,使用方法為:STRING DBHELLOS'LEADX.STRINGMOV AH.9INT21HC)表的處理知識(shí)要點(diǎn):表的處理在實(shí)際數(shù)據(jù)處理中應(yīng)用較為廣泛,主要有排序、搜索、插入和刪除等操作。有 一些常用的冒泡法、對(duì)分搜索法等需要掌握。四、實(shí)驗(yàn)內(nèi)容與步驟1、從鍵盤(pán)輸入一串字符串(顯示提示)到內(nèi)存中,在該字符串的某一個(gè)指定位置,插入某一 字符或刪除某一字符,并顯示操作后的字符串。程序

7、流程圖他如下:源代碼如下:DATAS SEGMENTSTR1 DB 'input strings:$'STR2 DB '1 to Delete 0 to insert:$'STR3 DB 'input string:$*STR4 DB address'BUF1 DB ?BUF2 DB ?A DB 11DB ?DB 11 DUP($)DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:main proc farMOV AX,DATASMOV DS,AXLEA DX,STR1CALL output

8、LEA DX,AMOV AH,10INT 21H;輸入字符串保存在JZ insertA中JNZ deletecall CRinsert:LEA DX,STR2call CRCALL output;LEA DX,STR3MOV AH,01CALL outputINT21HMOV AH,01CMP AL,OINT21HMOV BUF1,AL;輸入要插入的JMP LI字符Ll:call CRLEA DX,A2LEA DX,STR4CALL outputCALL outputMOV AH,4CHMOV AH,01INT21HINT21Hmain endpMOV BUF乙AL;要插入齷CR proc n

9、earcall CRMOV DL,0DHcall insertlMOV AH,02HJMP LIINT21Hdelete:MOV DL,0AHcall CRMOV AH,02HLEA DX,STR4INT21HCALL outputretMOV AH,01CR endp;回車換行INT21Houtput proc nearMOV BUF2,AL;要?jiǎng)h除的位MOV AH,9置INT21Hcall CRretcall deleteloutput endp瀚出insertl proc nearMOV BX,0SUB BUF2,30HMOV BL;A1MOV SI,BXINC BXSUB BL,BUF

10、2MOV CX,BXL3: MOV BL,ASI+1MOV ASI+2,BLDEC SILOOP L3MOV BL,BUF1MOV AH,0MOV AUBUF2MOV SI,AXMOV ASI+1,BLretinsertl endp;插入子函數(shù)deletel proc nearSUB BUF2,3OHMOV BL,A1SUB BL,BUF2MOV CX,BXMOV BL,BUF2MOV SI,BXINC SIL4: MOV BL,ASI+1MOV ASI,BLINC SILOOP L4MOV BL,A1MOV SI,BXMOV ASI+1;$'retdeletel endp;刪除子函數(shù)

11、CODES ENDSEND START選擇插入功能,運(yùn)行結(jié)果如下:2、編寫(xiě)程序把從鍵盤(pán)輸入的四位十六進(jìn)制數(shù),轉(zhuǎn)換為十進(jìn)制形式在屏幕上打印出來(lái)。 程序源代碼和流程圖如下:DATAS SEGMENTnum2 DB 0,0,0,0num22 DW 0tempio DB 0temp DW 0tab DB ,0123456789abcdef,DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTassume DS:DATASSS:CODES,CS:CODESSTART:main proc farMOV AX,DATASMOV DS,AXMOV AX,0LEA S

12、I,num2CALL inputMOV AL,tempioSUB AL,'O'INC SICALL inputMOV AL,tempi。SUB AL/O*MOV DS:SI,ALINC SICALL inputMOV AL,tempioSUB AL/O*MOV DS:SI,ALINC SICALL inputMOV AL,tempioSUB AL/O*MOV DS:SI,ALCALL newlineLEA SI,num2MOV CX,4MOV DX,0AHLI:crop DS:SI,DLjb L2MOV AL,DS:SISUB ALZ7MOV DS:SI,ALL2:INC SI

13、loop L2LEA SI,num2MOV AHZDS:SIMOV CX,4shl AH,CLINC SIMOV BL,DS:SIADD AH,BLINC SIMOV AL,DS:SIMOV CX,4shl AL,CLINC SIMOV BL,DS:SIADD AL,BLMOV num22,AXMOV DX,0MOV CX,2710hDIV CXMOV temp,DXADD AX,'O'MOV tempio,ALCALL outputMOV AX,tempMOV DX,0MOV CX,3e8hDIV CXMOV temp,DXADD AX,'O'MOV temp

14、io,ALCALL outputMOV AX,tempMOV DX,0MOV CX,64hDIV CXADD AX,OMOV tempio,ALCALL outputMOV AX,tempMOV DX,0MOV CX,0AHDIV CXMOV temp,DXADD AX,'O'MOV tempio,ALCALL outputMOV AX,tempADD AX/O*MOV tempio,ALCALL outputCALL newlineCALL newlineMOV AH,4chint 21hmain endpint 21hMOV AHZ1int 21hMOV tempio,AL

15、retinput endp;輸入函數(shù)newline proc nearMOV AH,2MOV DL,Odhint 21hMOV AH,2MOV DL,0AHretnewline endp;回車換行output proc nearMOV AH,2MOV DL,tempioint 21hretoutput endp;輸出函數(shù)CODES ENDSEND START運(yùn)行程序如下:DOS Box 0.74, Cpu speed: 3000 cycles, Frameskip 0, Program: DW.1234MG60frcss any key to continuc_經(jīng)驗(yàn)證結(jié)果正確3、從鍵盤(pán)輸入(顯

16、示提示)十個(gè)2位十進(jìn)制數(shù)(正數(shù))到內(nèi)存中,按從小到大排序,然后把 該數(shù)以十六進(jìn)制形式在屏幕上打印出來(lái)。流程圖及源代碼如下:DATAS SEGMENTBUF DB40DB ?DB 40 DUP(O)SHUZI DB 10 DUP(O)BIAO DW 0STRING DB 'input 10 numbers$DATAS ENDSSTACKS SEGMENTSTA DW 20H DUP(O)釆用冒泡排序法排序STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:main proc farMOV AX,DATASMOV

17、DS,AXMOV AX,STACKSMOV SS,AXLEA BX,STRING ;輸出CALL outputCALL HUICHECALL input;輸入10個(gè)十進(jìn)制數(shù)CALL HUICHECALL change ;WASCII碼轉(zhuǎn)換CALL paixu;將其排序LEA SI,BUFADD SI,5ABC:MOV ALZSICALL outputl6 ;將16進(jìn)制數(shù)輸出CALL konggeADD SI,3DEC DIJNZ ABCMOV AH,4CHINT21Hmain endpoutput proc near;輸出字符串MOV DX,BXMOV AH,09HINT21HREToutpu

18、t endpINT21HRETinput proc near ;輸入字符串LEA DXBUFHUICHE proc near ;回車換行MOV DL,0DHMOV AH,02HINT21HMOV DL,0AHMOV AH,02HINT21HRETHUICHE endpchange proc near ;ASCII碼轉(zhuǎn)換LEA SI,BUFADD SI,2MOV CX, 10LI: AND BYTE PTR ,0FHINC SIAND BYTE PTR SIZOFHLEA SI,BUFADD SI,2MOV BL, 10MOV CX,10L2: MOV AL,SIMUL BL字ADD ALJSI

19、+1MOV SI,ALADD SI,3LOOP L2RETchange endppaixu proc near;排序LEA SI,BUFADD SI,2;變成實(shí)際數(shù)LOOP LI;變成十進(jìn)LEA DI,BUFADD DI,5ADD SI,2MOV CX, 10MOV AL,SIL3:MOV DI,CXMOV BX,2L4:MOV AL,BUFBXCMP ALzBUFBX+3JBE CONTINUEXCHG AL,BUFBX+3MOV BUFBX,ALCONTINUE:ADD BX,3LOOP L4MOV CX,DILOOP L3REToutputl6 proc near;顯示 16進(jìn)制數(shù)字MO

20、V DL,ALSHR DL,CLMOV BIAO,AXCALL exchangeMOV AX,BIAOMOV DL,ALAND DL,0FHCALL exchangeREToutputl6 endpexchange proc nearCMP DLZ9JA NOTDIGOR DL,30HJMP FINALNOTDIG:ADD DL,37HFINAL:MOV AH,02Hpaixu endpexchange endpRETkongge endpkongge proc near ;輸出空格CODES ENDSMOV DL,20HEND STARTMOV AH,02H運(yùn)行結(jié)果如下:豳 DOSBox 0

21、.74, Cpu speed: 3000 cycles, Frameskip 0, Program: DW.-1npu t 16 numbers:1G 11 12 13 14 15 16 17 18 19©A 0B 0C 0D 0E OF 1G 11 12 13Press any key to cont inue4、英文人名排序。從終端鍵入20個(gè)人名,當(dāng)所有人名都鍵入后,按字母上升的次序?qū)⑷嗣?序,并在屏幕上顯示己經(jīng)排好序的人名。流程圖如下:源代碼如卞:DATAS SEGMENTbuf4 DB 460 dup($) bp4 DW 20 dup(0) mark DBnum2 DW 2

22、0num3 DW 19temp DW 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME DS:DATAS,SS:STACKS,CS:CODESSTART:main proc farMOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXLEA SI,buf4LEA DI,bp4MOV CX,20LI:MOV AL,20MOV DS:SI,ALMOV DX,SIADD DX,2MOV ES:DI,DXINC DICALL getsADD SI,23loop LIL2:LEA SI,bp4MOV AX, 19MOV num3,AXL3:INC DIMOV DI,DS:SI+2MOV num2,CXINCCXloop L2CALL newlineLEA DI,bp4MOV CX,20L4:MOV temp,CXMOV SI,ES:DICALL putsCALL newlineINC DIINC DIMOV CX,temploop L4MOV AH,4chint 21hmain endp gets proc nearMOV AH,10MOV DX,SIMOV temp,SIMOV AX,DS:SIMOV SI,AXMOV CX,20repe empsbjs ski

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論