編寫程序【精選文檔】_第1頁
編寫程序【精選文檔】_第2頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、編寫程序【精選文檔】3.22試編寫一程序求出雙字長數(shù)的絕對值.雙字長數(shù)在A和A+2單元中,結(jié)果存放在B和B+2單元中.答:程序段如下:MOVAX, AMOVDX, A+2CMPDX, 0JNSZHENSHU;不是負(fù)數(shù)則轉(zhuǎn)走NEGDXNEGAXSBBDX, 0ZHENSHU:MOVB, AXMOVB+2, DXINT20H3.30編寫程序段,把字符串STRING中的'字符用空格符代替。STRING DB The date is FEB&03'答:程序段如下:MOVCX, 18MOVAL, CLDMOVDI, SEG STRINGMOVES, DI ;ES段基地址LEADI

2、, STRINGREPNESCASB ;不相等重復(fù)JNENEXT ;相等跳轉(zhuǎn)DECDIMOVES:BYTE PTR DI, ;送空格符NEXT: 3.31假設(shè)數(shù)據(jù)段中數(shù)據(jù)定義如下:STUDENT_NAMEDB 30 DUP (?)STUDENT_ADDRDB 9 DUP (?)PRINT_LINEDB 132 DUP (?)分別編寫下列程序段:(1) 用空格符清除PRINT_LINE域.(2) 在STUDENT_ADDR中查找第一個.(3) 在STUDENT_ADDR中查找最后一個'。(4) 如果STUDENT_NAME域中全是空格符時,填入*。(5) 把STUDENT_NAME移到P

3、RINT_LINE的前30個字節(jié)中,把STUDENT_ ADDR移到PRINT_LINE的后9個字節(jié)中。答:公共的程序段如下:MOVDI, DSMOVES, DI(1) MOVCX, 132MOVAL., ;空格的ASCII碼送AL寄存器CLDLEADI, PRINT_LINEREPSTOSB(2) MOVCX, 9MOVAL。, -CLDLEADI, STUDENT_ ADDRREPNE SCASBJNE NO_DASHDECDINO_DASH: (3) MOVCX, 9MOVAL。, STDLEADI, STUDENT_ ADDRADDDI, 91REPNE SCASBJNE NO_DAS

4、HINC DINO_DASH: (4) MOVCX, 30MOVAL, ;空格的ASCII碼送AL寄存器CLDLEADI, STUDENT_NAMEREPESCASBJNENEXTMOVCX, 30MOVAL, ;“”的ASCII碼送AL寄存器LEADI, STUDENT_NAMEREPSTOSBNEXT: (5) MOVCX, 30CLDLEASI, STUDENT_NAMELEADI, PRINT_LINEREPMOVSBMOVCX, 9STDLEASI, STUDENT_ADDR+9-1LEADI, PRINT_LINE+1321REPMOVSB3.32編寫一程序段:比較兩個5字節(jié)的字符

5、串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串則執(zhí)行NEW_LESS;否則順序執(zhí)行程序。答:程序段如下:MOVCX, 5CLDMOVDI, SEG OLDSMOVDS, DIMOVES, DILEASI, OLDSLEADI, NEWSREPE CMPSBJNENEW_LESSNEW_LESS:3.47請編寫一程序段,要求把ECX、EDX和ESI的內(nèi)容相加,其和存入EDI寄存器中(不考慮溢出)。答:MOVEDI,0也可為:MOVEDI,ECXADDEDI,ECXADDEDI,EDXADDEDI,EDXADDEDI,ESIADDEDI,ESI3。49試編寫一程序段,要求把BL中的數(shù)

6、除以CL中的數(shù),并把其商乘以2,最后的結(jié)果存入DX寄存器中。答:MOVAL,BLMOVAH,0;假定為無符號數(shù),否則用CBW指令即可DIVCLMOVAH,0SHLAX,1 ;邏輯左移1位MOVDX,AX原(BP)低字節(jié)原(BP)高字節(jié)存儲器002EH002FH0030H0031H0032H0033H0034H0035H0036H0037H0038H0039H003AH003BH003CH003DH003EH003FH0040H堆棧幀原(SP)新(BP)新(SP)3.52題的答案3。51試編寫一程序段,要求在長度為100H字節(jié)的數(shù)組中,找出大于42H的無符號數(shù)的個數(shù)并存入字節(jié)單元UP中;找出小于

