




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章
5.1試編寫一個(gè)匯編語(yǔ)言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯
示出來(lái)。
答:程序段如下:
BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用
INT21H
CMPAL,'a';輸入字符<'a’嗎?
JBSTOP
CMPAL,<z,;輸入字符》”嗎?
JASTOP
SUBAL,20H;轉(zhuǎn)換為大寫字母,用ANDAL,11011111B也可
MOVDL,AL;顯示一個(gè)字符的DOS調(diào)用
MOVAH,2
INT21H
JMPBEGIN
STOP:RET
5.2編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)
字符,再按依次顯示這三個(gè)字符。
答:程序段如下:
BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用
INT21H
CMPAL,'a';輸入字符<'a’嗎?
JBSTOP
CMPAL,'z';輸入字符〉'z'嗎?
JASTOP
DECAL;得到前導(dǎo)字符
MOVDL,AL;準(zhǔn)備顯示三個(gè)字符
MOVCX,3
DISPLAY:MOVAH,2;顯示一個(gè)字符的DOS調(diào)用
INT21H
INCDL
LOOPDISPLAY
STOP:RET
5.3將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別
放在AL、BL、CL和DL中。
答:程序段如下:
DSEGSEGMENT
STOREDB4DUP(?)
DSEGENDS
I
I
I
BEGIN:MOVCL,4;右移四次
MOVCH,4;循環(huán)四次
LEABX,STORE
A10:MOVDX,AX
ANDDX,OFH;取AX的低四位
MOV[BX],DL;低四位存入STORE中
INCBX
SHRAX,CL;右移四次
DECcn
JNZA10;循環(huán)四次完了碼?
BIO:MOVDL,STORE;四組數(shù)分別放在AL、BL、CL和DL中
MOVCL,STORE+1
MOVBL,STORE+2
MOVAL,STORE+3
STOP:RET
5.4試編寫一程序,要求比較兩個(gè)字符串STRING1和STRING2所含字符是
否完全相同,若相同則顯示'MATCH',若不相同則顯示'NOMATCH'。
答:程序如下:
DSEGSEGMENT
STRING1DB(Iamastudent.J
STRING2DB'Iamastudent!'
YESDB'MATCH',ODH,OAH,'$'
NODB'NOMATCH',ODH,OAH,'$'
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG,ES:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
MOVES,AX;給ES賦值
BEGIN:LEASI,STRING1;設(shè)置串比較指令的初值
LEADI,STRING2
CLD
MOVCX,STRING2-STRING1
REPECMPSB;串比較
JNEDISPNO
LEADX,YES;顯示MATCH
JMPDISPLAY
DISPNO:LEADX,NO;顯示NOMATCH
DISPLAY:MOVAH,9;顯示一個(gè)字符串的DOS調(diào)用
INT21H
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.5試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù)N,然后響鈴N次(響鈴
的ASCH碼為07)。
答:程序段如下:
BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用
INT21H
SUBAL,'O'
JBSTOP;輸入字符<'O’嗎?
CMPAL,9;輸入字符》‘9'嗎?
JASTOP
CBW
MOVCX,AX;響鈴次數(shù)N
JCXZSTOP
BELL:MOVDL,07H;準(zhǔn)備響鈴
MOVAH,2;顯示一個(gè)字符的DOS調(diào)用,實(shí)際為響鈴
INT21H
CALLDELAY100ms;延時(shí)100ms
LOOPBELL
STOP:RET
5.6編寫程序,將一個(gè)包含有20個(gè)數(shù)據(jù)的數(shù)組M分成兩個(gè)數(shù)組:正數(shù)數(shù)
組P和負(fù)數(shù)數(shù)組N,并分別把這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來(lái)。
答:程序如下:
DSEGSEGMENT
COUNTEQU20
ARRAYDW20DUP(?);存放數(shù)組
COUNT1DB0;存放正數(shù)的個(gè)數(shù)
ARRAY1DW20DUP(?);存放正數(shù)
C0UNT2DB0;存放負(fù)數(shù)的個(gè)數(shù)
ARRAY2DW20DUP(?);存放負(fù)數(shù)
ZHENDB0D1I,OAH,'Thepositivenumberis:','$';正數(shù)的個(gè)
數(shù)是:
FUDBODU,OAH,'Thenegativenumberis:','$';負(fù)數(shù)的個(gè)數(shù)
是:
CRLFDBODH,OAH,'$'
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVCX,COUNT
LEABX,ARRAY
LEASI,ARRAY1
LEADI,ARRAY2
BEGIN1:MOVAX,[BX]
CMPAX,0;是負(fù)數(shù)碼?
JSFUSHU
MOV[SI],AX;是正數(shù),存入正數(shù)數(shù)組
INCCOUNT1;正數(shù)個(gè)數(shù)+1
ADDSI,2
JMPSHORTNEXT
FUSHU:MOV[DI],AX;是負(fù)數(shù),存入負(fù)數(shù)數(shù)組
INCCOUNT2;負(fù)數(shù)個(gè)數(shù)+1
ADDDI,2
NEXT:ADDBX,2
LOOPBEGIN1
LEADX,ZHEN;顯示正數(shù)個(gè)數(shù)
MOVAL,COUNT1
CALLDISPLAY;調(diào)顯示子程序
LEADX,FU;顯示負(fù)數(shù)個(gè)數(shù)
MOVAL,COUNT2
CALLDISPLAY;調(diào)顯示子程序
RET
MAINENDP
DISPLAYPROCNEAR;顯示子程序
MOVAH,9;顯示一個(gè)字符串的DOS調(diào)用
INT21H
AAM;將(AL)中的二進(jìn)制數(shù)轉(zhuǎn)換為二個(gè)非壓縮BCD碼
ADDAH,'O';變?yōu)??9的ASCII碼
MOVDL,AH
MOVAH,2;顯示一個(gè)字符的DOS調(diào)用
INT21H
ADDAL,<0,;變?yōu)??9的ASCH碼
MOVDL,AL
MOVAH,2;顯示一個(gè)字符的DOS調(diào)用
INT21H
LEADX,CRLF;顯示回車換行
MOVAH,9;顯示一個(gè)字符串的DOS調(diào)用
INT21H
RET
DISPLAYENDP;顯示子程序結(jié)束
CSEGENDS;以上定義代碼段
ENDSTART
5.7試編寫一個(gè)匯編語(yǔ)言程序,求出首地址為DATA的100D字?jǐn)?shù)組中的最
小偶數(shù),并把它存放在AX中。
答:程序段如下:
BEGIN:MOVBX,0
MOVCX,100
COMPARE:MOVAX,DATA[BX];取數(shù)組的第一個(gè)偶數(shù)
ADDBX,2
TESTAX,01H;是偶數(shù)嗎?
LOOPNZCOMPARE;不是,比較下一個(gè)數(shù)
JNZSTOP;沒(méi)有偶數(shù),退出
JCXZSTOP;最終一個(gè)數(shù)是偶數(shù),即為最小偶數(shù),退出
COMPARE1:MOVDX,DATA[BX];取數(shù)組的下一個(gè)偶數(shù)
ADDBX,2
TESTDX,01H;是偶數(shù)嗎?
JNZNEXT;不是,比較下一個(gè)數(shù)
CMPAX,DX;(AX)<(DX)嗎?
JLENEXT
MOVAX,DX;(AX)<(DX),則置換(AX)為最小偶數(shù)
NEXT:LOOPCOMPARE1
STOP:RET
5.8把AX中存放的16位二進(jìn)制數(shù)K看作是8個(gè)二進(jìn)制的“四分之一字
節(jié)”。試編寫程序要求數(shù)一下值為3(即11B)的四分之一字節(jié)數(shù),并將該
數(shù)(即11B的個(gè)數(shù))在終端上顯示出來(lái)。
答:程序段如下:
BEGIN:MOVDL,0;計(jì)數(shù)初始值
MOVCX,8
COMPARE:TESTAX,03H;是數(shù)03嗎?
JNZNOEQUAL;不是,轉(zhuǎn)走
INCDL;是,計(jì)數(shù)
NOEQUAL:RORAX,1;準(zhǔn)備推斷下一個(gè)數(shù)
RORAX,1
LOOPCOMPARE
ADDDL,'O';將計(jì)數(shù)值轉(zhuǎn)換為ASCH碼
MOVAH,2;進(jìn)行顯示
INT21H
STOP:RET
5.9試編寫一個(gè)匯編語(yǔ)言程序,要求從鍵盤接收一個(gè)四位的16進(jìn)制數(shù),
并在終端上顯示與它等值的二進(jìn)制數(shù)。
答:程序段如下:
BEGIN:MOVBX,0;用于存放四位的16進(jìn)制數(shù)
MOVCH,4
MOVCL,4
INPUT:SHLBX,CL;將前面輸入的數(shù)左移4位
MOVAH,1;從鍵盤取數(shù)
INT21H
CMPAL,30H;<0嗎?
JBINPUT;不是‘0?F'的數(shù)重新輸入
CMPAL,39H;是'0?9'嗎?
JAAF;不是,轉(zhuǎn)'A?F'的處理
ANDAL,OFH;轉(zhuǎn)換為:OOOOB-1OO1B
JMPBINARY
AF:ANDAL,11011111B;轉(zhuǎn)換為大寫字母
CMPAL,41H;又〈A嗎?
JBINPUT;不是'A?F'的數(shù)重新輸入
CMPAL,46H;>F嗎?
JAINPUT;不是‘A?F'的數(shù)重新輸入
ANDAL,OFH;轉(zhuǎn)換為:1010B-1111B
ADDAL,9
BINARY:ORBL,AL;將鍵盤輸入的數(shù)進(jìn)行組合
DELCH
JNZINPUT
DISPN:MOVCX,16;將16位二進(jìn)制數(shù)一位位地轉(zhuǎn)換成ASCH碼顯示
DISP:MOVDL,0
ROLBX,1
RCLDL,1
ORDL,30H
MOVAH,2;進(jìn)行顯示
INT21H
LOOPDISP
STOP:RET
5.10設(shè)有一段英文,其字符變量名為ENG,并以$字符結(jié)束。試編寫一程
序,查對(duì)單詞SUN在該文中的出現(xiàn)次數(shù),并以格式“SUN:xxxx”顯示出
次數(shù)。
答:程序如下:
DSEGSEGMENT
ENGDB'Hereissun,sun「??,$'
DISPDB'SUN:'
DATDB'0000',ODH,OAH,'$'
KEYWORDDBsun
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG,ES:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
MOVES,AX;給ES賦值
BEGIN:MOVAX,0
MOVDX,DISP-ENG-2;計(jì)算ENG的長(zhǎng)度(每次比較sun,因此比較次數(shù)-2)
LEABX,ENG
COMP:MOVDI,BX
LEASI,KEYWORD
MOVCX,3
REPECMPSB;串比較
JNZNOMATC11
INCAX;是,SUN的個(gè)數(shù)加1
ADDBX,2
NOMATCH:INCBX;指向ENG的下一個(gè)字母
DECDX
JNZCOMP
DONE:MOVCH,4;將次數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)的ASCH碼
MOVCL,4
LEABX,DAT;轉(zhuǎn)換結(jié)果存入DAT單元中
DONE1:ROLAX,CL
MOVDX,AX
ANDDL,OFH;取一位16進(jìn)制數(shù)
ADDDL,30H
CMPDL,39H
JLESTORE
ADDDL,07H;是“A?F”所以要加7
STORE:MOV[BX],DL;轉(zhuǎn)換結(jié)果存入DAT單元中
INCBX
DECCH
JNZDONE1
DISPLAY:LEADX,DISP;顯示字符串程序(將DISP和DAT一起顯示)
MOVAH,0911
INT21H
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.11從鍵盤輸入一系列以$為結(jié)束符的字符串,然后對(duì)其中的非數(shù)字字符
計(jì)數(shù),并顯示出計(jì)數(shù)結(jié)果。
答:程序段如下:
DSEGSEGMENT
BUFFDB50DUP('')
COUNTDW0
DSEGENDS
I
I
I
BEGIN:LEABX,BUFF
MOVCOUNT,0
INPUT:MOVAH,01;從鍵盤輸入一個(gè)字符的功能調(diào)用
INT21H
MOV[BX],AL
INCBX
CMPAL,'$';是$結(jié)束符嗎?
JNZINPUT;不是,接著輸入
LEABX,BUFF;對(duì)非數(shù)字字符進(jìn)行計(jì)數(shù)
NEXT:MOVCL,[BX]
INCBX
CMPCL,'$';是$結(jié)束符,則轉(zhuǎn)去顯示
JZDISP
CMPCL,30U;小于0是非數(shù)字字符
JBNEXT
CMPCL,39H;大于9是非數(shù)字字符
JANEXT
INCCOUNT;個(gè)數(shù)+1
JMPNEXT
DISP::;16進(jìn)制數(shù)顯示程序段(省略)
5.12有一個(gè)首地址為MEM的100D字?jǐn)?shù)組,試編制程序刪除數(shù)組中全部為
0的項(xiàng),并將后續(xù)項(xiàng)向前壓縮,最終將數(shù)組的剩余部分補(bǔ)上0。
答:程序如下:
DSEGSEGMENT
MEMDW100DUP(?)
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVSI,(100-1)*2;(SI)指向MEM的末元素的首地址
MOVBX,-2;地址指針的初值
MOVCX,100
COMP:ADDBX,2
CMPMEM[BX],0
JZCONS
LOOPCOMP
JMPFINISH;比較完了,已無(wú)0則結(jié)束
CONS:MOVDI,BX
C0NS1:CMPDI,SI;到了最終單元碼?
JAENOMOV
MOVAX,MEM[DI+2];后面的元素向前移位
MOVMEM[DI],AX
ADDDI,2
JMPC0NS1
NOMOV:MOVWORDPTR[SI],0;最終單元補(bǔ)0
LOOPCOMP
FINISH:RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.13在STRING到STRING+99單元中存放著一個(gè)字符串,試編制一個(gè)程序
測(cè)試該字符串中是否存在數(shù)字,如有則把CL的第5位置1,否則將該位置
Oo
答:程序如下:
DSEGSEGMENT
STRINGDB100DUP(?)
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVSI,0;(SI)作為地址指針的變更值
MOVCX,100
REPEAT:MOVAL,STRING[SI]
CMPAL,30H
JBGO_ON
CMPAL,39H
JAGO_ON
ORCL,20H;存在數(shù)字把CL的第5位置1
JMPEXIT
GO_ON:INCSI
LOOPREPEAT
ANDCL,ODFH;不存在數(shù)字把CL的第5位置0
EXIT:RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.14在首地址為TABLE的數(shù)組中按遞增次序存放著10011個(gè)16位補(bǔ)碼數(shù),
試編寫一個(gè)程序把出現(xiàn)次數(shù)最多的數(shù)與其出現(xiàn)次數(shù)分別存放于AX和CX
中。
答:程序如下:
DSEGSEGMENT
TABLEDW100HDUP(?);數(shù)組中的數(shù)據(jù)是按增序排列的
DATADW?
COUNTDW0
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVCX,100H;循環(huán)計(jì)數(shù)器
MOVSI,0
NEXT:MOVDX,0
MOVAX,TABLE[SI]
COMP:CMPTABLE[SI],AX;計(jì)算一個(gè)數(shù)的出現(xiàn)次數(shù)
JNEADDR
INCDX
ADDSI,2
LOOPCOMP
ADDR:CMPDX,COUNT;此數(shù)出現(xiàn)的次數(shù)最多嗎?
JLEDONE
MOVCOUNT,DX;目前此數(shù)出現(xiàn)的次數(shù)最多,登記次數(shù)
MOVDATA,AX;登記此數(shù)
DONE:LOOPNEXT;準(zhǔn)備取下一個(gè)數(shù)
MOVCX,COUNT;出現(xiàn)最多的次數(shù)存入(CX)
MOVAX,DATA;出現(xiàn)最多的數(shù)存入(AX)
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.15數(shù)據(jù)段中已定義了一個(gè)有n個(gè)字?jǐn)?shù)據(jù)的數(shù)組M,試編寫一程序求出M
中確定值最大的數(shù),把它放在數(shù)據(jù)段的M+2n單元中,并將該數(shù)的偏移地
址存放在M+2(n+1)單元中。
答:程序如下:
DSEGSEGMENT
nEQU100H;假設(shè)n=100H
MDWnDUP(?)
DATADW?;M+2n單元
ADDRDW?;M+2(n+l)單元
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVCX,n;循環(huán)計(jì)數(shù)器
LEADI,M
MOVAX,[DI];取第一個(gè)數(shù)
MOVADDR,DI;登記確定值最大的數(shù)的地址
CMPAX,0;此數(shù)是正數(shù)嗎?
JNSZHEN;是正數(shù),即為確定值,轉(zhuǎn)去推斷下一個(gè)數(shù)
NEGAX;不是正數(shù),變?yōu)槠浯_定值
ZHEN:MOVBX,[DI]
CMPBX,0;此數(shù)是正數(shù)嗎?
JNSCOMP;是正數(shù),即為確定值,轉(zhuǎn)去比較確定值大小
NEGBX;不是正數(shù),變?yōu)槠浯_定值
COMP:CMPAX,BX;推斷確定值大小
JAEADDRESS
MOVAX,BX;(AX)<(BX),使(AX)中為確定值最大的數(shù)
MOVADDR,DI;登記確定值最大的數(shù)的地址
ADDRESS:ADDDI,2
LOOPZHEN
MOVDATA,AX;登記此數(shù)
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.16在首地址為DATA的字?jǐn)?shù)組中存放著10011個(gè)16位補(bǔ)碼數(shù),試編寫一
個(gè)程序求出它們的平均值放在AX寄存器中;并求出數(shù)組中有多少個(gè)數(shù)小
于此平均值,將結(jié)果放在BX寄存器中。
答:程序如下:
DSEGSEGMENT
DATADW100UDUP(?)
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVCX,100II;循環(huán)計(jì)數(shù)器
MOVSI,0
MOVBX,0;和((DI),(BX))的初始值
MOVDI,0
NEXT:MOVAX,DATA[SI]
CWD
ADDBX,AX;求和
ADCDI,DX;加上進(jìn)位位
ADDSI,2
LOOPNEXT
MOVDX,DI;將((DI),(BX))中的累加和放入((DX),(AX))中
MOVAX,BX
MOVCX,100H
IDIVCX;帶符號(hào)數(shù)求平均值,放入(AX)中
MOVBX,0
MOVSI,0
COMP:CMPAX,DATA[SI];找尋小于平均值的數(shù)
JLENO
INCBX;小于平均值數(shù)的個(gè)數(shù)+1
NO:ADDSI,2
LOOPCOMP
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.17試編制一個(gè)程序把AX中的16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,并將對(duì)應(yīng)的
ASCH碼依次存放到MEM數(shù)組中的四個(gè)字節(jié)中。例如,當(dāng)(AX)=2A49H時(shí),
程序執(zhí)行完后,MEM中的4個(gè)字節(jié)內(nèi)容為39H,34H,41H,32H。
答:程序如下:
DSEGSEGMENT
MEMDB4DUP(?)
NDW2A49H
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVCH,4;循環(huán)計(jì)數(shù)器
MOVCL,4
MOVAX,N
LEABX,MEM
ROTATE:MOVDL,AL;從最低四位起先轉(zhuǎn)換為ASCII碼
ANDDL,OFH
ADDDL,30H
CMPDL,3AH;是0~9嗎?
JLNEXT
ADDDL,07H;是A~F
NEXT:MOV[BX],DL;轉(zhuǎn)換的ASCH碼送入MEM中
INCBX
RORAX,CL;準(zhǔn)備轉(zhuǎn)換下一位
DECCH
JNZROTATE
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.18把O^IOOD之間的30個(gè)數(shù)存入以GRADE為首地址的30字?jǐn)?shù)組中,
GRADE+i表示學(xué)號(hào)為i+1的學(xué)生的成果。另一個(gè)數(shù)組RANK為30個(gè)學(xué)生的
名次表,其中RANK+i的內(nèi)容是學(xué)號(hào)為i+1的學(xué)生的名次。編寫一程序,
依據(jù)GRADE中的學(xué)生成果,將學(xué)生名次填入RANK數(shù)組中。(提示:一個(gè)學(xué)
生的名次等于成果高于這個(gè)學(xué)生的人數(shù)加1。)
答:程序如下:
DSEGSEGMENT
GRADEDW30DUP(?);假設(shè)已預(yù)先存好30名學(xué)生的成果
RANKDW30DUP(?)
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVDI,0
MOVCX,30;外循環(huán)計(jì)數(shù)器
L00P1:PUSHCX
MOVCX,30;內(nèi)循環(huán)計(jì)數(shù)器
MOVSI,0
MOVAX,GRADE[DI]
MOVDX,1;起始名次為第1名
L00P2:CMPGRADE[SI],AX;成果比較
JBEGO_ON
INCDX;名次+1
GO_ON:ADDSI,2
LOOPL00P2
POPCX
MOVRNAK[DI],DX;名次存入RANK數(shù)組
ADDDI,2
LOOPLOOP1
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.19已知數(shù)組A包含15個(gè)互不相等的整數(shù),數(shù)組B包含20個(gè)互不相等
的整數(shù)。試編制一程序把既在A中又在B中出現(xiàn)的整數(shù)存放于數(shù)組C中。
答:程序如下:
DSEGSEGMENT
ADW15DUP(?)
BDW20DUP(?)
CDW15DUP('')
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVSI,0
MOVBX,0
MOVCX,15;外循環(huán)計(jì)數(shù)器
LOOP1:PUSHCX
MOVCX,20;內(nèi)循環(huán)計(jì)數(shù)器
MOVDI,0
MOVAX,A[SI];取A數(shù)組中的一個(gè)數(shù)
L00P2:CMPB[DI],AX;和B數(shù)組中的數(shù)相等嗎?
JNENO
MOVC[BX],AX;相等存入C數(shù)組中
ADDBX,2
NO:ADDDI,2
LOOPL00P2
ADDSI,2
POPCX
LOOPLOOP1
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.20設(shè)在A、B和C單元中分別存放著三個(gè)數(shù)。若三個(gè)數(shù)都不是0,則求
出三數(shù)之和存放在D單元中;若其中有一個(gè)數(shù)為0,則把其它兩單元也清
0。請(qǐng)編寫此程序。
答:程序如下:
DSEGSEGMENT
ADW?
BDW?
CDW?
DDW0
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:CMPA,0
JENEXT
CMPB,0
JENEXT
CMPC,0
JENEXT
MOVAX,A
ADDAX,B
ADDAX,C
MOVD,AX
JMPSHORTEXIT
NEXT:MOVA,0
MOVB,0
MOVC,0
EXIT:RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.21試編寫一程序,要求比較數(shù)組ARRAY中的三個(gè)16位補(bǔ)碼數(shù),并依據(jù)
比較結(jié)果在終端上顯示如下信息:
(1)假如三個(gè)數(shù)都不相等則顯示0;
(2)假如三個(gè)數(shù)有二個(gè)數(shù)相等則顯示1;
(3)假如三個(gè)數(shù)都相等則顯示2。
答:程序如下:
DSEGSEGMENT
ARRAYDW3DUP(?)
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:LEASI,ARRAY
MOVDX,0;(DX)用于存放所求的結(jié)果
MOVAX,[SI]
MOVBX,[SI+2]
CMPAX,BX;比較第一和其次兩個(gè)數(shù)是否相等
JNENEXT1
INCDX
NEXT1:CMP[SI+4],AX;比較第一和第三兩個(gè)數(shù)是否相等
JNENEXT2
INCDX
NEXT2:CMP[SI+4],BX;比較其次和第三兩個(gè)數(shù)是否相等
JNENUM
INCDX
NUM:CMPDX,3
JLDISP
DECDX
DISP:ADDDL,30H;轉(zhuǎn)換為ASCH碼
MOVAH,2;顯示一個(gè)字符
INT21H
RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.22從鍵盤輸入一系列字符(以回車符結(jié)束),并按字母、數(shù)字、與其它
字符分類計(jì)數(shù),最終顯示出這三類的計(jì)數(shù)結(jié)果。
答:程序如下:
DSEGSEGMENT
ALPHABETDB'輸入的字母字符個(gè)數(shù)為:‘,'$'
NUMBERDB'輸入的數(shù)字字符個(gè)數(shù)為:‘,'$'
OTHERDB'輸入的其它字符個(gè)數(shù)為:','$'
CRLFDBODII,0AH,'$'
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVBX,0;字母字符計(jì)數(shù)器
MOVSI,0;數(shù)字字符計(jì)數(shù)器
MOVDI,0;其它字符計(jì)數(shù)器
INPUT:MOVAH,1;輸入一個(gè)字符
INT21H
CMPAL,ODU;是回車符嗎?
JEDISP
CMPAL,30H;〈數(shù)字0嗎?
JAENEXT1
OTHER:INCDI;是其它字符
JMPSHORTINPUT
NEXT1:CMPAL,39H;>數(shù)字9嗎?
JANEXT2
INCSI;是數(shù)字字符
JMPSHORTINPUT
NEXT2:CMPAL,41H;〈字母A嗎?
JAENEXT3
JMPSHORTOTHER;是其它字符
NEXT3:CMPAL,5AH;>字母Z嗎?
JANEXT4
INCBX;是字母字符A~Z
JMPSHORTINPUT
NEXT4:CMPAL,61H;〈字母a嗎?
JAENEXT5
JMPSHORTOTHER;是其它字符
NEXT5:CMPAL,7AH;>字母z嗎?
JASHORTOTHER;是其它字符
INCBX;是字母字符a~z
JMPSHORTINPUT
DISP:LEADX,ALPHABET
CALLDISPLAY
LEADX,NUMBER
MOVBX,SI
CALLDISPLAY
LEADX,OTHER
MOVBX,DI
CALLDISPLAY
RET
MAINENDP
DISPLAYPROCNEAR
MOVAH,09H;顯示字符串功能調(diào)用
INT21H
CALLBINIHEX;調(diào)把BX中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制顯示子程序
LEADX,CRLF
MOVAH,0911;顯示回車換行
INT21H
RET
DISPLAYENDP
BINIHEXPROCNEAR;將BX中二進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)顯示子程序
MOVCH,4
ROTATE:MOVCL,4
ROLBX,CL
MOVDL,BL
ANDDL,OFH
ADDDL,30H
CMPDL,3AH;是A~F嗎?
JLPRINT_IT
ADDDL,07H
PRINT_IT:MOVAH,02H;顯示一個(gè)字符
INT21H
DECCH
JNZROTATE
RET
BINIUEXENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.23已定義了兩個(gè)整數(shù)變量A和B,試編寫程序完成下列功能:
(1)若兩個(gè)數(shù)中有一個(gè)是奇數(shù),則將奇數(shù)存入A中,偶數(shù)存入B中;
(2)若兩個(gè)數(shù)中均為奇數(shù),則將兩數(shù)加1后存回原變量;
(3)若兩個(gè)數(shù)中均為偶數(shù),則兩個(gè)變量均不變更。
答:程序如下:
DSEGSEGMENT
ADW?
BDW?
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVAX,A
MOVBX,B
XORAX,BX
TESTAX,OOO1H;A和B同為奇數(shù)或偶數(shù)嗎?
JZCLASS;A和B都為奇數(shù)或偶數(shù),轉(zhuǎn)走
TESTBX,0001H
JZEXIT;B為偶數(shù),轉(zhuǎn)走
XCHGBX,A;A為偶數(shù),將奇數(shù)存入A中
MOVB,BX;將偶數(shù)存入B中
JMPEXIT
CLASS:TESTBX,0001H;A和B都為奇數(shù)嗎?
JZEXIT;A和B同為偶數(shù),轉(zhuǎn)走
INCB
INCA
EXIT:RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.24假設(shè)已編制好5個(gè)歌曲程序,它們的段地址和偏移地址存放在數(shù)據(jù)
段的跳動(dòng)表SINGLIST中。試編制一程序,依據(jù)從鍵盤輸入的歌曲編號(hào)C5,
轉(zhuǎn)去執(zhí)行五個(gè)歌曲程序中的某一個(gè)。
答:程序如下:
DSEGSEGMENT
SINGLISTDDSING1
DDSING2
DDSING3
DDSING4
DDSING5
ERRMSGDB'Error!Invalidparameter!J,ODII,OAH,'$
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:CSEG,DS:DSEG
START:PUSHDS;設(shè)置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;給DS賦值
BEGIN:MOVAH,1;從鍵盤輸入的歌曲編號(hào)1~5
INT21H
CMPAL,ODH
JZEXIT;是回車符,則結(jié)束
SUBAL,T;是「5嗎?
JBERROR;小于1,錯(cuò)誤
CMPAL,4
JAERROR;大于5,錯(cuò)誤
MOVBX,OFFSETSINGLIST
MULAX,4;(AX)=(AL)*4,每個(gè)歌曲程序的首地址占4個(gè)字節(jié)
ADDBX,AX
JMPDWORDPTR[BX];轉(zhuǎn)去執(zhí)行歌曲程序
ERROR:MOVDX,OFFSETERRMSG
MOVAH,09H
INT21H;顯示錯(cuò)誤信息
JMPBEGIN
SING1:■
JMPBEGIN
SING2:;
JMPBEGIN
SING3:I
JMPBEGIN
SING4:■
JMPBEGIN
SING5:!
JMPBEGIN
EXIT:RET
MAINENDP
CSEGENDS;以上定義代碼段
ENDSTART
5.25試用8086的乘法指令編制一個(gè)32位數(shù)和16位數(shù)相乘的程序;再用
80386的乘法指令編制一個(gè)32位數(shù)和16位數(shù)相乘的程序,并定性比較兩
個(gè)程序的效率。
答:8086的程序如下(假設(shè)為無(wú)符號(hào)數(shù)):
DSEGSEGMENT
MUL1DD?;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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年運(yùn)維軟件合作協(xié)議書
- 肝膽中醫(yī)養(yǎng)生知識(shí)
- 農(nóng)產(chǎn)品批發(fā)綜合市場(chǎng)供應(yīng)鏈管理與物流體系
- 第五單元第15課三、《網(wǎng)絡(luò)安全》教學(xué)設(shè)計(jì) 2023-2024學(xué)年人教版初中信息技術(shù)七年級(jí)上冊(cè)
- 第二課 信息傳輸新體驗(yàn) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年西交大版(2024)初中信息技術(shù)七年級(jí)上冊(cè)
- 腦卒中治療和護(hù)理
- 二零二五年度銀聯(lián)國(guó)際個(gè)人信用卡領(lǐng)用與全球支付服務(wù)合同
- 2025至2030年中國(guó)帶置物架豪華淋浴房數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度房產(chǎn)贈(zèng)與子女協(xié)議書聯(lián)合子女房產(chǎn)租賃收益共同管理協(xié)議
- 互換性第1章 學(xué)習(xí)教材
- 2024年達(dá)州市總工會(huì)招聘工會(huì)社會(huì)工作者筆試真題
- 2025至2030年中國(guó)肌酸數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 1.2 讀懂彼此的心 第二課時(shí) 課件 2024-2025學(xué)年五年級(jí)下冊(cè)道德與法治 統(tǒng)編版
- 2025年度電視產(chǎn)品進(jìn)出口貿(mào)易合同4篇
- 2025年“開(kāi)學(xué)第一課”觀后感心得體會(huì)(3篇)
- 2024年湖南食品藥品職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 外科護(hù)理5分鐘小講課
- 《船舶油漆作業(yè)》課件
- 2025年中國(guó)融通農(nóng)發(fā)社會(huì)招聘筆試參考題庫(kù)含答案解析
- 2025年天津市寧河區(qū)事業(yè)單位招聘12人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年福建省莆田市數(shù)學(xué)三上期末質(zhì)量檢測(cè)模擬試題含解析
評(píng)論
0/150
提交評(píng)論