北郵微機(jī)原理軟件部分報告_第1頁
北郵微機(jī)原理軟件部分報告_第2頁
北郵微機(jī)原理軟件部分報告_第3頁
北郵微機(jī)原理軟件部分報告_第4頁
北郵微機(jī)原理軟件部分報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGEPAGE4微機(jī)原理與接口技術(shù)軟件部分實驗報告實驗B分支、循環(huán)程序設(shè)計實驗?zāi)康拈_始獨(dú)立進(jìn)行匯編語言程序設(shè)計;掌握基本分支,循環(huán)程序設(shè)計;掌握最簡單的DOS功能調(diào)用。實驗任務(wù)及內(nèi)容安排一個數(shù)據(jù)區(qū),內(nèi)存有若干個正數(shù),負(fù)數(shù)和零。每類數(shù)的個數(shù)都不超過9。編寫一個程序統(tǒng)計數(shù)據(jù)區(qū)中正數(shù),負(fù)數(shù)和零的個數(shù)。將統(tǒng)計結(jié)果在屏幕上顯示。4.選作題:統(tǒng)計出正奇數(shù),正偶數(shù),負(fù)奇數(shù),負(fù)偶數(shù)以及零的個數(shù).程序流程圖BUFF偏移地址送BXBUFF偏移地址送BX否dh=dh+1(等于0個數(shù))否ah=ah+1(小于0個數(shù))DL=DL+1(大于0個數(shù))[BX]是否大于0?[BX]是否大于等于0否dh=dh+1(等于0個數(shù))否ah=ah+1(小于0個數(shù))DL=DL+1(大于0個數(shù))[BX]是否大于0?[BX]是否大于等于0BX值加1BX值加1 INC SI INC ODDPLUSES JMP RETURNEVENPLUS: INC SI INC EVENPLUSES JMP RETURNEVENMINUS: INC SI INC EVENMINUSES JMP RETURNDISP: DISPSTR ZEROSTR ;打出結(jié)果 DISPNUM ZEROS DISPSTR PLUSSTR DISPNUM PLUSES DISPSTR MINUSSTR DISPNUM MINUSES DISPSTR EVENPLUSSTR DISPNUM EVENPLUSES DISPSTR ODDPLUSSTR DISPNUM ODDPLUSES DISPSTR EVENMINUSSTR DISPNUM EVENMINUSES DISPSTR ODDMINUSSTR DISPNUM ODDMINUSES RETSTART ENDPCODE ENDS END START endstart程序運(yùn)行結(jié)果進(jìn)行統(tǒng)計的數(shù)據(jù)為1,3,5,0,0,0,-5,-4,0。程序運(yùn)行結(jié)果如下:回答預(yù)習(xí)題十進(jìn)制數(shù)0--9所對應(yīng)的ASCII碼是什么?如何將十進(jìn)制數(shù)0--9在屏幕上顯示出來?0--9的ASCII碼為30H—39H。若想將一個十進(jìn)制數(shù)0—9的字符在屏幕上顯示出來,首先應(yīng)該把它所占寄存器的值賦給DL寄存器,然后DL寄存器的值加30H,然后執(zhí)行02號DOS功能調(diào)用,即執(zhí)行以下代碼“MOVAH,02”,“INT21H”如何檢驗一個數(shù)為正,為負(fù)或為零?你能舉出多少種不同的方法?可以用CMP指令將數(shù)與0比較,若為正數(shù)則可通過JG跳轉(zhuǎn);若為0可通過JE/JZ跳轉(zhuǎn);若為負(fù)數(shù)可通過JL跳轉(zhuǎn)。若只需判斷是非負(fù)數(shù)或者負(fù)數(shù),則可以用TEST指令將數(shù)與80H(DB情況下)或8000H(DW情況下)相與,若為非負(fù)數(shù)則可通過JE/JZ跳轉(zhuǎn);若為負(fù)數(shù)則可通過JNE/JNZ跳轉(zhuǎn)。若只需判斷是非負(fù)數(shù)或者負(fù)數(shù),則也可以用SHL,SAL對數(shù)字進(jìn)行左移,若為非負(fù)數(shù)可根據(jù)JNC判斷;若為負(fù)數(shù)可以根據(jù)JC判斷跳轉(zhuǎn)。若只需判斷是非負(fù)數(shù)或者負(fù)數(shù),則也可以用JS,JNS來進(jìn)行判斷,若為非負(fù)數(shù)可根據(jù)JNS跳轉(zhuǎn);若為負(fù)數(shù)可以根據(jù)JS判斷跳轉(zhuǎn)。實驗總結(jié)、建議要求、心得體會通過本次實驗,我對宏定義和調(diào)用以及DOS功能調(diào)用有了更深的認(rèn)識和學(xué)習(xí)。同時,針對比較復(fù)雜的邏輯,需要將分支以及循環(huán)結(jié)構(gòu)合理使用。在對不同情況加以考慮時,要注意對不同判決條件的選擇,不同的代碼指令可能可以實現(xiàn)相同的功能。實驗的另一個收獲是了解到了0—9字符ASCII碼到實際數(shù)值的轉(zhuǎn)化,為今后實驗奠定了基礎(chǔ)。對于數(shù)字奇偶性的判斷,可以采取不同的方法。比如說可以使用TEST語句實現(xiàn)對非0位的置0,而保留第0位來判斷數(shù)字的奇偶性;或者使用SHR來對CF進(jìn)行判斷,也就是第0位。使用不同的指令代碼可以實現(xiàn)相同功能。同時,考慮到輸出的美觀性,在匯編過程中,針對字符串,我有針對性的加入了0DH,0AH使得完成字符串輸出的換行。其中0AH是換行功能的ASCII碼,0DH是回車功能的ASCII碼。也是在本次實驗中,我深刻認(rèn)識到了宏定義與使用的重要性。無論是輸出字符還是字符串,這兩個在實驗中非常重要的功能完全可以通過簡單的宏定義在匯編程序中多次調(diào)用。使得匯編程序的可讀性大大提高。實驗C代碼轉(zhuǎn)換程序設(shè)計實驗?zāi)康恼莆諑追N最基本的代碼轉(zhuǎn)換方法;運(yùn)用子程序進(jìn)行程序設(shè)計。實驗任務(wù)及內(nèi)容從鍵盤上輸入若干兩位十進(jìn)制數(shù),尋找其中的最小值,然后在屏幕上顯示出來。兩個十進(jìn)制數(shù)之間的分隔符,輸入結(jié)束標(biāo)志自定,但要在報告中說明。對輸入要有檢錯措施,以防止非法字符輸入,并有適當(dāng)?shù)奶崾?。將整個程序分解為若干模塊,分別用子程序?qū)崿F(xiàn)。在報告中要給出模塊層次圖。程序流程圖源程序(空格為兩十進(jìn)制數(shù)間的分隔符,空格為輸入結(jié)束標(biāo)志)DISPSTR MACRO STR(DOS功能調(diào)用) MOV AH,9 MOV DX,SEGSTR MOV DS,DX MOV DX,OFFSETSTR INT 21HENDMDISPCH MACRO NUM MOV AH,2 MOV DL,NUM INT 21HENDMDATA SEGMENT INSTR DB 31 ;最多能輸入連回車在內(nèi)的31個字符 DB 0 ;每輸入一個兩位數(shù)占3byte DB 31DUP(0) NUMS DB 10DUP(0FFH) ;儲存由字符串轉(zhuǎn)化過來的實際數(shù)值 COUNT DB ? ;記錄實際數(shù)據(jù)的個數(shù) MIN DB 0FFH ;記錄最小值,初始化為0FFH STRIN DB 'PLEASEINPUTYOURNUMBER:$' STRERR DB 0DH,0AH,'WRONGINPUT!',0DH,0AH,'PLEASEINPUTAGAIN:$' STROUT DB 0DH,0AH,'THEMINIUMIS:$'DATA ENDSSTACK SEGMENT STACK 'STACK' DW 100H DUP(0FFFFH)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX DISPSTR STRINAGAIN: MOV DX,OFFSETINSTR ;輸入錯誤時重輸入口 MOV AH,0AH INT 21H ;用戶輸入字符串 MOV SI,OFFSETNUMS ;SI指向數(shù)值起始位置 MOV BX,DX ADD BX,1 ;BX指向字符串長度字節(jié) MOV AL,[BX] MOV AH,0 MOV CL,3 DIV CL ;長度除以3得到有效數(shù)據(jù)個數(shù) CMP AH,0 ;余數(shù)不為0則輸入必有誤 JNZ RESET MOV COUNT,AL MOV DX,0 ;DX壓棧傳遞參數(shù),初始為0,用于繼續(xù)判斷輸入是否有誤。 PUSH DX CALL CHECK ;調(diào)用過程CHECK繼續(xù)判斷輸入是否有誤 POP DX CMP DX,1 ;彈出DX,DX得1時有誤 JE RESET CALL GETMIN ;調(diào)用過程找最小值 DISPSTR STROUTMOV AH,0 ;此時CH中記載著最小數(shù)在數(shù)組中的偏移位置 MOV AL,3 ;乘3得到在字符串中的偏移位置 MUL CH MOV BX,AX ADD BX,2 DISPCH [BX] INC BX DISPCH [BX] DISPCH 0DH DISPCH 0AH RETRESET: DISPSTR STRERR JMP AGAINSTART ENDPCHECK PROC NEAR MOV CH,0 MOV CL,COUNT SUB CL,1 ;前COUNT-1次判斷方式與最后一次略有不同 INC BX ;BX指向字符串有實際意義的第一個字節(jié) LOOPCH: MOV AL,[BX] ;先判斷前COUNT-1次,每一次循環(huán)判斷連續(xù)三個字節(jié) AND AL,7FH ;最高位先置0 CMP AL,'9' ;與'9'比大小,大則輸入錯誤 JA ERROR CMP AL,'0' ;與'0'比大小,小則輸入錯誤 JB ERROR SUB AL,'0' ;得到十位實際大小 MOV DL,10 MUL DL ;乘10放入DL MOV DL,AL INC BX ;BX后移一位 MOV AL,[BX] AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' ADD DL,AL ;將個位的值累加到DL中,并將DL的值傳給SI所指字節(jié) MOV [SI],DL INC SI ;SI指針后移 MOV DL,0 ;DL重新置0 INC BX ;BX繼續(xù)后移 MOV AL,[BX] AND AL,7FH CMP AL,'' ;兩數(shù)之間分隔符約定為',' JNZ ERROR INC BX ;BX繼續(xù)后移 LOOP LOOPCH MOV AL,[BX] ;輸入的最后三位的判斷基本同上理,只是約定結(jié)束標(biāo)志為'.' AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' MOV DL,10 MUL DL MOV DL,AL INC BX MOV AL,[BX] AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' ADD DL,AL MOV [SI],DL INC SI MOV DL,0 INC BX MOV AL,[BX] AND AL,7FH CMP AL,'' JNZ ERROR JMP RETURNERROR: MOV BP,SP ;此時入棧的DX=0在SP+2處 ADD BP,2 MOV WORDPTR[BP],1 ;彈出DX后,DX將被置1RETURN: RETCHECK ENDPGETMIN PROC NEAR MOV SI,OFFSETNUMS ;SI指向?qū)嶋H數(shù)值的偏移地址 MOV DL,MIN ;DL記錄已經(jīng)比較過的數(shù)中的最小值 MOV CL,COUNTLOOPF: CMP CL,0 JZ RETU ;CL=0時結(jié)束循環(huán) CMP DL,[SI] JA GET ;若[SI]指向的值必現(xiàn)有最小值小則跳轉(zhuǎn) DEC CL ;循環(huán)變量減1 INC SI ;指針后移 JMP LOOPFRETU: MOV MIN,DL RETGET: MOV DL,[SI] ;更新最小值 INC SI MOV CH,COUNT SUB CH,CL ;CH=COUNT-CL記錄新最小值的相對于NUMS的偏移地址 DEC CL ;循環(huán)變量減1 JMP LOOPF GETMIN ENDPCODE ENDS END START 程序運(yùn)行結(jié)果回答預(yù)習(xí)題如何將輸入的兩個字符(0–9)變?yōu)槭M(jìn)制或二進(jìn)制數(shù)?若想將連續(xù)兩個0—9字符轉(zhuǎn)換成十進(jìn)制數(shù),首先可以將第一個字符的ASCII碼值減30H,得到實際的十位上的值。然后將十位的值乘以10(0AH),加上第二個字符的ASCII碼值,再減30H,就可以得到連續(xù)兩個0—9字符對應(yīng)的10進(jìn)制數(shù)了。若想將連續(xù)兩個0—9字符轉(zhuǎn)換成非組合BCD碼,可以將高位、低位分別與0FH相與(也就是減30H),然后把高位和低位交換一下,即可得到在計算機(jī)內(nèi)高低位正確的非組合BCD碼。若還想得到組合BCD碼,可以再已有的非組合BCD碼的基礎(chǔ)上,將高8位左移4位,加到低8位上,此時低8位的數(shù)據(jù)就是所求得組合BCD碼了。如何將選出的最小值(二進(jìn)制或十進(jìn)制)變?yōu)锳SCII碼再進(jìn)行顯示?可以將最小值MIN一開始賦為它所屬類型允許的范圍內(nèi)的(DB為0FFH,DW為0FFFFH,然后將所有數(shù)據(jù)逐個與MIN比較,若比MIN大則不做任何操作,若比MIN小則把這個數(shù)的值賦給MIN即可。你覺得采用二進(jìn)制運(yùn)算還是十進(jìn)制運(yùn)算更適合于這個實驗?由于實驗中我采用的是字符串輸入,若要采用二進(jìn)制運(yùn)算,則輸入的連續(xù)兩個字符與其對應(yīng)的非組合BCD碼的高低位是相反的,找最小值的時候相對較困難,所以對此中輸入方式還是十進(jìn)制運(yùn)算好一點(diǎn)。若采用單字符輸入可能二進(jìn)制運(yùn)算會簡便一些,因為可以直接比較ASCII碼。實驗總結(jié)、建議要求、心得體會通過此次實驗,我深入的理解了ASCII碼和相應(yīng)字符串轉(zhuǎn)換的關(guān)系,也懂得了機(jī)器語言中ASCII碼的重要性。我掌握了在字符串輸入情況下把對字符串中的數(shù)據(jù)進(jìn)行檢錯并轉(zhuǎn)化成十進(jìn)制的方法,特別是主程序和子程序之間傳遞參數(shù)的方法對今后的匯編程序設(shè)計有很大的幫助。而檢錯功能的實現(xiàn)有多種方法??梢愿鶕?jù)字符串長度在計算實際數(shù)據(jù)輸入個數(shù)的時候通過除法的余數(shù)對輸入合理性有預(yù)判斷的作用。同時,針對不同的字符,在進(jìn)行大小等判斷時,可以使用SUBAL,’0’得到實際大小的數(shù)字,同時可以用CMPAL,’9’和CMPAL,’實驗D子程序設(shè)計實驗?zāi)康倪M(jìn)一步掌握子程序設(shè)計方法;進(jìn)一步掌握基本的DOS功能調(diào)用。實驗任務(wù)及內(nèi)容從鍵盤上輸入某班學(xué)生的某科目成績,輸入按學(xué)生的學(xué)號由小到大的順序輸入。統(tǒng)計檢查每個學(xué)生的名次。將統(tǒng)計結(jié)果在屏幕上顯示。為便于觀察,輸入學(xué)生數(shù)目不宜太多,以不超過一屏為宜。輸出應(yīng)便于閱讀。盡可能考慮美觀。輸入要有檢錯手段。程序流程圖源程序(空格為兩十進(jìn)制數(shù)間的分隔符,空格為輸入結(jié)束標(biāo)志)DISPSTR MACRO STR MOV AH,9 MOV DX,SEGSTR MOV DS,DX MOV DX,OFFSETSTR INT 21HENDMDISPCH MACRO NUM MOV AH,2 MOV DL,NUM INT 21HENDMDATA SEGMENT;只用了9個學(xué)生,是考慮到ASCII碼的問題,因為兩字符會復(fù)雜一些 INSTR DB28 ;最多能輸入連回車在內(nèi)的28個字符 DB0 ;每輸入一個兩位數(shù)占3byte DB28DUP(0) SCORES DB9DUP(0FFH) ;儲存由字符串轉(zhuǎn)化過來的實際數(shù)值 COUNT DB? ;記錄實際數(shù)據(jù)的個數(shù) NUM DB9DUP(30H) RANK DB9DUP(30H) STRIN DB'PLEASEINPUTYOURNUMBER:$' STRERR DB0DH,0AH,'WRONGINPUT!',0DH,0AH,'PLEASEINPUTAGAIN:$' STROUT1 DB0DH,0AH,'THENUMBEROFSTUDENTIS:$' STROUT2 DB0DH,0AH,'THESCOREOFSTUDENTIS:$' STROUT3 DB0DH,0AH,'THERANKOFSTUDENTIS:$'DATA ENDSSTACK SEGMENT STACK 'STACK' DW 100H DUP(0FFFFH)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX DISPSTR STRINAGAIN: MOV DX,OFFSETINSTR ;輸入錯誤時重輸入口 MOV AH,0AH INT 21H ;用戶輸入字符串 MOV SI,OFFSETSCORES ;SI指向數(shù)值起始位置 MOV BX,DX ADD BX,1 ;BX指向字符串長度字節(jié) MOV AL,[BX] MOV AH,0 MOV CL,3 DIV CL ;長度除以3得到有效數(shù)據(jù)個數(shù) CMP AH,0 ;余數(shù)不為0則輸入必有誤 JNZ RESET MOV COUNT,AL MOV DX,0 ;DX壓棧傳遞參數(shù),初始為0,用于繼續(xù)判斷輸入是否有誤。 PUSH DX CALL CHECK ;調(diào)用過程CHECK繼續(xù)判斷輸入是否有誤 POP DX CMP DX,1 ;彈出DX,DX得1時有誤 JE RESET CALL SORT ;調(diào)用子程序排序 CALL SHOW ;調(diào)用子程序打出結(jié)果 RETRESET: DISPSTR STRERR JMP AGAINSTARTENDPCHECK PROC NEAR MOV CH,0 MOV CL,COUNT SUB CL,1 ;前COUNT-1次判斷方式與最后一次略有不同 INC BX ;BX指向字符串有實際意義的第一個字節(jié)LOOPCH: MOV AL,[BX] ;一次循環(huán)判斷連續(xù)三個字節(jié) AND AL,7FH ;最高位先置0 CMP AL,'9' ;與'9'比大小,大則輸入錯誤 JA ERROR CMP AL,'0' ;與'0'比大小,小則輸入錯誤 JB ERROR SUB AL,'0' ;得到十位實際大小 MOV DL,10 MUL DL ;乘10放入DL MOV DL,AL INC BX ;BX后移一位 MOV AL,[BX] AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' ADD DL,AL ;將個位的值累加到DL中,并將DL的值傳給SI所指字節(jié) MOV [SI],DL INC SI ;SI指針后移 MOV DL,0 ;DL重新置0 INC BX ;BX繼續(xù)后移 MOV AL,[BX] AND AL,7FH CMP AL,'' ;兩數(shù)之間分隔符約定為'' JNZ ERROR INC BX ;BX繼續(xù)后移 LOOP LOOPCH MOV AL,[BX] ;輸入的最后三位的判斷基本同上理,只是約定結(jié)束標(biāo)志為'.' AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' MOV DL,10 MUL DL MOV DL,AL INC BX MOV AL,[BX] AND AL,7FH CMP AL,'9' JA ERROR CMP AL,'0' JB ERROR SUB AL,'0' ADD DL,AL MOV [SI],DL INC SI MOV DL,0 INC BX MOV AL,[BX] AND AL,7FH CMP AL,'' JNZ ERROR JMP RETURNERROR: MOV BP,SP ;此時入棧的DX=0在SP+2處 ADD BP,2 MOV WORDPTR[BP],1 ;彈出DX后,DX將被置1RETURN: RETSORT PROC NEAR MOV CL,COUNT ;學(xué)號和排名初始化 MOV CH,0 MOV SI,OFFSETNUM MOV DI,OFFSETRANKLOOP1: MOV DL,COUNT SUB DL,CL INC DL ADD BYTEPTR[SI],DL ADD BYTEPTR[DI],DL INC SI INC DI LOOP LOOP1 MOV CH,0 ;冒泡排序 MOV CL,COUNT DEC CLLOOP2: MOV SI,0 ;外層循環(huán)COUNT-1次 MOV DI,1 PUSH CX ;保護(hù)循環(huán)變量 MOV CL,COUNT DEC CLLOOP3: MOV DL,SCORES[DI] ;里層循環(huán)COUNT-1次 MOV DH,SCORES[SI] CMP DL,DH JA CHANGERETUR: INC SI INC DI LOOP LOOP3 POP CX ;彈出外層循環(huán)的次數(shù) LOOP LOOP2 JMP RECHANGE: MOV DL,SCORES[DI] ;交換數(shù)值、字符串 XCHG DL,SCORES[SI] MOV SCORES[DI],DL MOV DL,NUM[DI] XCHG DL,NUM[SI] MOV NUM[DI],DL MOV BX,DI MOV AX,3 MUL BL MOV BX,AX ADD BX,2 MOV DL,INSTR[BX] XCHG DL,INSTR[BX-3] MOV INSTR[BX],DL MOV DL,INSTR[BX+1] XCHG DL,INSTR[BX-2] MOV INSTR[BX+1],DL JMP RETURRE: RETSORT ENDPSHOW PROC NEAR DISPSTR STROUT1 MOV SI,OFFSETNUM MOV CL,COUNT MOV CH,0LOOP4: MOV DH,BYTEPTR[SI] DISPCH DH DISPCH '' DISPCH '' INC SI LOOP LOOP4 DISPSTR STROUT2 MOV DL,COUNT MOV AX,3 MUL DL MOV SI,OFFSETINSTR ADD SI,2 ADD SI,AX MOV BYTEPTR[SI],'$' ;使字符串滿足輸出格式 DISPSTR INSTR+2 DISPSTR STROUT3 MOV SI,OFFSETRANK MOV CL,COUNT MOV CH,0LOOP5: MOV DH,BYTEPTR[SI] DISPCH DH DISPCH '' DISPCH '' INC SI LOOP LOOP5 RETSHOW ENDPCODE ENDS END START程序運(yùn)行結(jié)果回答預(yù)習(xí)題如何確定一個學(xué)生在這門科目中的名次?按成績由大到小排序就可以確定學(xué)生在這門科目中的名次。你覺得輸入結(jié)束后,采用什么方法進(jìn)行比較以得到學(xué)生的名次最為簡單?由于冒泡排序兩層循環(huán)的循環(huán)次數(shù)都是確定的,所以在匯編中相對比較容易實現(xiàn)。模塊層次圖。輸出顯示的形式。輸出顯示的形式是:第一行打出學(xué)生按排名從高到低的學(xué)號順序,第二行打出學(xué)生按排名從高到低的成績,第三行打出學(xué)生的排名。實驗總結(jié)、建議要求、心得體會此次實驗用到了實驗四中的一些方法。當(dāng)然我只是用了9個學(xué)生的成績排名,因為他們的學(xué)號都是單字符,所以匯編起來考慮到的邏輯問題會少很多,ASCII碼轉(zhuǎn)換的問題會簡單很多。排序時我采用了冒泡排序法,冒泡排序雖然好實現(xiàn)但是它的的效率相對較差,對排序的算法也可以繼續(xù)改進(jìn)。冒泡排序包括內(nèi)外兩層循環(huán),外層循環(huán)用于對無序區(qū)定位排序,內(nèi)層循環(huán)用于相鄰兩個數(shù)字的比較。同時要注意外層循環(huán)要執(zhí)行COUNT-1次,即要執(zhí)行的比較次數(shù)。這次編程還是遇到了很大的阻力,因為需要考慮的邏輯問題非常多。排序算法需要對成績和學(xué)號都進(jìn)行排序。但是通過查閱資料,仔細(xì)分析,還是解決了這一問題。實驗五中斷程序設(shè)計實驗?zāi)康某醪秸莆罩袛喑绦虻脑O(shè)計方法。初步掌握修改DOS系統(tǒng)中斷,以適應(yīng)實際使用的方法。實驗任務(wù)及內(nèi)容編寫一個32位二進(jìn)制數(shù)除以16位二進(jìn)制數(shù)的除法程序。觀察當(dāng)除數(shù)為0,或超過相應(yīng)寄存器范圍時,程序執(zhí)行的結(jié)果。修改零號中斷服務(wù)程序,使它具有以下功能:判斷除數(shù)是否為0,當(dāng)除數(shù)為0時,顯示相應(yīng)的結(jié)果;當(dāng)除數(shù)不為0時,采用適當(dāng)?shù)姆椒ㄍ瓿缮坛^16位的二進(jìn)制數(shù)的除法運(yùn)算。注意必須保護(hù)原有中斷服務(wù)程序的入口地址,并在程序完畢前加以恢復(fù)。4.選作題:1.用二進(jìn)制將結(jié)果在屏幕上顯示.2.從鍵盤輸入二進(jìn)制數(shù).程序流程圖四.源程序DATASEGMENT messagedb0AH,0DH,'divisorequals0.',0dh,0ah,'$' message1DB0AH,0DH,'inputerror',0DH,0AH,'$'message2DB'PLEASEINPUTTHEDIVIDEND(32)',0AH,0DH,'$'message3DB0AH,0DH,'PLEASEINPUTTHEDIVISOR(16)',0AH,0DH,'$'message4DB0AH,0DH,'THEQUOTIENTIS:','$'message5DB0AH,0DH,'THEREMAINDERIS:','$' DATAENDSSTACKSEGMENTSTACK'STACK' STACKENDSCODESEGMENT ;代碼段 ASSUMECS:CODE,SS:STACK,DS:DATAstart procfar pushds movax,0 pushax movax,data movds,ax sti ;TF中斷標(biāo)志置1 moval,0 ;保存原中斷向量 movah,35h int21h pushes pushbx pushdx ;寫中斷向量 movax,segint00 movds,ax movdx,offsetint00 moval,0 movah,25h int21h popds movah,09h movdx,segmessage2 ;提示輸入32位二進(jìn)制0或1 movds,dx movdx,offsetmessage2 int21h movcx,10h movax,0000h pushax a1: movah,01h int21h cmpal,'0' ;輸入數(shù)字與0比較 jza2 cmpal,'1' ;輸入數(shù)字與1比較 jnzerror1 ;輸入有誤則跳錯誤顯示程序 stc ;為1則將CF置1 rcldx,1 ;dx左移,移進(jìn)一個1 loopa1 jmpa3a2: clc ;為0則將CF置0 rcldx,1 ;dx左移,移進(jìn)一個0 loopa1a3: movcx,10ha4: movah,01h int21h cmpal,'0' jza5 cmpal,'1' jnzerror2 stc popax rclax,1 pushax loopa4 jmpa6a5: popax clc rclax,1 pushax loopa4a6: movah,09h movdx,segmessage3 ;提示輸入16位0或1除數(shù) movds,dx movdx,offsetmessage3 int21h movcx,10ha7: movah,01h int21h cmpal,'0' jza8 cmpal,'1' jnzerror2 stc rclbx,1 loopa7 jmpa9a8: clc rclbx,1 loopa7 jmpa9error1:movah,09h ;輸入錯誤提示 movdx,segmessage1 movds,dx movdx,offsetmessage1 int21h jmpa1error2:movah,09h movdx,segmessage1 movds,dx movdx,offsetmessage1 int21h jmpa6a9: movcx,0000h popax divbx cmpbx,20h jza14 pushdx pushax movah,09h movdx,segmessage4 movds,dx movdx,offsetmessage4 int21h movbx,08h callxianshi movbx,08h popcx callxianshi movah,09h movdx,segmessage5 movds,dx movdx,offsetmessage5 int21h movbx,08h popcx callxianshi a14: popdx ;恢復(fù)中斷向量表 popcx pushds movds,cx moval,0 m

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論