IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)習(xí)題答案(第二版 沈美明))_第1頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)習(xí)題答案(第二版 沈美明))_第2頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)習(xí)題答案(第二版 沈美明))_第3頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)習(xí)題答案(第二版 沈美明))_第4頁(yè)
IBM-PC匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)習(xí)題答案(第二版 沈美明))_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第五章 試編寫一個(gè)匯編語(yǔ)言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯示出來。答:程序段如下:BEGIN: MOV AH, 1 ;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT 21HCMP AL, a ;輸入字符<a嗎JB STOPCMP AL, z ;輸入字符>z嗎JA STOPSUB AL, 20H ;轉(zhuǎn)換為大寫字母,用AND AL, 1101 1111B也可MOV DL, AL ;顯示一個(gè)字符的DOS調(diào)用MOV AH, 2INT 21HJMP BEGINSTOP: RET 編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個(gè)字符。答:程序段如下:BEG

2、IN: MOV AH, 1 ;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT 21HCMP AL, a ;輸入字符<a嗎JB STOPCMP AL, z ;輸入字符>z嗎JA STOPDEC AL ;得到前導(dǎo)字符MOV DL, AL ;準(zhǔn)備顯示三個(gè)字符MOV CX, 3DISPLAY: MOV AH, 2 ;顯示一個(gè)字符的DOS調(diào)用INT 21HINC DLLOOP DISPLAYSTOP: RET 將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在AL、BL、CL和DL中。答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP ()DSEG ENDSBEGIN

3、: MOV CL, 4 ;右移四次MOV CH, 4 ;循環(huán)四次LEA BX, STOREA10: MOV DX, AXAND DX, 0FH ;取AX的低四位MOV BX, DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次DEC CHJNZ A10 ;循環(huán)四次完了碼B10: MOV DL, STORE ;四組數(shù)分別放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET 試編寫一程序,要求比較兩個(gè)字符串STRING1和STRING2所含字符是否完全相同,若相同則顯示MATCH, 若不相同

4、則顯示NO MATCH。答:程序如下:DSEG SEGMENTSTRING1 DB I am a student.STRING2 DB I am a student!YES DB MATCH, 0DH, 0AH, $NO DB NO MATCH, 0DH, 0AH, $DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值MOV ES, AX ;給ES賦值;BEGIN:

5、LEA SI, STRING1 ;設(shè)置串比較指令的初值LEA DI, STRING2CLDMOV CX, STRING2 - STRING1REPE CMPSB ;串比較JNE DISPNOLEA DX, YES ;顯示MATCHJMP DISPLAYDISPNO: LEA DX, NO ;顯示NO MATCHDISPLAY: MOV AH, 9 ;顯示一個(gè)字符串的DOS調(diào)用INT 21HRETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù)N,然后響鈴N次(響鈴的ASCII碼為07)。答:程序段如下:BEGIN: MOV

6、AH, 1 ;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT 21HSUB AL, 0JB STOP ;輸入字符<0嗎CMP AL, 9 ;輸入字符>9嗎JA STOPCBWMOV CX, AX ;響鈴次數(shù)NJCXZ STOPBELL: MOV DL, 07H ;準(zhǔn)備響鈴MOV AH, 2 ;顯示一個(gè)字符的DOS調(diào)用,實(shí)際為響鈴INT 21HCALL DELAY100ms ;延時(shí)100msLOOP BELLSTOP: RET 編寫程序,將一個(gè)包含有20個(gè)數(shù)據(jù)的數(shù)組M分成兩個(gè)數(shù)組:正數(shù)數(shù)組P和負(fù)數(shù)數(shù)組N,并分別把這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來。答:程序如下:DSEG SEGMENTCOUNT

7、EQU 20ARRAY DW 20 DUP () ;存放數(shù)組COUNT1 DB 0 ;存放正數(shù)的個(gè)數(shù)ARRAY1 DW 20 DUP () ;存放正數(shù)COUNT2 DB 0 ;存放負(fù)數(shù)的個(gè)數(shù)ARRAY2 DW 20 DUP () ;存放負(fù)數(shù)ZHEN DB 0DH, 0AH, The positive number is:, $ ;正數(shù)的個(gè)數(shù)是:FU DB 0DH, 0AH, The negative number is:, $ ;負(fù)數(shù)的個(gè)數(shù)是:CRLF DB 0DH, 0AH, $DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS:

