版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五章5.1 試編寫一個(gè)匯編語言程序,要求對(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: RET5.2 編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符, 再按順序顯示這三個(gè)字符。 答:程
2、序段如下:BEGIN: 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 DLSTOP: RET5.3 將 AX 寄存器中的 16 位數(shù)分成 4 組,每組 4 位,然后把這四組數(shù)分別放在 AL、BL、CL 和 DL 中。答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP (?)DSEG
3、 ENDSIIIBEGIN: 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: RET5.4 試編寫一程序,要求比較兩個(gè)字符串 STRING1 和 STRING2
4、 所含字符是否 完全相同,若相同則顯示 MATCH , 若不相同則顯示 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 ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV
5、 DS, AX ;給 DS 賦值MOV ES, AX ;給 ES 賦值?BEGIN: LEA SI, STRING1 ;設(shè)置串比較指令的初值LEA DI, STRING2CLDREPE CMPSB ;串比較JNE DISPNOLEA DX, YES ;顯示 MATCHJMP DISPLAYDISPNO: LEA DX, NO ;顯示 NO MATCHDISPLAY: MOV AH, 9 ;顯示一個(gè)字符串的 DOS 調(diào)用INT 21HRETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.5 試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù) N ,然后響鈴 N 次(響鈴的 AS
6、CII 碼為 07) 。答:程序段如下:BEGIN: MOV AH, 1 ;從鍵盤輸入一個(gè)字符的 DOS 調(diào)用INT 21HSUB AL, 0 JB STOP ;輸入字符 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: RET5.6 編寫程序,將一個(gè)包含有 20 個(gè)數(shù)據(jù)的數(shù)組 M 分成兩個(gè)數(shù)組:正數(shù)數(shù)組 P和負(fù)數(shù)數(shù)組 N ,并分別把這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來答
7、:程序如下:DSEG SEGMENTCOUNT 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ù);正數(shù)的個(gè)數(shù)是:;負(fù)數(shù)的個(gè)數(shù)是:ZHEN DB 0DH, 0AH, The positive number is :, $FU DB 0DH, 0AH, The negative number is :, $CRLF DB 0DH, 0AH, $ DSEG ENDSCSEG SEGMENTMAIN PRO
8、C FARASSUME CS: CSEG, DS: 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ù)組ADD SI, 2JMP SHORT NEXTFUSHU: MOV DI, AX ;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組INC COUNT2 ;負(fù)數(shù)個(gè)數(shù) +1AD
9、D DI, 2NEXT: 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 ENDPDISPLAY PROC NEAR ;顯示子程序MOV AH, 9 ;顯示一個(gè)字符串的 DOS 調(diào)用INT 21HBCD 碼AAM ;將(AL)中的二進(jìn)制數(shù)轉(zhuǎn)換為二個(gè)非壓縮ADD AH, 0 ;變?yōu)?09 的 ASCII 碼MOV DL, AHMOV AH, 2 ;顯示一個(gè)字符的 DOS 調(diào)用IN
10、T 21HADD AL, 0 ;變?yōu)?0 9 的 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 START5.7 試編寫一個(gè)匯編語言程序,求出首地址為 DATA 的 100D 字?jǐn)?shù)組中的最小 偶數(shù),并把它存放在 AX 中。答:程序段如下:BEGIN: MOV BX, 0MOV CX, 100COMPARE: MOV AX, DATABX ;取數(shù)組的
11、第一個(gè)偶數(shù)ADD BX, 2TEST AX, 01H ;是偶數(shù)嗎?LOOPNZ 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: RET5.8 把 AX 中存放的 16 位二
12、進(jìn)制數(shù) K 看作是 8 個(gè)二進(jìn)制的“四分之一字節(jié)”。 試編寫程序要求數(shù)一下值為 3(即 11B) 的四分之一字節(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: RET5.9 試編寫一
13、個(gè)匯編語言程序,要求從鍵盤接收一個(gè)四位的 16 進(jìn)制數(shù),并在終端上顯示與它等值的二進(jìn)制數(shù)。答:程序段如下:BEGIN: MOV BX, 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)換為: 0000B 1001BJMP BINARYAF: AND AL, 1101 1111B;轉(zhuǎn)換為大寫字母C
14、MP AL, 41H ;又 F 嗎?JA INPUT ;不是 AF的數(shù)重新輸入AND AL, 0FH ;轉(zhuǎn)換為: 1010B 1111BADD 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: RET5.10設(shè)有一段英文,其字符變量名為 ENG,并以$字符結(jié)束。試編寫一程序,查對(duì)單詞 SUN 在該
15、文中的出現(xiàn)次數(shù),并以格式“ SUN : xxxx ”顯示出次數(shù)。答:程序如下:DSEG SEGMENTENG DB Here is sun, sun ,$DISP DB SUN :DAT DB 0000 , 0DH, 0AH, $KEYWORD DB sun DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV ES, AX ;給 ES 賦值BEGIN: MOV AX, 0MOV DX, DISP-
16、ENG-2 ;計(jì)算ENG的長(zhǎng)度(每次比較sun,因此比較次數(shù)-2) 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 ;取一位
17、 16 進(jìn)制數(shù)ADD DL, 30HCMP DL, 39HJLE STOREADD DL, 07H;是“ AF”所以要加7STORE: MOV BX, DL ;轉(zhuǎn)換結(jié)果存入 DAT 單元中INC BXDEC CHJNZ DONE1起顯示 )DISPLAY: LEA DX, DISP ;顯示字符串程序 (將 DISP 和 DATINT 21HRETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.11 從鍵盤輸入一系列以 $ 為結(jié)束符的字符串,然后對(duì)其中的非數(shù)字字符計(jì)數(shù), 并顯示出計(jì)數(shù)結(jié)果。答:程序段如下:DSEG SEGMENTBUFF DB 50 DUP ( )CO
18、UNT DW 0DSEG ENDSIIIBEGIN: LEA BX, BUFFINPUT: 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:
19、: ; 16進(jìn)制數(shù)顯示程序段(省略)5.12 有一個(gè)首地址為 MEM 的 100D 字?jǐn)?shù)組,試編制程序刪除數(shù)組中所有為 0 的項(xiàng),并將后續(xù)項(xiàng)向前壓縮,最后將數(shù)組的剩余部分補(bǔ)上0 。答:程序如下:DSEG SEGMENTMEM DW 100 DUP (?)DSEG ENDSCSEG 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 的末元素的首
20、地址MOV BX, -2 ;地址指針的初值MOV CX, 100COMP: ADD BX, 2CMP MEM BX, 0JZ CONSLOOP COMPJMP FINISH ;比較完了,已無 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 STAR
21、T5.13 在 STRING 到 STRING+99 單元中存放著一個(gè)字符串,試編制一個(gè)程序測(cè) 試該字符串中是否存在數(shù)字,如有則把 CL 的第 5 位置 1,否則將該位置 0。 答:程序如下:DSEG SEGMENTSTRING DB 100 DUP (?)DSEG ENDSCSEG 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,
22、100REPEAT: MOV AL, STRING SICMP AL, 30HJB GO_ONCMP AL, 39HJA GO_ONJMP EXITGO_ON: INC SILOOP REPEATAND CL, 0DFH ;不存在數(shù)字把 CL 的第 5 位置 0EXIT: RETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.14 在首地址為 TABLE 的數(shù)組中按遞增次序存放著 100H 個(gè) 16 位補(bǔ)碼數(shù),試 編寫一個(gè)程序把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于 AX 和 CX 中。答:程序如下:DSEG SEGMENTTABLE DW 100H DUP (?)
23、 ;數(shù)組中的數(shù)據(jù)是按增序排列的DATA DW ?COUNT DW 0DSEG ENDSCSEG 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, 0NEXT: MOV DX, 0MOV AX, TABLE SICOMP: CMP TABLE SI, AX ;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù)JNE ADDRINC DXADD SI, 2LOOP COMPADD
24、R: CMP DX, COUNT ;此數(shù)出現(xiàn)的次數(shù)最多嗎?JLE DONEMOV COUNT, DX ;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)MOV DATA, AX ;記下此數(shù)DONE: LOOP NEXT ;準(zhǔn)備取下一個(gè)數(shù)MOV CX, COUNT ;出現(xiàn)最多的次數(shù)存入 (CX)MOV AX, DATA ;出現(xiàn)最多的數(shù)存入 (AX)RETMAIN ENDPEND START5.15 數(shù)據(jù)段中已定義了一個(gè)有 n 個(gè)字?jǐn)?shù)據(jù)的數(shù)組 M ,試編寫一程序求出 M 中 絕對(duì)值最大的數(shù),把它放在數(shù)據(jù)段的 M+2n 單元中,并將該數(shù)的偏移地址存放 在 M+2(n+1) 單元中。答:程序如下:DSEG SEGME
25、NTn EQU 100H ;假設(shè) n=100HM DW n DUP (?)DATA DW ? ; M+2n 單元ADDR DW ? ; M+2(n+1) 單元DSEG ENDSCSEG 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ù)是正
26、數(shù)嗎?JNS ZHEN ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去判斷下一個(gè)數(shù)NEG AX ;不是正數(shù),變?yōu)槠浣^對(duì)值ZHEN: MOV BX, DICMP BX, 0 ;此數(shù)是正數(shù)嗎?JNS COMP ;是正數(shù),即為絕對(duì)值,轉(zhuǎn)去比較絕對(duì)值大小NEG BX ;不是正數(shù),變?yōu)槠浣^對(duì)值COMP: CMP AX, BX ;判斷絕對(duì)值大小JAE ADDRESSMOV AX, BX ; (AX)v(BX),使(AX)中為絕對(duì)值最大的數(shù)MOV ADDR, DI ;記下絕對(duì)值最大的數(shù)的地址ADDRESS: ADD DI, 2LOOP ZHENMOV DATA, AX ;記下此數(shù)RETMAIN ENDPCSEG ENDS ;以
27、上定義代碼段END START5.16 在首地址為 DATA 的字?jǐn)?shù)組中存放著 100H 個(gè) 16 位補(bǔ)碼數(shù),試編寫一個(gè) 程序求出它們的平均值放在 AX 寄存器中; 并求出數(shù)組中有多少個(gè)數(shù)小于此平均 值,將結(jié)果放在 BX 寄存器中答:程序如下:DSEG SEGMENTDATA DW 100H DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給 DS 賦值BEGIN: MOV CX,
28、100H ;循環(huán)計(jì)數(shù)器MOV SI, 0MOV BX, 0 ;和 (DI),(BX) 的初始值MOV DI, 0NEXT: MOV AX, DATA SICWDADD BX, AX ;求和ADC DI, DX ;加上進(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
29、, 2LOOP COMPRETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.17 試編制一個(gè)程序把 AX 中的 16 進(jìn)制數(shù)轉(zhuǎn)換為 ASCII 碼,并將對(duì)應(yīng)的 ASCII 碼依次存放到 MEM 數(shù)組中的四個(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 ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH
30、 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, 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 ROTATERETMA
31、IN ENDPCSEG ENDS ;以上定義代碼段END START5.18 把 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é)生的名次。編寫一程序,根據(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 DU
32、P (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給 DS 賦值BEGIN: MOV DI, 0MOV CX, 30 ;外循環(huán)計(jì)數(shù)器LOOP1: 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 ;名次 +1G
33、O_ON: ADD SI, 2LOOP LOOP2POP CXMOV RNAK DI, DX ;名次存入 RANK 數(shù)組ADD DI, 2LOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.19 已知數(shù)組 A 包含 15 個(gè)互不相等的整數(shù),數(shù)組 B 包含 20 個(gè)互不相等的整 數(shù)。試編制一程序把既在 A 中又在 B 中出現(xiàn)的整數(shù)存放于數(shù)組 C 中。答:程序如下:DSEG SEGMENTA DW 15 DUP (?)B DW 20 DUP (?)C DW 15 DUP ( )DSEG ENDSCSEG SEGMENTMAIN PROC FARAS
34、SUME 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ù)組中的一個(gè)數(shù)LOOP2: CMP B DI, AX ;和 B 數(shù)組中的數(shù)相等嗎?JNE NOMOV C BX, AX ;相等存入 C 數(shù)組中ADD BX, 2NO: ADD DI, 2LOOP LOOP2
35、ADD SI, 2POP CXLOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.20設(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 ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGM
36、OV 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 START5.21 試編寫一程序, 要求比較數(shù)組 ARRAY 中的三個(gè) 16 位補(bǔ)碼數(shù),并根據(jù)比較 結(jié)果在終端上顯示如下信息:(1) 如果三個(gè)數(shù)都不相等則顯示 0;(2) 如果三個(gè)數(shù)有二個(gè)數(shù)相等則顯示 1;(3) 如果三
37、個(gè)數(shù)都相等則顯示 2。答:程序如下:DSEG SEGMENTARRAY DW 3 DUP (?)DSEG ENDSCSEG 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 AX, SIMOV BX, SI+2CMP AX, BX ;比較第一和第二兩個(gè)數(shù)是否相等JNE NEXT1INC DXNEXT1: CMP SI+
38、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 START5.22 從鍵盤輸入一系列字符 (以回車符結(jié)束 ),并按字母、數(shù)字、及其它字符分 類計(jì)數(shù),最后顯示出這三類的計(jì)數(shù)結(jié)果。答:程序如下:DSEG SEGMENTALPHABET DB 輸入的字母字
39、符個(gè)數(shù)為: , $NUMBER DB 輸入的數(shù)字字符個(gè)數(shù)為: , $OTHER DB 輸入的其它字符個(gè)數(shù)為: , $CRLF DB 0DH, 0AH, $ DSEG ENDSCSEG 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, 0 ;數(shù)字字符計(jì)數(shù)器MOV DI, 0 ;其它字符計(jì)數(shù)器INPUT: MOV AH, 1 ;輸入一個(gè)字符INT 21
40、HCMP AL, 0DH ;是回車符嗎?JE DISPCMP AL, 30H ;數(shù)字 0 嗎?JAE NEXT1JMP 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 ;字母 Z 嗎?JA NEXT4INC BX ;是字母字符 AZJMP SHORT INPUTNEXT4: CMP AL, 61H ;字母 a 嗎?JAE NEXT5JMP
41、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 ENDPDISPLAY PROC NEARMOV AH, 09H;顯示字符串功能調(diào)用INT 21HCALL BINIHEX;調(diào)把 BX 中二進(jìn)制數(shù)轉(zhuǎn)換為 16 進(jìn)制顯示子程序LEA
42、 DX, CRLFMOV AH, 09H;顯示回車換行INT 21HRETDISPLAY ENDPBINIHEX 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, 02H ;顯示一個(gè)字符INT 21HDEC CHJNZ ROTATERETBINIHEX ENDPCSEG ENDS ;以上定義代碼段END START5.2
43、3已定義了兩個(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 ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;給 DS 賦值BEGIN: MOV AX, AMOV B
44、X, 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 ;以上定義代碼段END START5.24 假設(shè)已編制好 5 個(gè)歌曲程序,它們的段地址和偏移地址
45、存放在數(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 ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;設(shè)置返回 DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS
46、, AX ;給 DS 賦值15BEGIN: MOV AH, 1 ;從鍵盤輸入的歌曲編號(hào)INT 21HCMP AL, 0DHJB 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 BEGINSING1:JMP BEGINSING2:JMP BEGINSIN
47、G3:JMP BEGINSING4:JMP BEGINSING5:JMP BEGINEXIT: RETMAIN ENDPCSEG ENDS ;以上定義代碼段END START5.25 試用8086 的乘法指令編制一個(gè) 32 位數(shù)和 16 位數(shù)相乘的程序;再用 80386 的乘法指令編制一個(gè) 32 位數(shù)和 16 位數(shù)相乘的程序,并定性比較兩個(gè)程序的效 率。答: 8086 的程序如下 (假設(shè)為無符號(hào)數(shù) ):DSEG SEGMENTMUL1 DD ?;32 位被乘數(shù)MUL2 DW ?; 16 位乘數(shù)MUL0 DW 0,0 ,0 , 0 ;乘積用 64 位單元存放DSEG ENDSCSEG SEGMENTMAIN PROC FARASSU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大型活動(dòng)派遣安保人員合同范本4篇
- 2025年度木工雕刻藝術(shù)作品制作勞務(wù)合同范本3篇
- 2025年度個(gè)人對(duì)企業(yè)發(fā)放的循環(huán)借款合同范本4篇
- 2025年度個(gè)人股份轉(zhuǎn)讓與員工激勵(lì)計(jì)劃合同2篇
- 二零二五年度農(nóng)業(yè)用地土地租賃與農(nóng)業(yè)節(jié)水灌溉技術(shù)合作合同4篇
- 2025年度個(gè)人與公司租賃合同不可抗力條款4篇
- 二零二五年度城市夜景照明與鋪磚一體化工程合同
- 二零二五年度農(nóng)家院租賃合同(生態(tài)農(nóng)業(yè)園區(qū)合作)
- 2025年度門窗行業(yè)市場(chǎng)調(diào)研與分析合同
- 2025年度車輛質(zhì)押貸款逾期處理合同
- 2024-2025學(xué)年山東省濰坊市高一上冊(cè)1月期末考試數(shù)學(xué)檢測(cè)試題(附解析)
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級(jí)上學(xué)期英語期末試卷(含答案無聽力原文無音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長(zhǎng)郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 單位就業(yè)人員登記表
- 衛(wèi)生監(jiān)督協(xié)管-醫(yī)療機(jī)構(gòu)監(jiān)督
- 記錄片21世紀(jì)禁愛指南
- 腰椎間盤的診斷證明書
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)七 裂變傳播
- 單級(jí)倒立擺系統(tǒng)建模與控制器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論