




已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)一、 實(shí)驗(yàn)?zāi)康?.掌握匯編程序的編輯,編譯,連接和執(zhí)行的全過(guò)程;2.學(xué)習(xí)和掌握用DEBUG調(diào)試程序的方法.二、 源程序DAT SEGMENTA DB 4 ;(自定)B DB 5 ;(自定)Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FAR PUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1 ;A*AMOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1 ;B*BMOV AL,AMOV Z,ALMOV AL,BMOV Z+1,AL ;Z stores the two OPRD temporallyCALL SUB1 ;A*BADD WORD PTR Y,AXADC BYTE PTRY+2,0 ;A*B*2RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AX ;Y stores the resultADC BYTE PTRY+2,0 ;Y+2 stores the signal flagRETSUB1 ENDPCOD ENDSEND STAR三、實(shí)驗(yàn)文檔中的要求(1)用 D 命令觀察數(shù)據(jù)區(qū)在內(nèi)存中的具體內(nèi)容,記錄單元 A 和 B 的具體地址.(圖一:反匯編結(jié)果以及數(shù)據(jù)區(qū)具體內(nèi)容)由圖一,可知A的地址為:141CH:0000H;B的地址為:141CH:0001H。(2)用 U 命令對(duì)目標(biāo)代碼反匯編,觀察反匯編后的結(jié)果.注意發(fā)現(xiàn)源程序的起始位置, 并記錄這個(gè)起始地址.由圖一,可知:DATA段段基址:141CHA的偏移地址:0000HB的偏移地址:0001HY的偏移地址:0002HZ的偏移地址:0005HSTACK段段基址:141DHCODE段段基址:1424H第一條指令的偏移地址:0000H子程序SUB1入口的偏移地址:003FH(3)用 T 命令作單步跟蹤調(diào)試.比較每條指令執(zhí)行后的結(jié)果和原來(lái)的理解是否一致.得出程序運(yùn)行的結(jié)果:它們是寫(xiě)在什么單元,具體內(nèi)容是什么; 并判斷結(jié)果是否正確.現(xiàn)僅將關(guān)鍵步驟的單步調(diào)試結(jié)果列出,配合r命令查看結(jié)果。(圖二:?jiǎn)尾秸{(diào)試結(jié)果一)這是第一次調(diào)用SUB1子程序退出后的結(jié)果,從圖中可以看出Y存儲(chǔ)的數(shù)據(jù)是+16(A已經(jīng)改為4;B已經(jīng)改為5),即是A*A的結(jié)果,符號(hào)位為0表示是正數(shù)。(圖三:?jiǎn)尾秸{(diào)試結(jié)果二)這是第二次調(diào)用SUB1子程序退出后的結(jié)果,從圖中可以看出執(zhí)行完“MUL AH”指令后,AX存儲(chǔ)的數(shù)據(jù)是25,即是B*B的結(jié)果,子程序退出后Y存儲(chǔ)的數(shù)據(jù)是+41,即是16+25的結(jié)果。(圖四:?jiǎn)尾秸{(diào)試結(jié)果三)這是第三次調(diào)用SUB1子程序的結(jié)果,從圖中可以看出執(zhí)行完“MUL AH”指令后,AX存儲(chǔ)的數(shù)據(jù)是20,即是A*B的結(jié)果,子程序退出后Y存儲(chǔ)的數(shù)據(jù)是+61,即是41+20的結(jié)果。(圖五:?jiǎn)尾秸{(diào)試結(jié)果四)這是程序退出時(shí)的最終結(jié)果,從圖中可以看出,Y存儲(chǔ)的數(shù)據(jù)最終為 +81 ,即為(A+B)*(A+B)的結(jié)果。結(jié)果正確。(4)在子程序 SUB1 的入口處設(shè)一斷點(diǎn),用 G 命令執(zhí)行程序. 在斷點(diǎn)處觀察堆棧的內(nèi)容,比較堆棧的內(nèi)容和程序返回地址是否一致.(圖六:調(diào)用子程序的堆棧內(nèi)容改變結(jié)果)從圖中可以看出, IP指針的變化說(shuō)明調(diào)用了子程序SUB1,而堆棧段段基址SS和棧頂指針SP的值都沒(méi)有改變。程序返回地址一致。(5)用 E 命令修改單元 A,B 的內(nèi)容,重新執(zhí)行程序,并記錄結(jié)果.(圖七:修改A,B數(shù)值后的結(jié)果)從圖中可見(jiàn),分別將A,B的值改為1,1后,程序執(zhí)行完畢,Y存儲(chǔ)的內(nèi)容是+4,結(jié)果正確。(6)用 M 命令和 A 命令對(duì)程序進(jìn)行修改: 將主程序中最后兩條指令 (ADD 和ADC) 修改為一條 CALL SUB1 指令,重新執(zhí)行程序.(圖八:a命令練習(xí)使用的結(jié)果)反匯編發(fā)現(xiàn)程序最后的ADD指令在CODE段的偏移地址為0035,將此處改為調(diào)用SUB1子程序的指令,然后將0038處改為RETF。重新執(zhí)行后,查看Y的內(nèi)容,結(jié)果正確。(7) 重新使用編輯軟件,把源程序最后一句中的 STAR 去掉.再次生成可執(zhí)行文件,并用 DEBUG 調(diào)入內(nèi)存.當(dāng)使用 U 命令時(shí),顯示的結(jié)果與前一次(未加 STAR) 的結(jié)果有何不同?(圖九:修改源程序后執(zhí)行的結(jié)果)觀察到兩點(diǎn)不同(雖然不明了其原因),其一:不能立即進(jìn)入程序,需執(zhí)行許多冗余指令;其二:不能正確退出程序。預(yù)習(xí)題:若 SS=2000H,SP=FFFFH, 向堆棧中壓入 4 字節(jié)數(shù)據(jù)后,如何用 D 命令顯示壓入堆棧的內(nèi)容?使用debug指令“d 2000:0000”即可顯示壓入堆棧的內(nèi)容,這是因?yàn)镾P+1會(huì)溢出,變成0000。四、心得體會(huì) 匯編語(yǔ)言編程時(shí)要求程序員有嚴(yán)謹(jǐn)、縝密的思維,在某些程度上,我感覺(jué)使用匯編語(yǔ)言的編程過(guò)程就是把高級(jí)語(yǔ)言的結(jié)構(gòu)過(guò)程拉平成線(xiàn)性過(guò)程來(lái)考慮問(wèn)題。經(jīng)過(guò)此次試驗(yàn),我基本掌握了匯編程序的編輯、編譯、連接、執(zhí)行以及調(diào)試的主要步驟。應(yīng)注意以下幾點(diǎn):在debug過(guò)程中,任何存儲(chǔ)器單元都無(wú)法用標(biāo)號(hào)來(lái)識(shí)別,要使用它們,只能使用物理地址調(diào)用。使用u指令修改asm代碼時(shí)要對(duì)照反匯編的結(jié)果,若要?jiǎng)h去某條指令,可以找到那條指令在代碼段的偏移地址,再用u指令將其修改為NOP(從該指令開(kāi)始到下一條指令開(kāi)始的地址-1處)??梢越Y(jié)合r指令、t指令、已經(jīng)用g指令設(shè)置斷點(diǎn)來(lái)診斷問(wèn)題。微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告二姓名:楊帆學(xué)院:信息與通信工程學(xué)號(hào):070547班級(jí):07118實(shí)驗(yàn)二 分支,循環(huán)程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康模?1.開(kāi)始獨(dú)立進(jìn)行匯編語(yǔ)言程序設(shè)計(jì);2.掌握基本分支,循環(huán)程序設(shè)計(jì);3.掌握最簡(jiǎn)單的 DOS 功能調(diào)用。實(shí)驗(yàn)內(nèi)容: 1.安排一個(gè)數(shù)據(jù)區(qū),內(nèi)存有若干個(gè)正數(shù),負(fù)數(shù)和零。每類(lèi)數(shù)的個(gè)數(shù)都不超過(guò) 9。2.編寫(xiě)一個(gè)程序統(tǒng)計(jì)數(shù)據(jù)區(qū)中正數(shù),負(fù)數(shù)和零的個(gè)數(shù)。3.將統(tǒng)計(jì)結(jié)果在屏幕上顯示。二、預(yù)習(xí)題: 1.十進(jìn)制數(shù) 0 - 9 所對(duì)應(yīng)的 ASCII 碼是什么? 如何將十進(jìn)制數(shù) 0 - 9 在屏幕上顯示出來(lái)?答:0的ASCII碼是30h,以后依次遞增。要屏顯0-9的數(shù)碼,只需將AH置成02H(DOS功能調(diào)用),然后將要顯示的數(shù)碼的ASCII碼存進(jìn)DL里,然后執(zhí)行INT 21H就可以打印字符。或者,若這些數(shù)碼是以字符串的格式存儲(chǔ),則可以將AH置成09H,(最后以$字符結(jié)束,)然后將串首地址傳給DS,然后執(zhí)行INT 21H就可以打印字符串。2.如何檢驗(yàn)一個(gè)數(shù)為正,為負(fù)或?yàn)榱悖?你能舉出多少種不同的方法?答:可以將待檢驗(yàn)數(shù)與0比較(使用CMP指令后判斷CF、OF或者以表達(dá)式【實(shí)用EQ、GE等操作符】的返回值來(lái)判斷),也可以將待檢驗(yàn)數(shù)與80H相與,判斷ZF的值。三、源程序 DATA SEGMENTBUF0 DB 2BH,3AH ;+,:POSI DB 0BUF1 DB 0AH,0DH,30H,3AH ;LF,CR,0,:ZERO DB 0BUF2 DB 0AH,0DH,2DH,3AH ;LF,CR,-,:NEGA DB 0NUM DB 72H,88H,91H,01H,00H,00H,23H,77H,21H;you can add other numbersCNT EQU $-NUM ;LENTHDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,0MOV BX,0LOOP1: MOV AL,NUMBXCALL FAR PTR CMPRINC BXINC CXCMP CX,CNT ;LOOP CNT TIMESJNZ LOOP1ADD POSI,30HADD ZERO,30HADD NEGA,30H ;TRANSFER TO ASC2 CODEMOV AH,02H ;TO PRINT CHARSMOV CX,0MOV BX,0LOOP2: MOV DL,BUF0BXINT 21HINC BXINC CXCMP CX,0DH ;LOOP 13 TIMESJNZ LOOP2MOV AX,4C00HINT 21HRETSTART ENDPCMPR PROC FARCMP AL,0JGE BIGGERINC NEGAJMP EXITBIGGER: JE EQUALINC POSIJMP EXITEQUAL: INC ZEROEXIT: RETCMPR ENDPCODE ENDSEND START四、程序流程圖 (圖表一:主程序流程圖)(圖表二:cmpr子程序流程圖)五、實(shí)驗(yàn)結(jié)果與調(diào)試過(guò)程 (圖一:程序運(yùn)行結(jié)果)分析:設(shè)置的數(shù)據(jù)區(qū)待分析數(shù)據(jù)為“72H,88H,91H,01H,00H,00H,23H,77H,21H”,其中正數(shù)為72H,01H,23H,77H,21H;負(fù)數(shù)為88H,91H;還有兩個(gè)零。可見(jiàn)程序得出的結(jié)果是正確的。(圖二:反匯編結(jié)果)分析:DATA段地址:1466;POSI偏移地址:0002;ZERO偏移地址:0007;NEGA偏移地址:000C;CODE段地址:1468;子程序CMPR偏移地址:0049;CNT的值+09D。六、選作題: 統(tǒng)計(jì)出正奇數(shù),正偶數(shù),負(fù)奇數(shù),負(fù)偶數(shù)以及零的個(gè)數(shù)。 源代碼如下:DATA SEGMENTBUF DB 2BH,4FH,3AH ;+,O,:POSOD DB 0DB 0AH,0DH,2BH,45H,3AH ;LF,CR,+,E,:POSEV DB 0DB 0AH,0DH,30H,3AH ;LF,CR,0,:ZERO DB 0DB 0AH,0DH,2DH,4FH,3AH ;LF,CR,-,O,:NEGAOD DB 0DB 0AH,0DH,2DH,45H,3AH ;LF,CR,-,E,:NEGAEV DB 0NUM DB 72H,88H,91H,01H,00H,00H,23H,77H,21H ;you can add other numbersCNT EQU $-NUM ;LENTHDATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,0MOV BX,0LOOP1: MOV AL,NUMBXCALL FAR PTR CMPRINC BXINC CXCMP CX,CNT ;LOOP CNT TIMESJNZ LOOP1ADD POSOD,30HADD POSEV,30HADD ZERO,30HADD NEGAOD,30HADD NEGAEV,30H ;TRANSFER TO ASC2 CODEMOV AH,02H ;TO PRINT CHARSMOV CX,0MOV BX,0LOOP2: MOV DL,BUFBXINT 21HINC BXINC CXCMP CX,1BH ;LOOP 26 TIMESJNZ LOOP2MOV AX,4C00HINT 21HRETSTART ENDPCMPR PROC FARCMP AL,0JGE BIGGERTEST AL,01HJNZ NODDINC NEGAEVJMP EXITNODD: INC NEGAODJMP EXITBIGGER: JE EQUALTEST AL,01HJNZ PODDINC POSEVJMP EXITPODD: INC POSODJMP EXITEQUAL: INC ZEROEXIT: RETCMPR ENDPCODE ENDSEND START運(yùn)行結(jié)果:(圖三:選做題程序運(yùn)行結(jié)果)根據(jù)NUM中的數(shù)據(jù),這個(gè)結(jié)果是正確的。七、心得體會(huì): 這個(gè)實(shí)驗(yàn)有兩個(gè)要點(diǎn),其實(shí)就是兩個(gè)預(yù)習(xí)題目里討論的問(wèn)題。一是字符顯示。要顯示數(shù)字字符,首先要把數(shù)據(jù)轉(zhuǎn)換成ASCII碼,然后調(diào)用DOS功能將其顯示。其中使用09H號(hào)功能時(shí),要特別注意每段待輸出的字符串要以$結(jié)尾,不然無(wú)法識(shí)別串尾,輸出亂碼。二是判斷正負(fù)數(shù)。本程序選用CMP指令來(lái)實(shí)現(xiàn)該功能。注意與0相比時(shí),要使用有符號(hào)數(shù)的條件跳轉(zhuǎn)指令,JGE等等,在使用無(wú)符號(hào)數(shù)的條件跳轉(zhuǎn)指令時(shí),不是與0相比較。判斷奇偶同樣也有很多途徑,這里選擇將待判別的數(shù)與01H相與后改變的標(biāo)志位來(lái)判斷奇偶,用TEST指令是一個(gè)很好的選擇。另外,通過(guò)這次試驗(yàn),我對(duì)匯編程序的分支、循環(huán)結(jié)構(gòu)有了進(jìn)一步的理解。微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告三姓名:楊帆學(xué)院:信息與通信工程學(xué)號(hào):070547班級(jí):07118實(shí)驗(yàn)三 代碼轉(zhuǎn)換程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康模?1.掌握幾種最基本的代碼轉(zhuǎn)換方法;2.運(yùn)用子程序進(jìn)行程序設(shè)計(jì)。實(shí)驗(yàn)內(nèi)容:1.從鍵盤(pán)上輸入若干兩位十進(jìn)制數(shù),尋找其中的最小值,然后在屏幕上顯示出來(lái);2.兩個(gè)十進(jìn)制數(shù)之間的分隔符,輸入結(jié)束標(biāo)志自定,但要在報(bào)告中說(shuō)明;3.對(duì)輸入要有檢錯(cuò)措施,以防止非法字符輸入,并有適當(dāng)?shù)奶崾荆?.將整個(gè)程序分解為若干模塊,分別用子程序?qū)崿F(xiàn).在報(bào)告中要給出模塊層次圖。二、預(yù)習(xí)題: 1.如何將輸入的兩個(gè)字符(0 - 9)變?yōu)槭M(jìn)制或二進(jìn)制數(shù)?答:可以通過(guò)將字符的減去30H再乘以10D,加上個(gè)位的值(同樣要將ASCII碼減去30H變?yōu)槭M(jìn)制數(shù))即可得兩個(gè)字符的十進(jìn)制數(shù)。2.如何將選出的最小值(二進(jìn)制或十進(jìn)制)變?yōu)?ASCII 碼再進(jìn)行顯示?答:選出最小十進(jìn)制數(shù)后可以通過(guò)除十得到余數(shù)和商,商為高位,余數(shù)為低位,分別對(duì)這兩個(gè)加30H即可到得其ASCII碼。3.你覺(jué)得采用二進(jìn)制運(yùn)算還是十進(jìn)制運(yùn)算更適合于這個(gè)實(shí)驗(yàn)?答:個(gè)人覺(jué)得采用二進(jìn)制運(yùn)算更簡(jiǎn)便,這樣可以直接使用ASCII碼比較,使問(wèn)題簡(jiǎn)化。三、源程序 DATA SEGMENT BUFFER DB 101 ;為BUFFER分配空間 DB 0 ;BUFFER實(shí)際長(zhǎng)度 DB 101 DUP (0)MESSAGE DB ERROR,TRY AGAIN,0DH,0AH,$ ;錯(cuò)誤信息 MIN DW ?ERR DB 0 ;錯(cuò)誤標(biāo)志寄存器 DATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKCHECK PROC FAR ;CHECK子程序 PUSH AXPUSH BXPUSH CXPUSH DXLEA BX,BUFFER+2 ;BX指向第一個(gè)輸入的數(shù) MOV CL,BUFFER+1 ;輸入字符串總長(zhǎng)度 AGAIN: CMP BYTE PTR BX,30H JL ERROR ;小于30h,出錯(cuò) CMP BYTE PTR BX,3AH JG ERROR ;大于3Ah,出錯(cuò) JMP EXIT1ERROR: MOV AH,9MOV DX,SEG MESSAGEMOV DS,DXMOV DX,OFFSET MESSAGEINT 21H ;輸出錯(cuò)誤提示 MOV ERR,1 ;更改錯(cuò)誤標(biāo)志寄存器 JMP EXIT2EXIT1: INC BXDEC CLJNZ AGAINEXIT2: POP DXPOP CXPOP BXPOP AXRETCHECK ENDPFINDMIN PROC FAR ;FINDMIN子程序 PUSH AXPUSH BXPUSH CXPUSH DXLEA BX,BUFFER+2MOV CL,BUFFER+1INC CLMOV AL,CLMOV AH,0MOV DL,3DIV DLDEC ALMOV CL,AL ;CL=(LENGTH+1)/3-1=N-1,表示比較次數(shù) AND CL,CLJNZ LOOPL ;不止一個(gè)數(shù)據(jù) MOV DX,BXMOV MIN,DX ;只輸入一個(gè)數(shù)據(jù),直接付給MINJMP OVER LOOPL: MOV DL,BX+3CMP BYTE PTR BX,DLJGE THERE1MOV DX,BXMOV MIN,DX ;只比較十位 JMP CONDITHERE1: MOV DL,BX+3CMP BYTE PTR BX,DLJG THERE2MOV DL,BX+4CMP BYTE PTR BX+1,DLJGE THERE3MOV DX,BXMOV MIN,DX ;十位相等,比較個(gè)位JMP CONDITHERE2: MOV DX,BX+3MOV MIN,DX ;只比較十位JMP CONDITHERE3: MOV DX,BX+3MOV MIN,DX ;前兩個(gè)數(shù)比較,小的存入MINCONDI: DEC CL JNZ FIN ;判斷比較是否完成JMP OVER FIN: MOV DL,LOW MIN ;比較次數(shù)為2或以上時(shí)CMP BYTE PTR BX+6,DL JGE HERE1MOV DX,BX+6MOV MIN,DX ;只比較十位(當(dāng)前數(shù)與MIN比較)JMP HERE2HERE1: MOV DL,LOW MINCMP BYTE PTR BX+6,DLJG HERE2MOV DL,LOW MIN+1CMP BYTE PTR BX+7,DLJGE HERE2MOV DX,BX+6MOV MIN,DX ;十位相等,比較個(gè)位HERE2: ADD BX,3 ;BX指向下一個(gè)數(shù)JMP CONDIOVER: MOV AH,2 MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HMOV AH,2MOV DL,LOW MININT 21HMOV AH,2MOV DL,LOW MIN+1INT 21H ;輸出MIN的值,即為最小值POP DXPOP CXPOP BXPOP AXRETFINDMIN ENDPSTART PROC FARMOV AX,DATAMOV DS,AX AGAIN2: MOV ERR,0MOV DX,SEG BUFFERMOV DS,DXMOV DX,OFFSET BUFFERMOV AH,0AHINT 21HCALL CHECKMOV AL,ERRAND AL,ALJZ JUDGE ;輸入有誤,不進(jìn)行比較JMP AGAIN2 ;輸入無(wú)誤,進(jìn)行比較JUDGE: CALL FINDMINEN: MOV AH,4CHINT 21HSTART ENDPCODE ENDSEND START 四、程序流程圖(圖表一:FINDMIN子程序流程圖)(圖表二:一次比較流程圖)五、實(shí)驗(yàn)結(jié)果與調(diào)試過(guò)程運(yùn)行結(jié)果:1只輸入一個(gè)數(shù)據(jù)2輸入兩個(gè)數(shù)據(jù)(冒號(hào)“:”為數(shù)據(jù)分隔符,回車(chē)為結(jié)束符)3輸入三個(gè)或以上數(shù)據(jù)4輸入數(shù)據(jù)有誤提示錯(cuò)誤,再次輸入:六、心得體會(huì):做這個(gè)實(shí)驗(yàn)的過(guò)程中出了一些錯(cuò)誤,最開(kāi)始的代碼在運(yùn)行時(shí)輸出亂碼,這個(gè)問(wèn)題困擾了我很久。后來(lái)我通過(guò)單步調(diào)試,發(fā)現(xiàn)是因?yàn)檎{(diào)用子程序時(shí)沒(méi)有注意現(xiàn)場(chǎng)保護(hù),幾個(gè)寄存器被多次賦值,導(dǎo)致結(jié)果顯示時(shí)不僅不能輸出正確結(jié)果,程序還跑飛了。所以比較和顯示時(shí)都出現(xiàn)了問(wèn)題。經(jīng)過(guò)這次實(shí)驗(yàn),我發(fā)現(xiàn)匯編編程過(guò)程中一定要注意,在子程序調(diào)用時(shí)要做好現(xiàn)場(chǎng)保護(hù),畢竟匯編不像高級(jí)語(yǔ)言,子程序壓棧出棧的過(guò)程對(duì)編程者并不是透明的。微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告三姓名:楊帆學(xué)院:信息與通信工程學(xué)號(hào):070547班級(jí):07118實(shí)驗(yàn)三 代碼轉(zhuǎn)換程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康模?.掌握幾種最基本的代碼轉(zhuǎn)換方法;2.運(yùn)用子程序進(jìn)行程序設(shè)計(jì)。實(shí)驗(yàn)內(nèi)容:1.從鍵盤(pán)上輸入若干兩位十進(jìn)制數(shù),尋找其中的最小值,然后在屏幕上顯示出來(lái);2.兩個(gè)十進(jìn)制數(shù)之間的分隔符,輸入結(jié)束標(biāo)志自定,但要在報(bào)告中說(shuō)明;3.對(duì)輸入要有檢錯(cuò)措施,以防止非法字符輸入,并有適當(dāng)?shù)奶崾荆?.將整個(gè)程序分解為若干模塊,分別用子程序?qū)崿F(xiàn).在報(bào)告中要給出模塊層次圖。二、預(yù)習(xí)題:1.如何將輸入的兩個(gè)字符(0 - 9)變?yōu)槭M(jìn)制或二進(jìn)制數(shù)?答:可以通過(guò)將字符的減去30H再乘以10D,加上個(gè)位的值(同樣要將ASCII碼減去30H變?yōu)槭M(jìn)制數(shù))即可得兩個(gè)字符的十進(jìn)制數(shù)。2.如何將選出的最小值(二進(jìn)制或十進(jìn)制)變?yōu)?ASCII 碼再進(jìn)行顯示?答:選出最小十進(jìn)制數(shù)后可以通過(guò)除十得到余數(shù)和商,商為高位,余數(shù)為低位,分別對(duì)這兩個(gè)加30H即可到得其ASCII碼。3.你覺(jué)得采用二進(jìn)制運(yùn)算還是十進(jìn)制運(yùn)算更適合于這個(gè)實(shí)驗(yàn)?答:個(gè)人覺(jué)得采用二進(jìn)制運(yùn)算更簡(jiǎn)便,這樣可以直接使用ASCII碼比較,使問(wèn)題簡(jiǎn)化。三、源程序DATA SEGMENT BUFFER DB 101 ;為BUFFER分配空間DB 0 ;BUFFER實(shí)際長(zhǎng)度DB 101 DUP (0)MESSAGE DB ERROR,TRY AGAIN,0DH,0AH,$ ;錯(cuò)誤信息MIN DW ?ERR DB 0 ;錯(cuò)誤標(biāo)志寄存器DATA ENDSSTACK SEGMENT STACK STACKDB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKCHECK PROC FAR ;CHECK子程序PUSH AXPUSH BXPUSH CXPUSH DXLEA BX,BUFFER+2 ;BX指向第一個(gè)輸入的數(shù)MOV CL,BUFFER+1 ;輸入字符串總長(zhǎng)度AGAIN: CMP BYTE PTR BX,30H JL ERROR ;小于30h,出錯(cuò)CMP BYTE PTR BX,3AH JG ERROR ;大于3Ah,出錯(cuò)JMP EXIT1ERROR: MOV AH,9MOV DX,SEG MESSAGEMOV DS,DXMOV DX,OFFSET MESSAGEINT 21H ;輸出錯(cuò)誤提示MOV ERR,1 ;更改錯(cuò)誤標(biāo)志寄存器JMP EXIT2EXIT1: INC BXDEC CLJNZ AGAINEXIT2: POP DXPOP CXPOP BXPOP AXRETCHECK ENDPFINDMIN PROC FAR ;FINDMIN子程序PUSH AXPUSH BXPUSH CXPUSH DXLEA BX,BUFFER+2MOV CL,BUFFER+1INC CLMOV AL,CLMOV AH,0MOV DL,3DIV DLDEC ALMOV CL,AL ;CL=(LENGTH+1)/3-1=N-1,表示比較次數(shù)AND CL,CLJNZ LOOPL ;不止一個(gè)數(shù)據(jù)MOV DX,BXMOV MIN,DX ;只輸入一個(gè)數(shù)據(jù),直接付給MINJMP OVER LOOPL: MOV DL,BX+3CMP BYTE PTR BX,DLJGE THERE1MOV DX,BXMOV MIN,DX ;只比較十位 JMP CONDITHERE1: MOV DL,BX+3CMP BYTE PTR BX,DLJG THERE2MOV DL,BX+4CMP BYTE PTR BX+1,DLJGE THERE3MOV DX,BXMOV MIN,DX ;十位相等,比較個(gè)位JMP CONDITHERE2: MOV DX,BX+3MOV MIN,DX ;只比較十位JMP CONDITHERE3: MOV DX
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年項(xiàng)目管理備考方案試題及答案
- 項(xiàng)目管理性能評(píng)估試題及答案
- 舊墻面防水翻新施工方案
- 生物質(zhì)成型燃料在發(fā)電領(lǐng)域的應(yīng)用考核試卷
- 長(zhǎng)輸管線(xiàn)沙漠施工方案
- 2024年項(xiàng)目管理資格檢測(cè)難點(diǎn)試題及答案
- 變革思維2025年特許金融分析師考試試題及答案
- 2023年中國(guó)能建葛洲壩集團(tuán)抽水蓄能與新能源事業(yè)部公開(kāi)招聘筆試參考題庫(kù)附帶答案詳解
- 項(xiàng)目管理領(lǐng)域的最佳實(shí)踐考證試題及答案
- 2025年注冊(cè)會(huì)計(jì)師備考階段的常見(jiàn)問(wèn)題與應(yīng)對(duì)策略試題及答案
- 香港外匯管理制度規(guī)定
- 2023年中國(guó)海洋石油集團(tuán)有限公司校園招聘筆試參考題庫(kù)附帶答案詳解
- 2025年天津市南開(kāi)區(qū)中考一模語(yǔ)文試題(含答案)
- 2025年磁粉探傷工職業(yè)技能鑒定理論考試題庫(kù)(濃縮500題)
- 婚姻保證忠誠(chéng)協(xié)議書(shū)
- 工信委選調(diào)試題及答案
- GB/T 17591-2025阻燃織物
- 2025年中國(guó)白高粱行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 詳解家庭教育指導(dǎo)師考試試題及答案
- 2025長(zhǎng)沙市存量房買(mǎi)賣(mài)合同(合同版本)
- 制造業(yè)生產(chǎn)成本控制與優(yōu)化策略
評(píng)論
0/150
提交評(píng)論