8、DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV CX, COUNTLEA BX, ARRAYLEA SI, ARRAY1LEA DI, ARRAY2BEGIN1: MOV AX, BXCMP AX, 0 ;是負(fù)數(shù)碼JS FUSHUMOV SI, AX ;是正數(shù),存入正數(shù)數(shù)組INC COUNT1 ;正數(shù)個(gè)數(shù)+1ADD SI, 2JMP SHORT NEXTFUSHU: MOV DI, AX ;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組INC COUNT2 ;負(fù)數(shù)個(gè)數(shù)+1ADD DI, 2NEXT:

9、ADD BX, 2LOOP BEGIN1LEA DX, ZHEN ;顯示正數(shù)個(gè)數(shù)MOV AL, COUNT1CALL DISPLAY ;調(diào)顯示子程序LEA DX, FU ;顯示負(fù)數(shù)個(gè)數(shù)MOV AL, COUNT2CALL DISPLAY ;調(diào)顯示子程序RETMAIN ENDP;-DISPLAY PROC NEAR ;顯示子程序MOV AH, 9 ;顯示一個(gè)字符串的DOS調(diào)用INT 21HAAM ;將(AL)中的二進(jìn)制數(shù)轉(zhuǎn)換為二個(gè)非壓縮BCD碼ADD AH, 0 ;變?yōu)?9的ASCII碼MOV DL, AHMOV AH, 2 ;顯示一個(gè)字符的DOS調(diào)用INT 21HADD AL, 0 ;變?yōu)?9

10、的ASCII碼MOV DL, ALMOV AH, 2 ;顯示一個(gè)字符的DOS調(diào)用INT 21HLEA DX, CRLF ;顯示回車換行MOV AH, 9 ;顯示一個(gè)字符串的DOS調(diào)用INT 21HRETDISPLAY ENDP ;顯示子程序結(jié)束CSEG ENDS ;以上定義代碼段;-END START 試編寫一個(gè)匯編語(yǔ)言程序,求出首地址為DATA的100D字?jǐn)?shù)組中的最小偶數(shù),并把它存放在AX中。答:程序段如下:BEGIN: MOV BX, 0 MOV CX, 100COMPARE: MOV AX, DATABX ;取數(shù)組的第一個(gè)偶數(shù)ADD BX, 2TEST AX, 01H ;是偶數(shù)嗎LOOP

11、NZ COMPARE ;不是,比較下一個(gè)數(shù)JNZ STOP ;沒有偶數(shù),退出JCXZ STOP ;最后一個(gè)數(shù)是偶數(shù),即為最小偶數(shù),退出COMPARE1: MOV DX, DATABX ;取數(shù)組的下一個(gè)偶數(shù)ADD BX, 2TEST DX, 01H ;是偶數(shù)嗎JNZ NEXT ;不是,比較下一個(gè)數(shù)CMP AX, DX ;(AX)<(DX)嗎JLE NEXTMOV AX, DX ;(AX)<(DX),則置換(AX)為最小偶數(shù)NEXT: LOOP COMPARE1STOP: RET 把AX中存放的16位二進(jìn)制數(shù)K看作是8個(gè)二進(jìn)制的“四分之一字節(jié)”。試編寫程序要求數(shù)一下值為3(即11B)的

12、四分之一字節(jié)數(shù),并將該數(shù)(即11B的個(gè)數(shù))在終端上顯示出來。答:程序段如下:BEGIN: MOV DL, 0 ;計(jì)數(shù)初始值MOV CX, 8COMPARE: TEST AX, 03H ;是數(shù)03嗎JNZ NOEQUAL ;不是,轉(zhuǎn)走INC DL ;是,計(jì)數(shù)NOEQUAL: ROR AX, 1 ;準(zhǔn)備判斷下一個(gè)數(shù)ROR AX, 1LOOP COMPAREADD DL, 0 ;將計(jì)數(shù)值轉(zhuǎn)換為ASCII碼MOV AH, 2 ;進(jìn)行顯示INT 21HSTOP: RET 試編寫一個(gè)匯編語(yǔ)言程序,要求從鍵盤接收一個(gè)四位的16進(jìn)制數(shù),并在終端上顯示與它等值的二進(jìn)制數(shù)。答:程序段如下:BEGIN: MOV B