7、42H的無符號數(shù)的個數(shù)并存入字節(jié)單元DOWN中。答:JMPBEGIN ;無條件轉(zhuǎn)移UPDB 0DOWNDB 0TABLEDB 100H DUP (?);數(shù)組BEGIN:MOVCX,100HMOVBX,-1 ;數(shù)組下標(biāo)MOVSI,0MOVDI,0L1:INCBXCMPTABLEBX,42HJAL2 ;高于JBL3 ;低于JMPL4 ;否則跳到L4L2:INCSI ;UPJMPL4 L3:INCDI ;DOWNL4:LOOPL1MOVUP,SIMOVDOWN,DI4.1 1試寫出一個完整的數(shù)據(jù)段DATA_SEG,它把整數(shù)5賦予一個字節(jié),并把整數(shù)-1,0,2,5和4放在10字?jǐn)?shù)組DATA_LIST的

8、頭5個單元中.然后,寫出完整的代碼段,其功能為:把DATA_LIST中頭5個數(shù)中的最大值和最小值分別存入MAX和MIN單元中.答:DATA_SEGSEGMENTNUMDB 5DATA_LISTDW -1, 0, 2, 5, 4, 5 DUP (?)MAXDW ?MINDW ?DATA_SEGENDS;-CODE_SEGSEGMENTMAINPROCFARASSUME CS: CODE_SEG, DS: DATA_SEGSTART:PUSHDS;設(shè)置返回DOSSUBAX, AXPUSHAXMOVAX, DATA_SEG;給DS賦值MOVDS, AX;MOVCX, 4;程序段開始LEABX, DA

9、TA_LISTMOVAX, BXMOVMAX, AXMOVMIN, AXROUT1: ADDBX, 2MOVAX, BXCMPAX, MAXJNGEROUT2MOVMAX, AXROUT2: CMPAX, MINJNLEROUT3MOVMIN, AXROUT3: LOOPROUT1;程序段結(jié)束RETMAINENDPCODE_SEGENDS;-ENDSTART4。17寫一個完整的程序放在代碼段C_SEG中,要求把數(shù)據(jù)段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把結(jié)果存放在D_SEG 段中的SUM中。其中AUGEND、ADDEND和SUM均為雙精度數(shù),AUGEND賦值為9

10、9251,ADDEND賦值為 -15962。答:程序如下:D_SEGSEGMENTAUGWLABEL WORDAUGENDDD99251SUMDD?D_SEGENDS;以上定義數(shù)據(jù)段;-E_SEGSEGMENTADDWLABEL WORDADDENDDD-15962E_SEGENDS;以上定義附加段;-C_SEGSEGMENTMAINPROCFARASSUME CS: C_SEG, DS: D_SEG, ES: E_SEGSTART:PUSHDS;設(shè)置返回DOSSUBAX, AXPUSHAXMOVAX, D_SEGMOVDS, AX;給DS賦值MOVAX, E_SEGMOVES, AX;給ES

11、賦值;MOVAX,AUGW;以下6條指令進(jìn)行加法計算MOVBX, AUGW+2ADDAX, ES: ADDWADCBX, ES: ADDW+2;不考慮有符號數(shù)溢出MOVWORD PTR SUM, AXMOVWORD PTR SUM+2, BXRETMAINENDPC_SEGENDS;以上定義代碼段;-ENDSTART5.1 試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。答:程序段如下:BEGIN:MOV AH, 1;從鍵盤輸入一個字符的DOS調(diào)用INT21HCMP AL, a ;輸入字符a嗎?JB STOPCMP AL, z' ;輸入字符z'嗎?JA ST

