微機(jī)原理及接口第四章習(xí)題答案_第1頁
微機(jī)原理及接口第四章習(xí)題答案_第2頁
微機(jī)原理及接口第四章習(xí)題答案_第3頁
微機(jī)原理及接口第四章習(xí)題答案_第4頁
微機(jī)原理及接口第四章習(xí)題答案_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理及接口第四章習(xí)題答案微機(jī)原理及接口第四章習(xí)題答案微機(jī)原理及接口第四章習(xí)題答案微機(jī)原理及接口第四章習(xí)題答案編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:“微機(jī)系統(tǒng)原理與接口技術(shù)”第四章習(xí)題解答判斷以下說法是否正確,如有錯(cuò),請(qǐng)說明原因并改正。(1)偽指令在匯編過程中不會(huì)產(chǎn)生二進(jìn)制代碼。(2)宏和過程的相同之處是都可用于簡化源程序書寫、精簡目標(biāo)代碼。(3)在計(jì)算機(jī)中,高級(jí)語言通常需要轉(zhuǎn)換為匯編語言后才能執(zhí)行。(4)匯編語言程序上機(jī)一般包括編輯、匯編、鏈接和調(diào)試幾個(gè)步驟。答:(1)正確。(2)錯(cuò)誤。宏不能精簡目標(biāo)代碼。(3)錯(cuò)誤。高級(jí)語言程序經(jīng)編譯或解釋后直接轉(zhuǎn)換為目標(biāo)代碼。(4)正確。已知數(shù)據(jù)和符號(hào)定義A1 DB A2 DB 8 K1 EQU 100判斷下列指令的正誤,并說明錯(cuò)誤指令的原因。(1)MOV K1,AX(2)MOV A2,AH(3)MOV BX,K1 MOV [BX],DX(4)CMP A1,A2(5)K1 EQU 200答:(1)錯(cuò)誤。K1是符號(hào)常數(shù),在此處相當(dāng)于立即數(shù)100,故不能做目的操作數(shù)。(2)正確。(3)正確。(4)錯(cuò)誤。A1、A2都是字節(jié)變量,相當(dāng)于兩個(gè)存儲(chǔ)器單元,故不能同時(shí)出現(xiàn)在一條指令中直接進(jìn)行比較。(5)錯(cuò)誤。用EQU定義的符號(hào)不能重新賦值,除非已用PURGE解除了原值。若數(shù)據(jù)段中有定義 NUM1 EQU 23H NUM2 DW 0則指令MOV NUM2,NUM1的源、目操作數(shù)的尋址方式以及指令執(zhí)行后NUM2+1單元的內(nèi)容分別是什么答:指令MOVNUM2,NUM1的源操作數(shù)使用立即數(shù)尋址,目的操作數(shù)使用直接尋址。指令執(zhí)行后NUM2+1單元的內(nèi)容是0。設(shè)DS=6000H,BX=8432H,SS=5000H,SP=3258H,內(nèi)存69632H~69635H單元的內(nèi)容依次是00H、11H、22H、33H。4字節(jié)指令CALLDWORDPTR[BX+1200H]本身位于2000H:3250H處的雙字單元中。當(dāng)8086執(zhí)行該指令后轉(zhuǎn)移至子程序入口時(shí),CS、IP、SS、SP各寄存器以及棧頂2個(gè)字單元的內(nèi)容分別是多少答:執(zhí)行結(jié)果為CS=3322H,IP=1100H,SS=5000H,SP=3254H,棧頂?shù)膬蓚€(gè)字即斷點(diǎn)地址,為2000H:3254H。已知某數(shù)據(jù)段從物理地址03000H處開始,定義如下: DSEG SEGMENT ORG 2000H A1 DD 2DUP(7,1,) A2 DB 10DUP(0,4,3DUP(2),5)……09HARA1……09HARA1(0006H)00H11H00HARA2(000AH)‘4‘60FFHARA3(0010H)0FFH0FFH0FFH0FFH0FFHARA4(0016H)05H05H05H05H‘$’05H05H05H05H‘$’9AHVAR2(0024H)56H41H(‘A’)42H(‘B’)題4-7圖 A3 DW 100DUP() DSEG ENDS請(qǐng)分別用分析運(yùn)算符SEG、OFFSET、LENGTH、SIZE、TYPE求出A1、A2、A3的段基址、偏移量、類型及它們的LENGTH、SIZE。答:(SEGA1)=0300H,(OFFSETA1)=2000H,(TYPEA1)=4,(LENGTHA1)=2,(SIZEA1)=2×4=8;(SEGA2)=0300H,(OFFSETA2)=2018H,(TYPEA2)=1,(LENGTHA2)=10,(SIZEA2)=10×1=60;(SEGA3)=0300H,(OFFSETA3)=2054H,(TYPEA3)=2,(LENGTHA3)=100,(SIZEA3)=100×2=200已知符號(hào)定義語句如下: ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2分別求下列各表達(dá)式的值。(1)ALPHA*4GTBETA=100*4GT25=0FFFFH(2)ALPHAMODGAMMA+BETA=100MOD2+25=25(3)(BETA/3)LE5=(25/3)LE5=0(4)ALPHAANDBETA=100AND25=64H&19H=0(5)GAMMAXOR(BETAEQ25)=2(25EQ25) =0FFFDH已知數(shù)據(jù)段定義如下:DSEGSEGMENT ORG 6 ARA1 DD 110009H ARA2 DW 2DUP(),‘64’CONT1 EQU $-ARA2COUT2 EQU ARA2-ARA1ARA3 DB CONT1DUP(0FFH)ARA4 DB 2DUP(,CONT2DUP(5),’$’)ORG $+2VAR2 DW 569AH DB ‘AB’DSEG ENDS用示意圖說明該數(shù)據(jù)段的存貯單元分配情況。答:有關(guān)存儲(chǔ)單元的內(nèi)容如右圖所示。下列程序是否有錯(cuò)如有錯(cuò),請(qǐng)改正。該程序完成什么功能。 DATA SEGMENT INBUF DW 100DUP() OUTBUF DW 100DUP() DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX INIT: MOV SI,OFFSETINBUF LEA DI,OUTBUF MOV CX,100 REP MOVSB MAIN ENDP CODE ENDS END MAIN答:改正之后的源程序清單如下(下劃波浪線的語句是原來沒有的或有錯(cuò)之處): DATA SEGMENT INBUF DW 100DUP() OUTBUF DW 100DUP() DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA ;原ASSUME語句未說明ES MAIN PROC FAR PUSH DS ;補(bǔ)充的三條指令為主程序返回提供正確的地址 XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;MOVS指令以ES:DI為目的串指針,故應(yīng)對(duì)ES賦值 INIT: MOV SI,OFFSETINBUF LEA DI,OUTBUF MOV CX,100 CLD ;從首址開始傳送,應(yīng)使DF=0 REPMOVSW ;應(yīng)傳送的是100個(gè)字而非字節(jié) RET ;程序結(jié)束,返回DOS MAIN ENDP CODE ENDS END MAIN該程序完成的功能是:將INBUF表內(nèi)的10個(gè)字?jǐn)?shù)據(jù)復(fù)制到以O(shè)UTPUT開始的連續(xù)的內(nèi)存單元中。讀下面程序,在其中的空處添上適當(dāng)內(nèi)容。該程序完成了什么功能程序運(yùn)行后,變量RS的值是多少 DATA SEGMENT BUF DB -13,24,5,-62,77,20,-7,145,0 CNT DB $-BUF RS DB 0 DATA ENDSSTACK SEGMENT PARASTACK‘STACK’ DB 256DUP() STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START PROC FARPUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CH,0 MOV CL, LP: MOV AL,[BX] TEST AL,80H JE CONT INC RS CONT:INC BX LOOP LP RET START ENDP CODE ENDS END START答:程序空處可填CNT,字節(jié)變量RS的最后結(jié)果是04H。該程序?qū)崿F(xiàn)的功能是:統(tǒng)計(jì)數(shù)據(jù)段中以BUF為首址的帶符號(hào)字節(jié)數(shù)據(jù)表中負(fù)數(shù)的個(gè)數(shù),CNT為表中所有數(shù)據(jù)的個(gè)數(shù),即表的長度。需要注意的是:十進(jìn)制數(shù)據(jù)“145”在以二進(jìn)制帶符號(hào)字節(jié)數(shù)據(jù)形式存放時(shí)相當(dāng)于“-111”。編寫一個(gè)完整的源程序,將數(shù)據(jù)35、-27、-13、6、-47、52、9、-3中的正數(shù)放入以BUFFER為首址的數(shù)據(jù)緩沖區(qū)中。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENT BLOCK DB 35,-27,-13,6,-47,52,9,-3 COUNT EQU $-BLOCK BUFFER DB COUNT DUP() DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 40 DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK BEGIN:MOV AX,DATA MOV DS,AX MOV ES,AX ;需用STOS串操作指令 MOV CX,COUNT LEA SI,BLOCK ;源數(shù)據(jù)區(qū)指針 LEA DI,BUFFER ;正數(shù)存放區(qū)指針 CLD ;自動(dòng)增量 AGAIN:LODSB ;取源數(shù)據(jù),并修改SI TEST AL,80H ;取符號(hào)位,不影響AL JS GO ;符號(hào)位=1,是負(fù)數(shù),不存 STOSB ;存正數(shù)并修改DI GO: LOOP AGAIN MOV AH,4CH ;退出循環(huán),返回DOS INT 21H CODE ENDS END BEGIN已知有一個(gè)長100個(gè)字的數(shù)據(jù)塊,存放在以3DA0H:1000H開始的存儲(chǔ)區(qū)域內(nèi)。試編寫一個(gè)完整的匯編語言程序,將該數(shù)據(jù)塊復(fù)制到以3DA0H:1008H開始的存儲(chǔ)區(qū)內(nèi)。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENTAT3DA0H ORG 1000H BLOCK DW 104DUP() DATA ENDS SSEG SEGMENTPARASTACK‘SSEG’ DB 100DUP() SSEG ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA MAIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,SEGBLOCK MOV DS,AX MOV ES,AX MOV CX,200 ;重復(fù)次數(shù) LEA SI,BLOCK ADD SI,199 ;SI=10C7H MOV DI,SIADD DI,8 ;DI=10CFH STD ;自動(dòng)減量 REP MOVSB RET MAIN ENDP CODE ENDS END MAIN簡析:由題意可知,源數(shù)據(jù)區(qū)(占用地址3DA0:1000H~3DA0:10C7H,共200個(gè)字節(jié))與目標(biāo)數(shù)據(jù)區(qū)(占用地址3DA0:1008H~3DA0:10CFH,共200個(gè)字節(jié))是重疊的。若從首址開始增量傳送(DF=0),將破壞1008H以后的源數(shù)據(jù),所以必須從末址向首址減量傳送(DF=1)。數(shù)據(jù)段初始化時(shí),有以下幾點(diǎn)需注意:段基址規(guī)定為3DA0H,故應(yīng)在段定義偽指令SEGMENT后加上AT語句;源數(shù)據(jù)區(qū)首址的偏移量規(guī)定為1000H,故應(yīng)使用ORG語句指明;對(duì)源、目標(biāo)數(shù)據(jù)區(qū)進(jìn)行定義時(shí),應(yīng)注意目標(biāo)數(shù)據(jù)區(qū)首址的偏移量是1008H。如果定義為: ORG 1000H SOUR DW 100DUP() ;源數(shù)據(jù)區(qū) DEST DW 100DUP() ;目標(biāo)數(shù)據(jù)區(qū)則目標(biāo)數(shù)據(jù)區(qū)首址的偏移量實(shí)際上是10C8H,不合題意??蓪⑺鼈兘y(tǒng)一定義為足夠長度(至少104字或208字節(jié))的變量,如參考程序所示。指針初始化時(shí),可以將SI、DI分別置為10C7H、10CFH,且CX=200,即進(jìn)行字節(jié)的傳送,使用MOVSB;亦可將SI、DI分別置為10C6H、10CEH,且CX=100,即進(jìn)行字的傳送,相應(yīng)使用MOVSW。從內(nèi)存單元BUF開始的緩沖區(qū)中有7個(gè)8位無符號(hào)數(shù),依次為13H、0D8H、92H、2AH、66H、0E0H、3FH。編程找出它們的中間值并放入RES單元,且將結(jié)果以“(RES)=”的格式顯示在屏幕上。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENT BUF DB 13H,0D8H,92H,2AH,66H,0E0H,3FH RES DB ;中間數(shù)的存放單元 STR DB ‘(RES)=’STR1 DB ,,‘$’ ;結(jié)果字符串 DATA ENDS SSEG SEGMENTPARASTACK‘SSEG’ DB 100DUP() SSEG ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA MAIN PROC FAR ;主程序 PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;有STOS指令,需用ES MOV CX,6 ;外循環(huán)次數(shù),比6次 AGN: MOV SI,OFFSETBUF MOV DI,SI INC DI ;SI、DI指向相鄰2數(shù) MOV DX,6 ;內(nèi)循環(huán)次數(shù),比6次 AGN1: MOV AL,[SI] CMP AL,[DI] ;兩個(gè)無符號(hào)數(shù)相比較 JB UNCH ;小于則轉(zhuǎn),不互換 EXCH: XCHG AL,[DI] ;前1單元較大,則互換 MOV [SI],AL ;大數(shù)放在后面 UNCH: INC SI ;修改指針,指向下一個(gè)數(shù) INC DI DEC DX JNZ AGN1 ;未處理完,繼續(xù)內(nèi)循環(huán) LOOP AGN ;外循環(huán) DONE: MOV AL,[SI-3] ;排序完成,取中間數(shù) MOV RES,AL AND AL,0F0H ;分離高半字節(jié) MOV CL,4 SHR AL,CL CALL BATR ;調(diào)子程序,將AL值轉(zhuǎn)換為ASCII碼 LEA DI,STR1 ;DI指向結(jié)果單元 CLD STOSB ;存放轉(zhuǎn)換結(jié)果 MOV AL,RES AND AL,0FH ;分離并轉(zhuǎn)換低半字節(jié) CALL BATR STOSB LEA DX,STR ;顯示整個(gè)字符串 MOV AH,09H INT 21H RET MAIN ENDP ;主程序MAIN結(jié)束 ;子程序BATR,實(shí)現(xiàn)16進(jìn)制數(shù)到ASCII碼的轉(zhuǎn)換 BATR PROC NEAR CMP AL,10 ;入口參數(shù)為AL JB NUM ;是數(shù)字,則轉(zhuǎn)NUM ADD AL,’A’-10-’0’ ;字母 NUM: ADD AL,’0’ RET BATR ENDP ;子程序結(jié)束 CODE ENDS END MAIN簡析:本例的基本思路是:先把7個(gè)無符號(hào)數(shù)按大小排序,排序完成之后取位于中間的一個(gè)數(shù)即為中間值。然后將該16進(jìn)制數(shù)轉(zhuǎn)換為兩個(gè)對(duì)應(yīng)的ASCII碼,再與要求的格式字符一起輸出送顯即可。數(shù)據(jù)排序可以是從大到小、或從小到大排列,本參考程序完成從小到大排序,由一個(gè)雙重循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。內(nèi)循環(huán)完成一個(gè)數(shù)與其它數(shù)之間的一一比較,并使每次比較所得的小數(shù)置于低地址單元。外循環(huán)實(shí)現(xiàn)所有數(shù)之間的兩兩相較。共7個(gè)數(shù)據(jù),故內(nèi)、外循環(huán)中的比較次數(shù)均為6次。編程時(shí)需注意:無符號(hào)數(shù)比較大小應(yīng)使用JA、JB、JAE、JBE指令,本例完成從小到大的排列,故用JB控制轉(zhuǎn)移到UNCH;若要從大到小排列,則用JA代替JB即可。對(duì)兩個(gè)循環(huán)體進(jìn)行初始化時(shí),需仔細(xì)考慮指針和循環(huán)控制寄存器的初值。在數(shù)據(jù)段的定義中,分別定義STR、STR1兩個(gè)變量名字,是為了便于在STR1處存放轉(zhuǎn)換結(jié)果;顯示時(shí)使DX直接指向STR,以STR1末尾的“$”為結(jié)束符。中間值找出之后,應(yīng)把高、低半字節(jié)相分離,并分別轉(zhuǎn)換為各所對(duì)應(yīng)的ASCII碼。設(shè)某測(cè)試系統(tǒng)中,1號(hào)端口為測(cè)試口,所得數(shù)據(jù)是0~9之間的十進(jìn)制整數(shù);2號(hào)端口為顯示口,對(duì)應(yīng)于數(shù)字0~9的LED七段共陰顯示碼依次為:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。編寫一段查表送顯的程序,要求:先從測(cè)試口讀入一個(gè)數(shù)據(jù),再查表將相應(yīng)的顯示碼從顯示口送出,如此反復(fù)進(jìn)行直至讀入數(shù)據(jù)“0FFH”為止。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENT TAB DB 3FH,06H,5BH,4FH,66HDB 6DH,3DH,07H,7FH,6FH ;0~9的七段碼 DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 50 DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TAB ;BX指向表首址 NEXT: IN AL,1 ;從測(cè)試口輸入 CMP AL,0FFH JE STOP ;是0FFH,結(jié)束 XLAT TAB ;不是0FFH,查表轉(zhuǎn)換 OUT 2,AL ;向顯示口輸出七段碼 JMP NEXT ;繼續(xù)測(cè)試 STOP: MOV AH,4CH INT 21H CODE ENDS END START編程實(shí)現(xiàn)以下操作:從鍵盤輸入4個(gè)數(shù)字,分別作為2個(gè)10~99之間的十進(jìn)制數(shù)。求它們的和,并把結(jié)果以三位十進(jìn)制數(shù)的形式顯示在屏幕上。要求:輸入回顯的兩個(gè)加數(shù)與送顯的和之間有適當(dāng)?shù)姆指?,以示區(qū)別。格式可自行擬定。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENT NUM1 DB , ;加數(shù)1,高位在前,以非組合BCD碼存放 NUM2 DB , ;加數(shù)2,高位在前,以非組合BCD碼存放 SUM DB ,,,‘$’ ;存放結(jié)果的ASCII碼,以‘$’為結(jié)束符 DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 50DUP()

STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA FIRST: MOV AX,SEGNUM1 MOV DS,AX MOV ES,AX ;有STOS指令,需用ES CLD ;自動(dòng)增量,先輸入高位 MOV CX,2 LEA DI,NUM1 ;輸入加數(shù)1 IN1: MOV AH,1 ;DOS功能調(diào)用,單字符輸入 INT 21H AND AL,0FH ;ASCII碼轉(zhuǎn)換為非組合BCD碼 STOSB LOOP IN1 MOV DL,‘+’ ;輸出加號(hào),以分隔2個(gè)加數(shù) MOV AH,2 INT 21H MOV CX,2 LEA DI,NUM2 ;輸入加數(shù)2 IN2: MOV AH,01H INT 21H AND AL,0FH STOSB LOOP IN2 MOV DL,‘=’ ;輸出等號(hào),分隔加數(shù)與結(jié)果 MOV AH,02H INT 21H LEA SI,NUM1 INC SI ;SI指向加數(shù)1的低位 LEA BX,NUM2 INC BX ;BX指向加數(shù)2的低位 LEA DI,SUM ADD DI,2 ;DI指向結(jié)果的末單元 STD ;自動(dòng)減量,由低向高相加 MOV CX,2 ;相加次數(shù) CLC ;清進(jìn)位,準(zhǔn)備用ADC AD: LODSB ;取加數(shù)1的低位,修改SI ADC AL,[BX] ;2數(shù)相加,帶進(jìn)位 AAA ;未組合BCD碼的十進(jìn)制調(diào)整PUSHF ADD AL,30H ;BCD碼向ASCII碼轉(zhuǎn)換POPF;因未組合BCD碼的高4位為0,故加30H不會(huì)影響CF STOSB ;存和,并修改DI。CF不變DEC BX ;指向加數(shù)2的高位。CF不變 LOOP AD ADC BYTEPTR[DI],30H ;BCD碼向ASCII碼轉(zhuǎn)換;高位相加若產(chǎn)生進(jìn)位,則使SUM單元加1(表示百位),故使用ADC指令 LEA DX,SUM ;輸出結(jié)果 MOV AH,09H INT 21H MOV AH,4CH ;返回DOS INT 21HCODE ENDS END FIRST簡析:按照本參考程序,屏幕顯示格式如“73+46=119”的樣式?;舅悸肥牵菏紫日{(diào)用DOS功能,從鍵盤輸入2個(gè)0~9之間的數(shù)字(字符串輸入的AH調(diào)用號(hào)為10,單個(gè)字符輸入的AH調(diào)用號(hào)為1),然后向CRT輸出“+”(單個(gè)字符輸出的AH調(diào)用號(hào)為2);再由鍵盤輸入2個(gè)數(shù),然后輸出“=”。將兩次輸入的數(shù)分別作為2個(gè)加數(shù)相加,得到的和經(jīng)十進(jìn)制調(diào)整后,向CRT輸出(字符串輸出的AH調(diào)用號(hào)為9)。以下幾處需進(jìn)行碼制轉(zhuǎn)換:調(diào)用單個(gè)字符輸入功能后,AL中的出口參數(shù)為各數(shù)字鍵所對(duì)應(yīng)的ASCII碼,故應(yīng)轉(zhuǎn)換為BCD碼才能進(jìn)行加運(yùn)算。轉(zhuǎn)換方式:與0FH相與,所得為未組合BCD碼。2個(gè)未組合BCD碼相加,和應(yīng)該用AAA指令進(jìn)行十進(jìn)制調(diào)整,調(diào)整結(jié)果反映在累加器和標(biāo)志位CF上。加法完成之后,應(yīng)將結(jié)果逐位轉(zhuǎn)換為ASCII碼,才可以向CRT輸出。做加法運(yùn)算時(shí)還應(yīng)注意:加數(shù)輸入之后,先取兩個(gè)低位相加,再取高位相加(同時(shí)加上低位相加產(chǎn)生的進(jìn)位),需仔細(xì)檢查指針。若用循環(huán)結(jié)構(gòu)完成加運(yùn)算,則進(jìn)入循環(huán)之前必須清CF,方可在循環(huán)體中使用ADC指令。有一個(gè)長度不超過100字節(jié)的字符串,以回車符結(jié)尾。編程統(tǒng)計(jì)其中非空格的字符個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果以自擬格式顯示在CRT上。答:一種可能的程序如下實(shí)現(xiàn):DATA SEGMENT STR DB ‘It’’safineday,isn’’tit’,0DH,‘$’ ;依題意以0DH為結(jié)束符。加上“$”便于顯示整個(gè)字符串 COUNT EQU $-STR-2 ;串長中不包括結(jié)束符和“$”符號(hào) NUM DB 0 ;置統(tǒng)計(jì)結(jié)果初值為0 STR1 DB ‘Thenumberofnon-spacecharactorsis’,‘$’ DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DB 100DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;有SCAS指令,需用ES LEA DI,STR CLD MOV AL,20H ;關(guān)鍵字符(空格) MOV CX,COUNT NEXT: SCASB JE SKIP ;是空格,跳過下一句 INC NUM ;非空格字符,NUM加1 SKIP: LOOP NEXT LEA DX,STR ;顯示原字符串 MOV AH,09H INT 21H MOV DL,0AH ;顯示換行符,以便顯示另一字串 MOV AH,2 INT 21H LEA DX,STR1 ;顯示另一個(gè)字符串 MOV AH,9 INT 21H ;將16進(jìn)制的統(tǒng)計(jì)結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù),再轉(zhuǎn)換為兩個(gè)ASCII碼輸出 MOV AL,NUM MOV AH,0 ;AX中為待轉(zhuǎn)換16進(jìn)制數(shù) MOV BL,10 DIV BL ;AX/BL ;商(十位)在AL中,余數(shù)(個(gè)位)在AH中,均為未組合BCD碼 PUSH AX ;入棧保護(hù) OR AL,30H ;將十位數(shù)轉(zhuǎn)換為ASCII碼 MOV DL,AL ;送CRT顯示 MOV AH,2 INT 21H POP AX ;恢復(fù)除法運(yùn)算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論