13、X, 0 ;用于存放四位的16進(jìn)制數(shù)MOV CH, 4MOV CL, 4INPUT: SHL BX, CL ;將前面輸入的數(shù)左移4位MOV AH, 1 ;從鍵盤取數(shù)INT 21HCMP AL, 30H ;<0嗎JB INPUT ;不是0F的數(shù)重新輸入CMP AL, 39H ;是09嗎JA AF ;不是,轉(zhuǎn)AF的處理AND AL, 0FH ;轉(zhuǎn)換為:0000B1001BJMP BINARYAF: AND AL, 1101 1111B ;轉(zhuǎn)換為大寫字母CMP AL, 41H ;又<A嗎JB INPUT ;不是AF的數(shù)重新輸入CMP AL, 46H ;>F嗎JA INPUT ;不是

14、AF的數(shù)重新輸入AND AL, 0FH ;轉(zhuǎn)換為:1010B1111BADD AL, 9BINARY: OR BL, AL ;將鍵盤輸入的數(shù)進(jìn)行組合DEL CHJNZ INPUTDISPN: MOV CX, 16 ;將16位二進(jìn)制數(shù)一位位地轉(zhuǎn)換成ASCII碼顯示DISP: MOV DL, 0ROL BX, 1RCL DL, 1OR DL, 30HMOV AH, 2 ;進(jìn)行顯示INT 21HLOOP DISPSTOP: RET 設(shè)有一段英文,其字符變量名為ENG,并以$字符結(jié)束。試編寫一程序,查對(duì)單詞SUN在該文中的出現(xiàn)次數(shù),并以格式“SUN:xxxx”顯示出次數(shù)。答:程序如下:DSEG SEG

15、MENTENG DB Here is sun, sun ,$DISP DB SUN:DAT DB 0000 , 0DH, 0AH, $KEYWORD DB sunDSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值MOV ES, AX ;給ES賦值BEGIN: MOV AX, 0MOV DX, DISP-ENG-2 ;計(jì)算ENG的長(zhǎng)度(每次比較sun,因此比較次數(shù)-2)

16、LEA BX, ENGCOMP: MOV DI, BXLEA SI, KEYWORDMOV CX, 3REPE CMPSB ;串比較JNZ NOMATCHINC AX ;是,SUN的個(gè)數(shù)加1ADD BX, 2NOMATCH: INC BX ;指向ENG的下一個(gè)字母DEC DXJNZ COMPDONE: MOV CH, 4 ;將次數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)的ASCII碼MOV CL, 4LEA BX, DAT ;轉(zhuǎn)換結(jié)果存入DAT單元中DONE1: ROL AX, CLMOV DX, AXAND DL, 0FH ;取一位16進(jìn)制數(shù)ADD DL, 30HCMP DL, 39HJLE STOREADD DL

17、, 07H ;是“AF”所以要加7STORE: MOV BX, DL ;轉(zhuǎn)換結(jié)果存入DAT單元中INC BXDEC CHJNZ DONE1DISPLAY: LEA DX, DISP ;顯示字符串程序(將DISP和DAT一起顯示)MOV AH, 09HINT 21HRETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 從鍵盤輸入一系列以$為結(jié)束符的字符串,然后對(duì)其中的非數(shù)字字符計(jì)數(shù),并顯示出計(jì)數(shù)結(jié)果。答:程序段如下:DSEG SEGMENTBUFF DB 50 DUP ( )COUNT DW 0DSEG ENDSBEGIN: LEA BX, BUFFMOV COUN

18、T, 0INPUT: MOV AH, 01 ;從鍵盤輸入一個(gè)字符的功能調(diào)用INT 21HMOV BX, ALINC BXCMP AL, $ ;是$結(jié)束符嗎JNZ INPUT ;不是,繼續(xù)輸入LEA BX, BUFF ;對(duì)非數(shù)字字符進(jìn)行計(jì)數(shù)NEXT: MOV CL, BXINC BXCMP CL, $ ;是$結(jié)束符,則轉(zhuǎn)去顯示JZ DISPCMP CL, 30H ;小于0是非數(shù)字字符JB NEXTCMP CL, 39H ;大于9是非數(shù)字字符JA NEXTINC COUNT ;個(gè)數(shù)+1JMP NEXTDISP: ;16進(jìn)制數(shù)顯示程序段(省略) 有一個(gè)首地址為MEM的100D字?jǐn)?shù)組,試編制程序刪除數(shù)