12、OPSUBAL, 20H;轉(zhuǎn)換為大寫字母,用AND AL, 1101 1111B也可MOV DL, AL;顯示一個字符的DOS調(diào)用MOV AH, 2 ;從鍵盤輸入第二個字符INT21HJMPBEGINSTOP:RET5.2 編寫程序,從鍵盤接收一個小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個字符。答:程序段如下:BEGIN:MOV AH, 1;從鍵盤輸入一個字符的DOS調(diào)用INT21HCMP AL, a ;輸入字符<a'嗎?JB STOPCMP AL, z ;輸入字符>z嗎?JA STOPDECAL;得到前導(dǎo)字符MOV DL, AL;準(zhǔn)備顯示三個字符MOV

13、CX, 3DISPLAY: MOV AH, 2;顯示一個字符的DOS調(diào)用INT21HINCDLLOOP DISPLAYSTOP:RET5.3 將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在AL、BL、CL和DL中.答:程序段如下:DSEGSEGMENTSTOREDB 4 DUP (?)DSEGENDSBEGIN:MOV CL, 4;右移四次MOV CH, 4;循環(huán)四次LEABX, STOREA10:MOV DX, AXAND DX, 0FH ;取AX的低四位MOV BX, DL ;低四位存入STORE中INCBXSHRAX, CL;右移四次DECCHJNZA10;循環(huán)四次完

14、了碼?B10:MOV DL, STORE;四組數(shù)分別放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP:RET5.4 試編寫一程序,要求比較兩個字符串STRING1和STRING2所含字符是否完全相同,若相同則顯示MATCH, 若不相同則顯示NO MATCH。答:程序如下:DSEGSEGMENTSTRING1DB I am a student。STRING2DB I am a student!YES DB MATCH, 0DH, 0AH, 'NODB NO MATCH, 0DH, 0AH, 'DSEGE

15、NDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值MOV ES, AX;給ES賦值;BEGIN:LEASI, STRING1;設(shè)置串比較指令的初值LEADI, STRING2CLDMOV CX, STRING2 - STRING1REPE CMPSB;串比較JNE DISPNOLEADX, YES;顯示MATCHJMPDISPLAYDISPNO:LEADX, NO;顯示NO MATCHDISPL

16、AY:MOV AH, 9;顯示一個字符串的DOS調(diào)用INT21HRETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTART5.5 試編寫一程序,要求能從鍵盤接收一個個位數(shù)N,然后響鈴N次(響鈴的ASCII碼為07).答:程序段如下:BEGIN:MOV AH, 1;從鍵盤輸入一個字符的DOS調(diào)用INT21HSUBAL, 0'JB STOP;輸入字符0嗎?CMP AL, 9 ;輸入字符>9嗎?JA STOPCBWMOV CX, AX;響鈴次數(shù)NJCXZ STOPBELL:MOV DL, 07H;準(zhǔn)備響鈴MOV AH, 2 ;顯示一個字符的DOS調(diào)用,實際為響鈴INT2

17、1HCALL DELAY100ms;延時100msLOOP BELLSTOP:RET5.6 編寫程序,將一個包含有20個數(shù)據(jù)的數(shù)組M分成兩個數(shù)組:正數(shù)數(shù)組P和負(fù)數(shù)數(shù)組N,并分別把這兩個數(shù)組中數(shù)據(jù)的個數(shù)顯示出來。答:程序如下:DSEGSEGMENTCOUNTEQU 20ARRAYDW 20 DUP (?);存放數(shù)組COUNT1DB 0;存放正數(shù)的個數(shù)ARRAY1DW 20 DUP (?);存放正數(shù)COUNT2DB 0;存放負(fù)數(shù)的個數(shù)ARRAY2DW 20 DUP (?);存放負(fù)數(shù)ZHENDB 0DH, 0AH, The positive number is:, $';正數(shù)的個數(shù)是:FUD

