




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、福建農(nóng)林大學(xué)東方學(xué)院信息工程類實(shí)驗(yàn)報(bào)告系: 計(jì)算機(jī)系 專業(yè): 電子信息工程 年級(jí): 10 姓名: 廖少兵 學(xué)號(hào): 1050302103 實(shí)驗(yàn)課程: 匯編語(yǔ)言 實(shí)驗(yàn)室號(hào):_ 實(shí)驗(yàn)設(shè)備號(hào): 實(shí)驗(yàn)時(shí)間: 指導(dǎo)教師簽字: 成績(jī): 實(shí)驗(yàn)五 DOS功能調(diào)用1實(shí)驗(yàn)?zāi)康暮鸵?. 學(xué)會(huì)DOS中關(guān)于顯示功能調(diào)用指令的用法。2. 領(lǐng)會(huì)修改顯存方法顯示字符。2實(shí)驗(yàn)用的軟硬件環(huán)境實(shí)驗(yàn)的硬件環(huán)境是:IBMPC機(jī)及其兼容機(jī)實(shí)驗(yàn)的軟件環(huán)境是: 操作系統(tǒng):DOS 2.0以上;調(diào)試程序:DEBUG.COM;文本編程程序:EDIT.EXE、WPS.EXE;宏匯編程序:MASM.EXE(或ASM .EXE);連接裝配程序:LINK
2、 .EXE;交叉引用程序:CREF.EXE(可有可無(wú))。3實(shí)驗(yàn)內(nèi)容及實(shí)驗(yàn)數(shù)據(jù)記錄1、 輸入一個(gè)字符,顯示出來(lái)2、 輸入一個(gè)字符串,顯示出來(lái)3、 buf開始的3個(gè)的16位二進(jìn)制數(shù)用十六進(jìn)制數(shù)的形式顯示出來(lái)(1)理解程序(2)輸入程序,匯編,運(yùn)行(在DOS狀態(tài)下輸入:文件名.EXE),觀察結(jié)果。(3)如果要分行顯示,程序要如何修改?DATASEGMENTBUFDW4F59H, 56A8H, 0FF90HDATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATA MOVDS, AX MOVSI, 0P:MOVBX, BUFSI MOVCH
3、, 4L:MOVCL, 4 ROLBX, CL MOVDL, BL ANDDL, 0FH CMPDL, 10 JBNEXT ADDDL, 7NEXT:ADDDL, 30H MOVAH, 2 INT21H DECCH JNZL INCSI INCSI CMPSI, 4 JNAP MOVAH, 4CH INT21HCODE ENDSENDSTART4、 運(yùn)行下列程序,在屏幕的第1行,會(huì)顯示一個(gè)字符X,理解程序段STACK SEGMENT DB 128 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACKSTART: MOV AX,STACK MO
4、V SS,AX MOV SP,128 MOV AX,0B800H MOV ES,AX MOV AH,0 ;BIOS 10H的0號(hào)功能,設(shè)置80X25的彩色字符模式 MOV AL,03H INT 10H MOV AH,'X' MOV ES:160*1+40*2,AH MOV AL,0 MOV AH,4CH INT 21HCODE ENDS END START5、 顯示*6、 編寫程序,統(tǒng)計(jì)字緩沖區(qū)中的20個(gè)數(shù)據(jù)的正數(shù)、負(fù)數(shù)、0的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果以16進(jìn)制形式顯示出來(lái)。4操作方法及實(shí)驗(yàn)步驟1)直接調(diào)用DOS 1號(hào)功能即可,debug環(huán)境中a命令直接編輯代碼寫入內(nèi)存如下指令MOVA
5、H,01INT21HMOVAH,4CINT21H2)字符串的輸入和顯示,原以為在調(diào)用10號(hào)功能后需要調(diào)用9號(hào)顯示功能,因此編輯代碼如下DATA SEGMENTBUF DB 10 DB ?DB 10 DUP(?);DB '$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOV DS,AXMOV DX,OFFSET BUFMOV AH,10INT 21H;MOV DX,OFFSET BUF+2;MOV AH,9;INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3)3.1&a
6、mp;3.2我們知道要將數(shù)以16進(jìn)制的形式顯示就必須找到其對(duì)應(yīng)的字母ABCDEF的ASCII碼,ASCII碼48是數(shù)字0的開始也就是16進(jìn)制中的30,而3AH開始至40H為7個(gè)常用符號(hào)的ASCII碼值,從41H開始才是大寫字母的ASCII碼值,因此將所要轉(zhuǎn)化的四位二進(jìn)制數(shù)與10做比較,若小于10可直接加30H得到其對(duì)應(yīng)的ASCII碼,若大于等于10則應(yīng)多加上7跳過(guò)7個(gè)符號(hào)ASCII碼得到其對(duì)應(yīng)的16進(jìn)制ASCII碼以達(dá)到轉(zhuǎn)換的目的即顯示時(shí)打印其相應(yīng)的ASCII碼對(duì)應(yīng)的字符。3.3要達(dá)到題目要求的分行顯示,從程序的跟蹤可以看出在在取數(shù)時(shí)分為了兩個(gè)情況,一個(gè)通過(guò)SI定位內(nèi)存單元一次性取得一個(gè)16位
7、二進(jìn)制數(shù),另一個(gè)是處理數(shù)據(jù)時(shí)循環(huán)移位取高四位數(shù)。而要使得數(shù)據(jù)顯示時(shí)換行只要在完成一個(gè)16位數(shù)據(jù)的轉(zhuǎn)換后取下一個(gè)16位數(shù)時(shí)進(jìn)行調(diào)用DOS 2號(hào)功能輸出換行符ASCII碼為10即0AH便可。所以在源代碼的基礎(chǔ)上在兩次INC SI前JNZL間添加指令如下MOV DL,0AHMOV AH,2INT 21H 4)可以看到程序首先通過(guò)MOV AX,0B800HMOV ES,AX在內(nèi)存開辟了附加段,段首地址為B800H并通過(guò)MOV ES:160*1+40*2,AH以便于向B80F0H(位于B8000HBFFFFH彩色字符模式顯示緩沖區(qū))執(zhí)行MOV AH,'X'寫入字符X,以達(dá)到直接改變顯存內(nèi)
8、容顯示。5) 5.1分析圖案第1行打印了9列 *第2行打印了7列 *第3行打印了5列 *第4行打印了3列 *第5行打印了1列 *因此有兩種思路,一是通過(guò)調(diào)用DOS 2號(hào)功能配合循環(huán)逐一打印字符'*',二是借鑒4)中的方法直接改變內(nèi)存內(nèi)容顯示'*'。但兩種方法都用到了雙重循環(huán),外層循環(huán)控制行的打印,內(nèi)層循環(huán)控制列的打印。結(jié)合圖案分析和循環(huán)數(shù)與行序號(hào)不然找到如下關(guān)系:a、1<=列數(shù)<= 2*當(dāng)前行序號(hào)-1而行控制參是外層循環(huán)CX的變動(dòng),所以有b、6-CX=當(dāng)前行序號(hào)。5.2這里選擇第二種以熟悉并掌握4)中的方法首先按a和b式,就有了偏移地址的計(jì)算式:16
9、0*(6-CX)+2*Y。其中1<=Y<=2*CX-1,可通過(guò)內(nèi)層循環(huán)實(shí)現(xiàn)。5.4因此有最初代碼(錯(cuò)誤)STACKSEGMENTDB128 DUP(0)STACK ENDSCSEGSEGMENTASSUME CS:CSEG,SS:STACKSTART:MOV AX,STACKMOV SS,AXMOV SP,128MOV AX,0B800HMOV ES,AX ;段裝入MOV CL,5;循環(huán)控制次數(shù)為5MOV CH,0 ;高位清零MOV DH,'*'初始打印字符MOV AX,0H:;MOV BL,1 ;從1列開始顯示MOV DL,6;行控制參數(shù)SUB DL,CL;控制當(dāng)
10、前行MOV AL,160MUL DLMOV DI,AX ;保存行參數(shù)MOV AL,2 MUL CLDEC AL(L:)MOV AL,2MUL BL;控制當(dāng)前列ADD AX,DI;顯存空間定位MOV ES:AX,DH;通過(guò)顯存顯示INC BL;列打印自加;INC BX(L:)MOV AL,2 MUL CLDEC AL;DEC AX ;MOV SI,AXCMP BL,AL;檢驗(yàn)打印上限;CMP BX,SIJNA L;未打印完當(dāng)前行返回繼續(xù)打印MOV DL,0AHMOV AH,2INT 21H ;打印完一行則換行LOOP H;行打印循環(huán)MOV AH,4CHINT 21H;退出到DOS界面CSEGEN
11、DSEND START6)6.1分析題目要求有三,首先定義緩沖區(qū)存放20個(gè)有符號(hào)數(shù)據(jù),其次對(duì)于正負(fù)數(shù)和零的統(tǒng)計(jì)可通過(guò)兩次篩選來(lái)完成,最后是16進(jìn)制的轉(zhuǎn)換這在3)中已得以解決,因此有部分流程如下這樣在16進(jìn)制轉(zhuǎn)換時(shí)就有了一個(gè)取數(shù)的麻煩,為此考慮如果多開辟一個(gè)緩沖區(qū)BUF2來(lái)存放三個(gè)結(jié)果,下一個(gè)指針DI,一來(lái)解決了這個(gè)問(wèn)題,二來(lái)篩選時(shí)通過(guò)指針的跳動(dòng)也同時(shí)使得統(tǒng)計(jì)結(jié)果的代碼得以簡(jiǎn)化,所以就有了如下流程: 6.2按分析結(jié)合流程編輯代碼如下DATA SEGMENTBUF1 DB 1,-3,5,26,0,6,0,24,-17,-10, -21,-5,33,48,0,32,0,10,44,-1 BUF2 D
12、B 3DUP(0)DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOV DS,AXMOV CX,20MOV AL,0;MOV SI,OFFSET BUF1(1) ;MOV DI,OFFSET BUF2S:CMP SI,ALJGENEXTCMPJMP ADDD;負(fù)數(shù)的個(gè)數(shù)NEXTCMP:INC DICMP SI,ALJZADDD;零的個(gè)數(shù)INC DIADDD:ADDBYTE PTR DI,1;正數(shù)的個(gè)數(shù)INC SILOOPS;統(tǒng)計(jì)個(gè)數(shù)MOV DI,OFFSET BUF2P:MOV BX,DI;以下為16進(jìn)制的轉(zhuǎn)換并顯示注釋參考
13、3)見附錄MOV CH,4;L:MOV CL,4ROL BX,CL;ROL BL,CLMOV DL,BLAND DL,0FHCMP DL,10JBNEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21HDEC CHJNZLMOV AH,0AH;MOV AH,2;MOV DL,0AHINT 21HINC DICMPDI,OFFSET BUF2+2JNAPMOV AH,4CHINT 21HCODEENDSEND START5實(shí)驗(yàn)數(shù)據(jù)處理和分析2)按最初想法匯編程序得到了下面可怕的結(jié)果由此單步跟蹤觀察,d定位到輸入的字符串所在查看,如圖得知10號(hào)功能的調(diào)用并沒(méi)出錯(cuò),所以應(yīng)
14、該是9號(hào)的問(wèn)題單步到9號(hào)功能調(diào)用指令,p執(zhí)行后,發(fā)現(xiàn)在debug確實(shí)調(diào)用,并顯示了字符串但在返回DOS界面卻顯示先前的一大堆亂碼,所以認(rèn)為是結(jié)束字符'$'的關(guān)系,于是修改字符緩沖區(qū)為如下BUF DB 10 DB ?DB 10 DUP(?)DB '$'結(jié)果出現(xiàn)了如下情況,只要輸入的字符少于9個(gè)都會(huì)缺失掉前面幾個(gè)不唯一。至于問(wèn)題處在哪,琢磨了好一段時(shí)也沒(méi)弄清楚,猜想是10號(hào)功能的調(diào)用是否已自動(dòng)回顯了字符串而立刻調(diào)用9號(hào)功能是不是產(chǎn)生了覆蓋。于是注釋9號(hào)功能的調(diào)用。結(jié)果單一的10號(hào)功能的調(diào)用就已會(huì)顯了字符串,符合題目要求。3)3.1-1debug調(diào)試,單步跟蹤如圖程序
15、進(jìn)行取數(shù)操作:不難理解,程序首先通過(guò)循環(huán)左移4位將數(shù)據(jù)高4位(二進(jìn)制數(shù))移出并補(bǔ)到數(shù)據(jù)低位,再將內(nèi)存中一單元的數(shù)據(jù)(數(shù)的低8位二進(jìn)制數(shù) )傳送至寄存器DL如上圖。3.1-2數(shù)據(jù)處理操作通過(guò)指令A(yù)ND DL,0FH將高四位清零保留低四位如圖a可以看到DX由0094變?yōu)榱?004,至此取得二進(jìn)制數(shù)的最高四位。將所要轉(zhuǎn)化的四位二進(jìn)制數(shù)與10做比較,若小于10即0到9可直接加30H得到其對(duì)應(yīng)的ASCII碼30H到39H如圖b所示,相反若大于等于10則應(yīng)多加上7跳過(guò)7個(gè)符號(hào)ASCII碼得到其對(duì)應(yīng)的16進(jìn)制ASCII碼41H到46H以達(dá)到轉(zhuǎn)換的目的即顯示時(shí)打印其相應(yīng)的ASCII碼對(duì)應(yīng)的字符。圖a圖b3.2
16、輸入程序,編譯,連接,運(yùn)行結(jié)果如下雖然達(dá)到了以16進(jìn)制的形式打印要求卻連續(xù)輸出了三個(gè)數(shù)。圖c4)立即的顯示結(jié)果混在了debug環(huán)境其他字符中,以至于沒(méi)能注意到,老懷疑是自己顯卡的顯存空間分配彩色字符緩沖區(qū)不在內(nèi)存的B8000HBFFFFH間,導(dǎo)致了隨機(jī)更改ES段首地址,結(jié)果可想而知,無(wú)意清屏?xí)r直接在DOS下運(yùn)行終于看到了字符X。5)5.1間接尋址,MOV ES:AL,DH寄存器的錯(cuò)誤應(yīng)用即相對(duì)適用的寄存器只有BX,BP,SI和DI錯(cuò)誤提示如下 通過(guò)添加ADD AX,DI 和 MOV DI,AX 指令,寫入字符指令相應(yīng)地改為了MOV ES:DI,DH。5.2更正了錯(cuò)誤后并排錯(cuò)語(yǔ)法錯(cuò)誤后運(yùn)行結(jié)果仍
17、然出現(xiàn)問(wèn)題如下結(jié)果并沒(méi)有如預(yù)期的一樣,從圖案可以看出,錯(cuò)誤肯定是在于列打印的控制上,debug單步跟蹤發(fā)現(xiàn)DI中保存的參數(shù)在每次打印時(shí)都更新為了前一次打印所計(jì)算的偏移地址也就是加上了列的增量,如下圖所示,打印1行2列時(shí),DI由00A2H即162變成了00A6即166。5.3因此在下一行打印之前必須保證DI不變動(dòng),所以這里的DI應(yīng)由其他寄存器代替,便修改之為BP,編譯運(yùn)行也就得到了預(yù)期的圖案。6)匯編代碼出錯(cuò)如下修改錯(cuò)誤,保證語(yǔ)法的正確性后,運(yùn)行程序得到結(jié)果如下,顯然dos2號(hào)功能調(diào)用出錯(cuò)了,統(tǒng)計(jì)結(jié)果也不正確,為此只能單步跟蹤在第一次循環(huán)時(shí)過(guò)程和數(shù)據(jù)處理均正常如下圖a第一個(gè)數(shù)第一次篩選圖b第一個(gè)
18、數(shù)為大于等于0,DI下移圖c第一個(gè)數(shù)大于0,DI繼續(xù)下移一位至0016,實(shí)現(xiàn)結(jié)果加1繼續(xù)跟蹤發(fā)現(xiàn),問(wèn)題出在了每次處理完一個(gè)數(shù)據(jù)后DI未能刷新至原點(diǎn)0014圖下修改S:標(biāo)號(hào)至(1)處,MOV DI,OFFSET BUF2得到結(jié)果如下不難發(fā)現(xiàn),除了dos2號(hào)功能未修改錯(cuò)外,結(jié)果中后兩位才是正確的結(jié)果,檢查代碼得知是16進(jìn)制轉(zhuǎn)換時(shí)寄存器高8位無(wú)用數(shù)據(jù)參與了轉(zhuǎn)換,為此修改P:MOV BX,DIMOV CH,4L:MOV CL,4ROL BX,CL為P:MOV BX,DIMOV CH,2L:MOV CL,4ROL BL,CL問(wèn)題想是可以得以解決。重新匯編,并運(yùn)行程序。6. 實(shí)驗(yàn)結(jié)果1)G運(yùn)行后提示符提示輸入字符,結(jié)果如下回顯輸入的字符2)DOS 10號(hào)功能調(diào)用,輸入字符串到自定義的緩沖區(qū)內(nèi),并會(huì)顯字符串到屏幕,如下a為debug下,b為dos界面下。圖a圖b3)未進(jìn)行換行操作換行后顯示結(jié)果如下4)通過(guò)MOV ES:160*1+40*2,AH向B80F0H寫入字符'X',立即顯示
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030全球mRNA疫苗原料行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 中國(guó)白羽雞養(yǎng)殖市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 中國(guó)精魚油行業(yè)市場(chǎng)深度評(píng)估及投資戰(zhàn)略規(guī)劃報(bào)告
- 中國(guó)副產(chǎn)硫酸行業(yè)市場(chǎng)調(diào)查報(bào)告
- 2021-2026年中國(guó)模切沖型機(jī)市場(chǎng)深度分析及投資戰(zhàn)略咨詢報(bào)告
- 2025年垃圾填埋場(chǎng)治理市場(chǎng)調(diào)查報(bào)告
- 2025年中國(guó)便攜式工業(yè)吸塵器市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展戰(zhàn)略研究報(bào)告
- 電廠安全風(fēng)險(xiǎn)管控評(píng)估報(bào)告
- 河南省各地2025年高一物理第二學(xué)期期末綜合測(cè)試模擬試題含解析
- 邵陽(yáng)職業(yè)課件
- DB44-T 2410-2023紅樹林生態(tài)修復(fù)工程評(píng)價(jià)技術(shù)規(guī)程
- YY/T 1830-2022電動(dòng)氣壓止血儀
- 臨床、口腔醫(yī)師申報(bào)衛(wèi)生高級(jí)職稱工作量登記表
- GB/T 10045-2018非合金鋼及細(xì)晶粒鋼藥芯焊絲
- GB 7099-2015食品安全國(guó)家標(biāo)準(zhǔn)糕點(diǎn)、面包
- 2023年納雍縣財(cái)政局系統(tǒng)事業(yè)單位招聘筆試題庫(kù)及答案解析
- 2023年廣東省普通高中學(xué)業(yè)水平考試及參考答案
- 建筑工程模板施工工藝技術(shù)要點(diǎn)講義豐富課件
- 永能選煤廠生產(chǎn)安全事故應(yīng)急救援預(yù)案
- 浙江省建設(shè)領(lǐng)域簡(jiǎn)易勞動(dòng)合同(A4版本)
- 位置度公差以及其計(jì)算
評(píng)論
0/150
提交評(píng)論