19、組中所有為0的項(xiàng),并將后續(xù)項(xiàng)向前壓縮,最后將數(shù)組的剩余部分補(bǔ)上0。答:程序如下:DSEG SEGMENTMEM DW 100 DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV SI, (100-1)*2 ;(SI)指向MEM的末元素的首地址MOV BX, -2 ;地址指針的初值MOV CX, 100COMP: ADD BX, 2CMP MEM BX, 0

20、JZ CONSLOOP COMPJMP FINISH ;比較完了,已無(wú)0則結(jié)束CONS: MOV DI, BXCONS1: CMP DI, SI ;到了最后單元碼JAE NOMOVMOV AX, MEM DI+2 ;后面的元素向前移位MOV MEM DI, AXADD DI, 2JMP CONS1NOMOV: MOV WORD PTR SI, 0 ;最后單元補(bǔ)0LOOP COMPFINISH: RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 在STRING到STRING+99單元中存放著一個(gè)字符串,試編制一個(gè)程序測(cè)試該字符串中是否存在數(shù)字,如有則把CL的第5

21、位置1,否則將該位置0。答:程序如下:DSEG SEGMENTSTRING DB 100 DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV SI, 0 ;(SI)作為地址指針的變化值MOV CX, 100REPEAT: MOV AL, STRING SICMP AL, 30HJB GO_ONCMP AL, 39HJA GO_ONOR CL, 20H ;存

22、在數(shù)字把CL的第5位置1JMP EXITGO_ON: INC SILOOP REPEATAND CL, 0DFH ;不存在數(shù)字把CL的第5位置0EXIT: RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 在首地址為TABLE的數(shù)組中按遞增次序存放著100H個(gè)16位補(bǔ)碼數(shù),試編寫一個(gè)程序把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于AX和CX中。答:程序如下:DSEG SEGMENTTABLE DW 100H DUP () ;數(shù)組中的數(shù)據(jù)是按增序排列的DATA DW COUNT DW 0DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSU

23、ME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV CX, 100H ;循環(huán)計(jì)數(shù)器MOV SI, 0NEXT: MOV DX, 0MOV AX, TABLE SICOMP: CMP TABLE SI, AX ;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù)JNE ADDRINC DXADD SI, 2LOOP COMPADDR: CMP DX, COUNT ;此數(shù)出現(xiàn)的次數(shù)最多嗎JLE DONEMOV COUNT, DX ;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)MOV DATA

24、, AX ;記下此數(shù)DONE: LOOP NEXT ;準(zhǔn)備取下一個(gè)數(shù)MOV CX, COUNT ;出現(xiàn)最多的次數(shù)存入(CX)MOV AX, DATA ;出現(xiàn)最多的數(shù)存入(AX)RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 數(shù)據(jù)段中已定義了一個(gè)有n個(gè)字?jǐn)?shù)據(jù)的數(shù)組M,試編寫一程序求出M中絕對(duì)值最大的數(shù),把它放在數(shù)據(jù)段的M+2n單元中,并將該數(shù)的偏移地址存放在M+2(n+1)單元中。答:程序如下:DSEG SEGMENTn EQU 100H ;假設(shè)n=100HM DW n DUP ()DATA DW ;M+2n單元ADDR DW ;M+2(n+1)單元DSEG

25、ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV CX, n ;循環(huán)計(jì)數(shù)器LEA DI, MMOV AX, DI ;取第一個(gè)數(shù)MOV ADDR, DI ;記下絕對(duì)值最大的數(shù)的地址CMP AX, 0 ;此數(shù)是正數(shù)嗎JNS ZHEN ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去判斷下一個(gè)數(shù)NEG AX ;不是正數(shù),變?yōu)槠浣^對(duì)值ZHEN: MOV BX, DICMP BX, 0 ;此數(shù)是正數(shù)嗎JNS