18、B 0DH, 0AH, The negative number is:, ' ;負(fù)數(shù)的個數(shù)是:CRLFDB 0DH, 0AH, DSEGENDS;-CSEGSEGMENTMAIN PROCFARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV CX, COUNTLEABX, ARRAYLEASI, ARRAY1LEADI, ARRAY2BEGIN1:MOV AX, BXCMP AX, 0;是負(fù)數(shù)碼?JS FUSHUMOV SI, AX;

19、是正數(shù),存入正數(shù)數(shù)組INC COUNT1;正數(shù)個數(shù)+1ADD SI, 2JMPSHORT NEXTFUSHU: MOV DI, AX;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組INC COUNT2;負(fù)數(shù)個數(shù)+1ADD DI, 2NEXT: ADD BX, 2LOOP BEGIN1LEADX, ZHEN;顯示正數(shù)個數(shù)MOV AL, COUNT1CALL DISPLAY;調(diào)顯示子程序LEADX, FU;顯示負(fù)數(shù)個數(shù)MOV AL, COUNT2CALL DISPLAY;調(diào)顯示子程序RETMAINENDP;-DISPLAYPROCNEAR;顯示子程序MOVAH, 9;顯示一個字符串的DOS調(diào)用INT21HAAM;將(AL)

20、中的二進(jìn)制數(shù)轉(zhuǎn)換為二個非壓縮BCD碼ADDAH, 0;變?yōu)?9的ASCII碼MOVDL, AHMOVAH, 2;顯示一個字符的DOS調(diào)用INT21HADDAL, 0';變?yōu)?9的ASCII碼MOVDL, ALMOVAH, 2;顯示一個字符的DOS調(diào)用INT21HLEADX, CRLF;顯示回車換行MOVAH, 9;顯示一個字符串的DOS調(diào)用INT21HRETDISPLAYENDP;顯示子程序結(jié)束CSEGENDS;以上定義代碼段;-ENDSTART5.7 試編寫一個匯編語言程序,求出首地址為DATA(DATA數(shù)組)的100D字?jǐn)?shù)組中的最小偶數(shù),并把它存放在AX中。答:程序段如下:BEGI

21、N: MOV BX, 0 MOV CX, 100COMPARE:MOV AX, DATABX;取數(shù)組的第一個偶數(shù)ADD BX, 2TEST AX, 01H;是偶數(shù)嗎?(偶數(shù)與01H邏輯與,不是0,不是偶數(shù))LOOPNZ COMPARE;不是,比較下一個數(shù)JNZ STOP;沒有偶數(shù),退出JCXZ STOP;最后一個數(shù)是偶數(shù),即為最小偶數(shù),退出COMPARE1:MOV DX, DATABX;取數(shù)組的下一個偶數(shù)ADD BX, 2TEST DX, 01H;是偶數(shù)嗎?JNZ NEXT;不是,比較下一個數(shù)CMP AX, DX ;(AX)<(DX)嗎?JLE NEXTMOV AX, DX;(AX)(D

22、X),則置換(AX)為最小偶數(shù)NEXT:LOOPCOMPARE1STOP:RET5.8 把AX中存放的16位二進(jìn)制數(shù)K看作是8個二進(jìn)制的“四分之一字節(jié)”。試編寫程序要求數(shù)一下值為3(即11B)的四分之一字節(jié)數(shù),并將該數(shù)(即11B的個數(shù))在終端上顯示出來。(例如:1010101010101010分為10 10 10 10 10 10 10 10 10)答:程序段如下:BEGIN:MOV DL, 0;計數(shù)初始值MOV CX, 8COMPARE:TEST AX, 03H;是數(shù)03嗎?JNZNOEQUAL;不是,轉(zhuǎn)走INCDL;是,計數(shù)NOEQUAL:ROR AX, 1;準(zhǔn)備判斷下一個數(shù)ROR AX,