26、 COMP ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去比較絕對(duì)值大小NEG BX ;不是正數(shù),變?yōu)槠浣^對(duì)值COMP: CMP AX, BX ;判斷絕對(duì)值大小JAE ADDRESSMOV AX, BX ;(AX)<(BX),使(AX)中為絕對(duì)值最大的數(shù)MOV ADDR, DI ;記下絕對(duì)值最大的數(shù)的地址ADDRESS: ADD DI, 2LOOP ZHENMOV DATA, AX ;記下此數(shù)RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 在首地址為DATA的字?jǐn)?shù)組中存放著100H個(gè)16位補(bǔ)碼數(shù),試編寫一個(gè)程序求出它們的平均值放在AX寄存器中;并求出數(shù)組中有多少個(gè)數(shù)小于此

27、平均值,將結(jié)果放在BX寄存器中。答:程序如下:DSEG SEGMENTDATA DW 100H DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV CX, 100H ;循環(huán)計(jì)數(shù)器MOV SI, 0MOV BX, 0 ;和(DI),(BX)的初始值MOV DI, 0NEXT: MOV AX, DATA SICWDADD BX, AX ;求和ADC DI, D

28、X ;加上進(jìn)位位ADD SI, 2LOOP NEXTMOV DX, DI ;將(DI),(BX)中的累加和放入(DX),(AX)中MOV AX, BXMOV CX, 100HIDIV CX ;帶符號(hào)數(shù)求平均值,放入(AX)中MOV BX, 0MOV SI, 0COMP: CMP AX, DATA SI ;尋找小于平均值的數(shù)JLE NOINC BX ;小于平均值數(shù)的個(gè)數(shù)+1NO: ADD SI, 2LOOP COMPRETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 試編制一個(gè)程序把AX中的16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,并將對(duì)應(yīng)的ASCII碼依次存放到MEM數(shù)組中

29、的四個(gè)字節(jié)中。例如,當(dāng)(AX)=2A49H時(shí),程序執(zhí)行完后,MEM中的4個(gè)字節(jié)內(nèi)容為39H,34H,41H,32H。答:程序如下:DSEG SEGMENTMEM DB 4 DUP ()N DW 2A49HDSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV CH, 4 ;循環(huán)計(jì)數(shù)器MOV CL, 4MOV AX, NLEA BX, MEMROTATE: MOV DL,

30、AL ;從最低四位開始轉(zhuǎn)換為ASCII碼AND DL, 0FHADD DL, 30HCMP DL, 3AH ;是09嗎JL NEXTADD DL, 07H ;是AFNEXT: MOV BX, DL ;轉(zhuǎn)換的ASCII碼送入MEM中INC BXROR AX, CL ;準(zhǔn)備轉(zhuǎn)換下一位DEC CHJNZ ROTATERETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 把0100D之間的30個(gè)數(shù)存入以GRADE為首地址的30字?jǐn)?shù)組中,GRADE+i表示學(xué)號(hào)為i+1的學(xué)生的成績(jī)。另一個(gè)數(shù)組RANK為30個(gè)學(xué)生的名次表,其中RANK+i的內(nèi)容是學(xué)號(hào)為i+1的學(xué)生的名次。編寫

31、一程序,根據(jù)GRADE中的學(xué)生成績(jī),將學(xué)生名次填入RANK數(shù)組中。(提示:一個(gè)學(xué)生的名次等于成績(jī)高于這個(gè)學(xué)生的人數(shù)加1。)答:程序如下:DSEG SEGMENTGRADE DW 30 DUP () ;假設(shè)已預(yù)先存好30名學(xué)生的成績(jī)RANK DW 30 DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV DI, 0 MOV CX, 30 ;外循環(huán)計(jì)數(shù)器LOO

32、P1: PUSH CXMOV CX, 30 ;內(nèi)循環(huán)計(jì)數(shù)器MOV SI, 0MOV AX, GRADE DIMOV DX, 1 ;起始名次為第1名LOOP2: CMP GRADE SI, AX ;成績(jī)比較JBE GO_ONINC DX ;名次+1GO_ON: ADD SI, 2LOOP LOOP2POP CXMOV RNAK DI, DX ;名次存入RANK數(shù)組ADD DI, 2LOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 已知數(shù)組A包含15個(gè)互不相等的整數(shù),數(shù)組B包含20個(gè)互不相等的整數(shù)。試編制一程序把既在A中又在B中出現(xiàn)的整數(shù)存放于

33、數(shù)組C中。答:程序如下:DSEG SEGMENTA DW 15 DUP ()B DW 20 DUP ()C DW 15 DUP ( )DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV SI, 0MOV BX, 0MOV CX, 15 ;外循環(huán)計(jì)數(shù)器LOOP1: PUSH CXMOV CX, 20 ;內(nèi)循環(huán)計(jì)數(shù)器MOV DI, 0MOV AX, A SI ;取A數(shù)組中

34、的一個(gè)數(shù)LOOP2: CMP B DI, AX ;和B數(shù)組中的數(shù)相等嗎JNE NOMOV C BX, AX ;相等存入C數(shù)組中ADD BX, 2NO: ADD DI, 2LOOP LOOP2ADD SI, 2POP CXLOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 設(shè)在A、B和C單元中分別存放著三個(gè)數(shù)。若三個(gè)數(shù)都不是0,則求出三數(shù)之和存放在D單元中;若其中有一個(gè)數(shù)為0,則把其它兩單元也清0。請(qǐng)編寫此程序。答:程序如下:DSEG SEGMENTA DW B DW C DW D DW 0DSEG ENDS;-CSEG SEGMENTMAIN

35、 PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: CMP A, 0JE NEXTCMP B, 0JE NEXTCMP C, 0JE NEXTMOV AX, AADD AX, BADD AX, CMOV D, AXJMP SHORT EXITNEXT: MOV A, 0MOV B, 0MOV C, 0EXIT: RETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 試編寫一程序,要求比較數(shù)組ARRA

36、Y中的三個(gè)16位補(bǔ)碼數(shù),并根據(jù)比較結(jié)果在終端上顯示如下信息:(1) 如果三個(gè)數(shù)都不相等則顯示0;(2) 如果三個(gè)數(shù)有二個(gè)數(shù)相等則顯示1;(3) 如果三個(gè)數(shù)都相等則顯示2。答:程序如下:DSEG SEGMENTARRAY DW 3 DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: LEA SI, ARRAYMOV DX, 0 ;(DX)用于存放所求的結(jié)果MOV A

37、X, SIMOV BX, SI+2CMP AX, BX ;比較第一和第二兩個(gè)數(shù)是否相等JNE NEXT1INC DXNEXT1: CMP SI+4, AX ;比較第一和第三兩個(gè)數(shù)是否相等JNE NEXT2INC DXNEXT2: CMP SI+4, BX ;比較第二和第三兩個(gè)數(shù)是否相等JNE NUMINC DXNUM: CMP DX, 3JL DISPDEC DXDISP: ADD DL, 30H ;轉(zhuǎn)換為ASCII碼MOV AH, 2 ;顯示一個(gè)字符INT 21HRETMAIN ENDPCSEG ENDS ;以上定義代碼段;-END START 從鍵盤輸入一系列字符(以回車符結(jié)束),并按字母

38、、數(shù)字、及其它字符分類計(jì)數(shù),最后顯示出這三類的計(jì)數(shù)結(jié)果。答:程序如下:DSEG SEGMENTALPHABET DB 輸入的字母字符個(gè)數(shù)為:, $NUMBER DB 輸入的數(shù)字字符個(gè)數(shù)為:, $OTHER DB 輸入的其它字符個(gè)數(shù)為:, $CRLF DB 0DH, 0AH, $DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV BX, 0 ;字母字符計(jì)數(shù)器MOV SI

39、, 0 ;數(shù)字字符計(jì)數(shù)器MOV DI, 0 ;其它字符計(jì)數(shù)器INPUT: MOV AH, 1 ;輸入一個(gè)字符INT 21HCMP AL, 0DH ;是回車符嗎JE DISPCMP AL, 30H ;<數(shù)字0嗎JAE NEXT1OTHER: INC DI ;是其它字符JMP SHORT INPUTNEXT1: CMP AL, 39H ;>數(shù)字9嗎JA NEXT2INC SI ;是數(shù)字字符JMP SHORT INPUTNEXT2: CMP AL, 41H ;<字母A嗎JAE NEXT3JMP SHORT OTHER ;是其它字符NEXT3: CMP AL, 5AH ;>字母