23、 1LOOP COMPAREADD DL, 0;將計數(shù)值轉(zhuǎn)換為ASCII碼MOV AH, 2;進(jìn)行顯示INT21HSTOP:RET5.9 試編寫一個匯編語言程序,要求從鍵盤接收一個四位的16進(jìn)制數(shù)(1234H),并在終端上顯示與它等值的二進(jìn)制數(shù)。答:程序段如下:BEGIN:MOV BX, 0;用于存放四位的16進(jìn)制數(shù)MOV CH, 4MOV CL, 4INPUT:SHLBX, CL;將前面輸入的數(shù)左移4位MOV AH, 1;從鍵盤取數(shù)INT21HCMP AL, 30H;<0嗎?JB INPUT;不是0F的數(shù)重新輸入CMP AL, 39H;是09嗎?JA AF;不是,轉(zhuǎn)AF的處理AND A

24、L, 0FH;轉(zhuǎn)換為:0000B1001BJMPBINARYAF: AND AL, 1101 1111B;轉(zhuǎn)換為大寫字母CMP AL, 41H;又<A嗎?JB INPUT;不是AF的數(shù)重新輸入CMP AL, 46H;F嗎?JA INPUT;不是AF的數(shù)重新輸入AND AL, 0FH;轉(zhuǎn)換為:1010B1111BADD AL, 9BINARY:OR BL, AL;將鍵盤輸入的數(shù)進(jìn)行組合DELCHJNZINPUTDISPN:MOV CX, 16;將16位二進(jìn)制數(shù)一位位地轉(zhuǎn)換成ASCII碼顯示DISP:MOV DL, 0ROLBX, 1RCLDL, 1ORDL, 30HMOV AH, 2;進(jìn)行

25、顯示INT21HLOOPDISPSTOP:RET5.10 設(shè)有一段英文,其字符變量名為ENG,并以$字符結(jié)束。試編寫一程序,查對單詞SUN在該文中的出現(xiàn)次數(shù),并以格式“SUN:xxxx"顯示出次數(shù)。答:程序如下:DSEGSEGMENTENG DB Here is sun, sun ,$DISP DB SUN:DAT DB 0000' , 0DH, 0AH, $'KEYWORD DB sunDSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART:PUSH DS;設(shè)置返回DOSSUB

26、AX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值MOV ES, AX;給ES賦值BEGIN: MOVAX, 0 ;記錄sun的個數(shù)MOVDX, DISP-ENG2;計算ENG的長度(每次比較sun,因此比較次數(shù)-2)LEABX, ENGCOMP: MOVDI, BXLEASI, KEYWORDMOVCX, 3REPECMPSB;串比較JNZNOMATCHINCAX;是,SUN的個數(shù)加1ADDBX, 2 ;BX為16位,所以加2NOMATCH: INCBX;指向ENG的下一個字母DECDX ;ENG的長度減1JNZCOMPDONE: MOVCH, 4 ;將次數(shù)轉(zhuǎn)

27、換為16進(jìn)制數(shù)的ASCII碼MOVCL, 4LEABX, DAT;轉(zhuǎn)換結(jié)果存入DAT單元中DONE1: ROLAX, CLMOVDX, AXANDDL, 0FH;取一位16進(jìn)制數(shù)ADDDL, 30HCMP DL, 39HJLESTORE ;小于等于9,跳轉(zhuǎn)ADDDL, 07H;是“AF"所以要加7STORE: MOVBX, DL;轉(zhuǎn)換結(jié)果存入DAT單元中INCBXDECCHJNZDONE1DISPLAY: LEADX, DISP;顯示字符串程序(將DISP和DAT一起顯示)MOVAH, 09HINT21HRETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTART5.1

28、1 從鍵盤輸入一系列以$為結(jié)束符的字符串,然后對其中的非數(shù)字字符計數(shù),并顯示出計數(shù)結(jié)果。答:程序段如下:DSEGSEGMENTBUFFDB 50 DUP ( )COUNTDW 0DSEGENDSBEGIN:LEABX, BUFFMOV COUNT, 0INPUT:MOV AH, 01;從鍵盤輸入一個字符的功能調(diào)用INT21HMOV BX, ALINCBXCMP AL, ;是$結(jié)束符嗎?JNZINPUT;不是,繼續(xù)輸入LEABX, BUFF;對非數(shù)字字符進(jìn)行計數(shù)NEXT:MOV CL, BXINCBXCMP CL, $';是$結(jié)束符,則轉(zhuǎn)去顯示JZ DISPCMP CL, 30H;小于0