40、Z嗎JA NEXT4INC BX ;是字母字符AZJMP SHORT INPUTNEXT4: CMP AL, 61H ;<字母a嗎JAE NEXT5JMP SHORT OTHER ;是其它字符NEXT5: CMP AL, 7AH ;>字母z嗎JA SHORT OTHER ;是其它字符INC BX ;是字母字符azJMP SHORT INPUTDISP: LEA DX, ALPHABETCALL DISPLAYLEA DX, NUMBERMOV BX, SICALL DISPLAYLEA DX, OTHERMOV BX, DICALL DISPLAYRETMAIN ENDP;-DIS

41、PLAY PROC NEARMOV AH, 09H ;顯示字符串功能調(diào)用INT 21HCALL BINIHEX ;調(diào)把BX中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制顯示子程序LEA DX, CRLFMOV AH, 09H ;顯示回車換行INT 21HRETDISPLAY ENDP;-BINIHEX PROC NEAR ;將BX中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)顯示子程序MOV CH, 4ROTATE: MOV CL, 4ROL BX, CLMOV DL, BLAND DL, 0FHADD DL, 30HCMP DL, 3AH ;是AF嗎JL PRINT_ITADD DL, 07HPRINT_IT: MOV AH, 02

42、H ;顯示一個(gè)字符INT 21HDEC CHJNZ ROTATERETBINIHEX ENDPCSEG ENDS ;以上定義代碼段;-END START 已定義了兩個(gè)整數(shù)變量A和B,試編寫程序完成下列功能:(1) 若兩個(gè)數(shù)中有一個(gè)是奇數(shù),則將奇數(shù)存入A中,偶數(shù)存入B中;(2) 若兩個(gè)數(shù)中均為奇數(shù),則將兩數(shù)加1后存回原變量;(3) 若兩個(gè)數(shù)中均為偶數(shù),則兩個(gè)變量均不改變。答:程序如下:DSEG SEGMENTA DW B DW DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOSS

43、UB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV AX, AMOV BX, BXOR AX, BXTEST AX, 0001H ;A和B同為奇數(shù)或偶數(shù)嗎JZ CLASS ;A和B都為奇數(shù)或偶數(shù),轉(zhuǎn)走TEST BX, 0001HJZ EXIT ;B為偶數(shù),轉(zhuǎn)走XCHG BX, A ;A為偶數(shù),將奇數(shù)存入A中MOV B, BX ;將偶數(shù)存入B中JMP EXITCLASS: TEST BX, 0001H ;A和B都為奇數(shù)嗎JZ EXIT ;A和B同為偶數(shù),轉(zhuǎn)走INC BINC AEXIT: RETMAIN ENDPCSEG ENDS ;以

44、上定義代碼段;-END START 假設(shè)已編制好5個(gè)歌曲程序,它們的段地址和偏移地址存放在數(shù)據(jù)段的跳躍表SINGLIST中。試編制一程序,根據(jù)從鍵盤輸入的歌曲編號(hào)15,轉(zhuǎn)去執(zhí)行五個(gè)歌曲程序中的某一個(gè)。答:程序如下:DSEG SEGMENTSINGLIST DD SING1DD SING2DD SING3DD SING4DD SING5ERRMSG DB Error! Invalid parameter!, 0DH, 0AH, $DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回DOS

45、SUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給DS賦值BEGIN: MOV AH, 1 ;從鍵盤輸入的歌曲編號(hào)15INT 21HCMP AL, 0DHJZ EXIT ;是回車符,則結(jié)束SUB AL, 1 ;是15嗎JB ERROR ;小于1,錯(cuò)誤CMP AL, 4JA ERROR ;大于5,錯(cuò)誤MOV BX, OFFSET SINGLISTMUL AX, 4 ;(AX)=(AL)*4,每個(gè)歌曲程序的首地址占4個(gè)字節(jié)ADD BX, AXJMP DWORD PTRBX ;轉(zhuǎn)去執(zhí)行歌曲程序ERROR: MOV DX, OFFSET ERRMSGMOV AH, 09HINT 21H ;顯示錯(cuò)誤信息JMP BEGI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論