29、是非數(shù)字字符JB NEXTCMP CL, 39H;大于9是非數(shù)字字符JA NEXTINCCOUNT;個數(shù)+1JMPNEXTDISP:;16進(jìn)制數(shù)顯示程序段(省略)5.12 有一個首地址為MEM的100D字?jǐn)?shù)組,試編制程序刪除數(shù)組中所有為0的項,并將后續(xù)項向前壓縮,最后將數(shù)組的剩余部分補(bǔ)上0.答:程序如下:DSEGSEGMENTMEMDW 100 DUP (?)DSEGENDS;-CSEGSEGMENTMAINPROC FARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給

30、DS賦值BEGIN:MOV SI, (100-1)2;(SI)指向MEM的末元素的首地址MOV BX, -2;地址指針的初值MOV CX, 100COMP:ADD BX, 2CMP MEM BX, 0JZ CONSLOOP COMPJMPFINISH;比較完了,已無0則結(jié)束CONS:MOV DI, BX ;刪除?CONS1:CMP DI, SI;到了最后單元碼?JAENOMOVMOV AX, MEM DI+2 ;后面的元素向前移位MOV MEM DI, AXADD DI, 2JMPCONS1NOMOV:MOV WORD PTR SI, 0;最后單元補(bǔ)0LOOP COMPFINISH:RETMA

31、INENDPCSEGENDS;以上定義代碼段;-ENDSTART5.13 在STRING到STRING+99單元中存放著一個字符串,試編制一個程序測試該字符串中是否存在數(shù)字,如有則把CL的第5位置1,否則將該位置0。答:程序如下:DSEGSEGMENTSTRINGDB 100 DUP (?)DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV SI, 0;(SI)作為地址指針的變化值MO

32、V CX, 100REPEAT:MOV AL, STRING SICMP AL, 30HJB GO_ONCMP AL, 39HJA GO_ONORCL, 20H;存在數(shù)字把CL的第5位置1 20H(32=25) 使得第5位置1JMPEXITGO_ON:INCSILOOP REPEATAND CL, 0DFH ;不存在數(shù)字把CL的第5位置0EXIT:RETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTART5.14 在首地址為TABLE的數(shù)組中按遞增次序存放著100H個16位補(bǔ)碼數(shù),試編寫一個程序把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于AX和CX中。答:程序如下:DSEGSEGM

33、ENTTABLEDW100H DUP (?) ;數(shù)組中的數(shù)據(jù)是按增序排列的DATADW ?COUNTDW 0DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV CX, 100H;循環(huán)計數(shù)器MOV SI, 0NEXT:MOV DX, 0MOV AX, TABLE SICOMP:CMP TABLE SI, AX;計算一個數(shù)的出現(xiàn)次數(shù)將數(shù)組中的數(shù)放入AX,AX中的數(shù)和數(shù)組其他數(shù)依次比較,若一

34、樣則DX+JNEADDRINCDXADD SI, 2LOOP COMPADDR:CMP DX, COUNT;此數(shù)出現(xiàn)的次數(shù)最多嗎?JLEDONEMOV COUNT, DX;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)MOV DATA, AX;記下此數(shù)DONE:LOOP NEXT;準(zhǔn)備取下一個數(shù)MOV CX, COUNT;出現(xiàn)最多的次數(shù)存入(CX)MOV AX, DATA;出現(xiàn)最多的數(shù)存入(AX)RETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTART5.15 數(shù)據(jù)段中已定義了一個有n個字?jǐn)?shù)據(jù)的數(shù)組M,試編寫一程序求出M中絕對值最大的數(shù),把它放在數(shù)據(jù)段的M+2n單元中,并將該數(shù)的偏移地址存

35、放在M+2(n+1)單元中.答:程序如下:DSEGSEGMENTn EQU 100H;假設(shè)n=100HM DW n DUP (?)DATADW ?;M+2n單元ADDRDW ? ;M+2(n+1)單元DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV CX, n;循環(huán)計數(shù)器LEADI, MMOV AX, DI;取第一個數(shù)MOV ADDR, DI;記下絕對值最大的數(shù)的地址CMP AX,

36、0;此數(shù)是正數(shù)嗎?JNSZHEN;是正數(shù),即為絕對值,轉(zhuǎn)去判斷下一個數(shù)NEG AX;不是正數(shù),變?yōu)槠浣^對值ZHEN:MOV BX, DICMP BX, 0;此數(shù)是正數(shù)嗎?JNSCOMP;是正數(shù),即為絕對值,轉(zhuǎn)去比較絕對值大小NEG BX;不是正數(shù),變?yōu)槠浣^對值COMP:CMP AX, BX;判斷絕對值大小JAEADDRESSMOV AX, BX;(AX)(BX),使(AX)中為絕對值最大的數(shù)MOV ADDR, DI;記下絕對值最大的數(shù)的地址ADDRESS:ADD DI, 2LOOP ZHENMOV DATA, AX;記下此數(shù)RETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTA

37、RT5.16 在首地址為DATA的字?jǐn)?shù)組中存放著100H個16位補(bǔ)碼數(shù),試編寫一個程序求出它們的平均值放在AX寄存器中;并求出數(shù)組中有多少個數(shù)小于此平均值,將結(jié)果放在BX寄存器中.答:程序如下:DSEGSEGMENTDATADW 100H DUP (?)DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV CX, 100H;循環(huán)計數(shù)器MOV SI, 0MOV BX, 0;和((DI),(

38、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;帶符號數(shù)求平均值,放入(AX)中MOV BX, 0MOV SI, 0COMP:CMP AX, DATA SI;尋找小于平均值的數(shù)JLENOINCBX;小于平均值數(shù)的個數(shù)+1NO:ADD SI, 2LOOP COMPRETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTAR

39、T5.17 試編制一個程序把AX中的16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,并將對應(yīng)的ASCII碼依次存放到MEM數(shù)組中的四個字節(jié)中.例如,當(dāng)(AX)=2A49H時,程序執(zhí)行完后,MEM中的4個字節(jié)內(nèi)容為39H,34H,41H,32H。答:程序如下:DSEGSEGMENTMEMDB 4 DUP (?)NDW 2A49HDSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSH DS;設(shè)置返回DOSSUBAX, AXPUSH AXMOV AX, DSEGMOV DS, AX;給DS賦值BEGIN:MOV CH, 4;循環(huán)計數(shù)器MO

40、V CL, 4MOV AX, NLEABX, MEMROTATE:MOV DL, AL;從最低四位開始轉(zhuǎn)換為ASCII碼AND DL, 0FHADD DL, 30HCMP DL, 3AH;是09嗎?(3 10H)JL NEXTADD DL, 07H;是AFNEXT:MOV BX, DL;轉(zhuǎn)換的ASCII碼送入MEM中 【表示DL存到BX所指的數(shù)組】INCBXROR AX, CL;準(zhǔn)備轉(zhuǎn)換下一位DECCHJNZROTATERETMAINENDPCSEGENDS;以上定義代碼段;-ENDSTART5.18 把0100D之間的30個數(shù)存入以GRADE為首地址的30字?jǐn)?shù)組中,GRADE+i表示學(xué)號為i+1的學(xué)生的成績.另一個數(shù)組RANK為30個學(xué)生的名次表,其中RANK+i的內(nèi)容是學(xué)號為i+1的學(xué)生的名次。編寫一程序,根據(jù)GRADE中的學(xué)生成績,將學(xué)生名次填入RANK數(shù)組中.(提示:一個學(xué)生的名次等于成績高于這個學(xué)生的人數(shù)加1.)答:程序如下:

溫馨提示

  • 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

提交評論