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

下載本文檔

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

文檔簡介

微機原理及接口第四章習題答案微機原理及接口第四章習題答案微機原理及接口第四章習題答案微機原理及接口第四章習題答案編制僅供參考審核批準生效日期地址:電話:傳真:郵編:“微機系統(tǒng)原理與接口技術”第四章習題解答判斷以下說法是否正確,如有錯,請說明原因并改正。(1)偽指令在匯編過程中不會產(chǎn)生二進制代碼。(2)宏和過程的相同之處是都可用于簡化源程序書寫、精簡目標代碼。(3)在計算機中,高級語言通常需要轉換為匯編語言后才能執(zhí)行。(4)匯編語言程序上機一般包括編輯、匯編、鏈接和調試幾個步驟。答:(1)正確。(2)錯誤。宏不能精簡目標代碼。(3)錯誤。高級語言程序經(jīng)編譯或解釋后直接轉換為目標代碼。(4)正確。已知數(shù)據(jù)和符號定義A1 DB A2 DB 8 K1 EQU 100判斷下列指令的正誤,并說明錯誤指令的原因。(1)MOV K1,AX(2)MOV A2,AH(3)MOV BX,K1 MOV [BX],DX(4)CMP A1,A2(5)K1 EQU 200答:(1)錯誤。K1是符號常數(shù),在此處相當于立即數(shù)100,故不能做目的操作數(shù)。(2)正確。(3)正確。(4)錯誤。A1、A2都是字節(jié)變量,相當于兩個存儲器單元,故不能同時出現(xiàn)在一條指令中直接進行比較。(5)錯誤。用EQU定義的符號不能重新賦值,除非已用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。設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處的雙字單元中。當8086執(zhí)行該指令后轉移至子程序入口時,CS、IP、SS、SP各寄存器以及棧頂2個字單元的內(nèi)容分別是多少答:執(zhí)行結果為CS=3322H,IP=1100H,SS=5000H,SP=3254H,棧頂?shù)膬蓚€字即斷點地址,為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請分別用分析運算符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已知符號定義語句如下: ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2分別求下列各表達式的值。(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ù)段的存貯單元分配情況。答:有關存儲單元的內(nèi)容如右圖所示。下列程序是否有錯如有錯,請改正。該程序完成什么功能。 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答:改正之后的源程序清單如下(下劃波浪線的語句是原來沒有的或有錯之處): 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 ;補充的三條指令為主程序返回提供正確的地址 XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;MOVS指令以ES:DI為目的串指針,故應對ES賦值 INIT: MOV SI,OFFSETINBUF LEA DI,OUTBUF MOV CX,100 CLD ;從首址開始傳送,應使DF=0 REPMOVSW ;應傳送的是100個字而非字節(jié) RET ;程序結束,返回DOS MAIN ENDP CODE ENDS END MAIN該程序完成的功能是:將INBUF表內(nèi)的10個字數(shù)據(jù)復制到以OUTPUT開始的連續(xù)的內(nèi)存單元中。讀下面程序,在其中的空處添上適當內(nèi)容。該程序完成了什么功能程序運行后,變量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的最后結果是04H。該程序實現(xiàn)的功能是:統(tǒng)計數(shù)據(jù)段中以BUF為首址的帶符號字節(jié)數(shù)據(jù)表中負數(shù)的個數(shù),CNT為表中所有數(shù)據(jù)的個數(shù),即表的長度。需要注意的是:十進制數(shù)據(jù)“145”在以二進制帶符號字節(jié)數(shù)據(jù)形式存放時相當于“-111”。編寫一個完整的源程序,將數(shù)據(jù)35、-27、-13、6、-47、52、9、-3中的正數(shù)放入以BUFFER為首址的數(shù)據(jù)緩沖區(qū)中。答:一種可能的程序如下實現(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 ;自動增量 AGAIN:LODSB ;取源數(shù)據(jù),并修改SI TEST AL,80H ;取符號位,不影響AL JS GO ;符號位=1,是負數(shù),不存 STOSB ;存正數(shù)并修改DI GO: LOOP AGAIN MOV AH,4CH ;退出循環(huán),返回DOS INT 21H CODE ENDS END BEGIN已知有一個長100個字的數(shù)據(jù)塊,存放在以3DA0H:1000H開始的存儲區(qū)域內(nèi)。試編寫一個完整的匯編語言程序,將該數(shù)據(jù)塊復制到以3DA0H:1008H開始的存儲區(qū)內(nèi)。答:一種可能的程序如下實現(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 ;重復次數(shù) LEA SI,BLOCK ADD SI,199 ;SI=10C7H MOV DI,SIADD DI,8 ;DI=10CFH STD ;自動減量 REP MOVSB RET MAIN ENDP CODE ENDS END MAIN簡析:由題意可知,源數(shù)據(jù)區(qū)(占用地址3DA0:1000H~3DA0:10C7H,共200個字節(jié))與目標數(shù)據(jù)區(qū)(占用地址3DA0:1008H~3DA0:10CFH,共200個字節(jié))是重疊的。若從首址開始增量傳送(DF=0),將破壞1008H以后的源數(shù)據(jù),所以必須從末址向首址減量傳送(DF=1)。數(shù)據(jù)段初始化時,有以下幾點需注意:段基址規(guī)定為3DA0H,故應在段定義偽指令SEGMENT后加上AT語句;源數(shù)據(jù)區(qū)首址的偏移量規(guī)定為1000H,故應使用ORG語句指明;對源、目標數(shù)據(jù)區(qū)進行定義時,應注意目標數(shù)據(jù)區(qū)首址的偏移量是1008H。如果定義為: ORG 1000H SOUR DW 100DUP() ;源數(shù)據(jù)區(qū) DEST DW 100DUP() ;目標數(shù)據(jù)區(qū)則目標數(shù)據(jù)區(qū)首址的偏移量實際上是10C8H,不合題意。可將它們統(tǒng)一定義為足夠長度(至少104字或208字節(jié))的變量,如參考程序所示。指針初始化時,可以將SI、DI分別置為10C7H、10CFH,且CX=200,即進行字節(jié)的傳送,使用MOVSB;亦可將SI、DI分別置為10C6H、10CEH,且CX=100,即進行字的傳送,相應使用MOVSW。從內(nèi)存單元BUF開始的緩沖區(qū)中有7個8位無符號數(shù),依次為13H、0D8H、92H、2AH、66H、0E0H、3FH。編程找出它們的中間值并放入RES單元,且將結果以“(RES)=”的格式顯示在屏幕上。答:一種可能的程序如下實現(xiàn):DATA SEGMENT BUF DB 13H,0D8H,92H,2AH,66H,0E0H,3FH RES DB ;中間數(shù)的存放單元 STR DB ‘(RES)=’STR1 DB ,,‘$’ ;結果字符串 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] ;兩個無符號數(shù)相比較 JB UNCH ;小于則轉,不互換 EXCH: XCHG AL,[DI] ;前1單元較大,則互換 MOV [SI],AL ;大數(shù)放在后面 UNCH: INC SI ;修改指針,指向下一個數(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 ;調子程序,將AL值轉換為ASCII碼 LEA DI,STR1 ;DI指向結果單元 CLD STOSB ;存放轉換結果 MOV AL,RES AND AL,0FH ;分離并轉換低半字節(jié) CALL BATR STOSB LEA DX,STR ;顯示整個字符串 MOV AH,09H INT 21H RET MAIN ENDP ;主程序MAIN結束 ;子程序BATR,實現(xiàn)16進制數(shù)到ASCII碼的轉換 BATR PROC NEAR CMP AL,10 ;入口參數(shù)為AL JB NUM ;是數(shù)字,則轉NUM ADD AL,’A’-10-’0’ ;字母 NUM: ADD AL,’0’ RET BATR ENDP ;子程序結束 CODE ENDS END MAIN簡析:本例的基本思路是:先把7個無符號數(shù)按大小排序,排序完成之后取位于中間的一個數(shù)即為中間值。然后將該16進制數(shù)轉換為兩個對應的ASCII碼,再與要求的格式字符一起輸出送顯即可。數(shù)據(jù)排序可以是從大到小、或從小到大排列,本參考程序完成從小到大排序,由一個雙重循環(huán)結構實現(xiàn)。內(nèi)循環(huán)完成一個數(shù)與其它數(shù)之間的一一比較,并使每次比較所得的小數(shù)置于低地址單元。外循環(huán)實現(xiàn)所有數(shù)之間的兩兩相較。共7個數(shù)據(jù),故內(nèi)、外循環(huán)中的比較次數(shù)均為6次。編程時需注意:無符號數(shù)比較大小應使用JA、JB、JAE、JBE指令,本例完成從小到大的排列,故用JB控制轉移到UNCH;若要從大到小排列,則用JA代替JB即可。對兩個循環(huán)體進行初始化時,需仔細考慮指針和循環(huán)控制寄存器的初值。在數(shù)據(jù)段的定義中,分別定義STR、STR1兩個變量名字,是為了便于在STR1處存放轉換結果;顯示時使DX直接指向STR,以STR1末尾的“$”為結束符。中間值找出之后,應把高、低半字節(jié)相分離,并分別轉換為各所對應的ASCII碼。設某測試系統(tǒng)中,1號端口為測試口,所得數(shù)據(jù)是0~9之間的十進制整數(shù);2號端口為顯示口,對應于數(shù)字0~9的LED七段共陰顯示碼依次為:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。編寫一段查表送顯的程序,要求:先從測試口讀入一個數(shù)據(jù),再查表將相應的顯示碼從顯示口送出,如此反復進行直至讀入數(shù)據(jù)“0FFH”為止。答:一種可能的程序如下實現(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 ;從測試口輸入 CMP AL,0FFH JE STOP ;是0FFH,結束 XLAT TAB ;不是0FFH,查表轉換 OUT 2,AL ;向顯示口輸出七段碼 JMP NEXT ;繼續(xù)測試 STOP: MOV AH,4CH INT 21H CODE ENDS END START編程實現(xiàn)以下操作:從鍵盤輸入4個數(shù)字,分別作為2個10~99之間的十進制數(shù)。求它們的和,并把結果以三位十進制數(shù)的形式顯示在屏幕上。要求:輸入回顯的兩個加數(shù)與送顯的和之間有適當?shù)姆指?,以示區(qū)別。格式可自行擬定。答:一種可能的程序如下實現(xiàn):DATA SEGMENT NUM1 DB , ;加數(shù)1,高位在前,以非組合BCD碼存放 NUM2 DB , ;加數(shù)2,高位在前,以非組合BCD碼存放 SUM DB ,,,‘$’ ;存放結果的ASCII碼,以‘$’為結束符 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 ;自動增量,先輸入高位 MOV CX,2 LEA DI,NUM1 ;輸入加數(shù)1 IN1: MOV AH,1 ;DOS功能調用,單字符輸入 INT 21H AND AL,0FH ;ASCII碼轉換為非組合BCD碼 STOSB LOOP IN1 MOV DL,‘+’ ;輸出加號,以分隔2個加數(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,‘=’ ;輸出等號,分隔加數(shù)與結果 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指向結果的末單元 STD ;自動減量,由低向高相加 MOV CX,2 ;相加次數(shù) CLC ;清進位,準備用ADC AD: LODSB ;取加數(shù)1的低位,修改SI ADC AL,[BX] ;2數(shù)相加,帶進位 AAA ;未組合BCD碼的十進制調整PUSHF ADD AL,30H ;BCD碼向ASCII碼轉換POPF;因未組合BCD碼的高4位為0,故加30H不會影響CF STOSB ;存和,并修改DI。CF不變DEC BX ;指向加數(shù)2的高位。CF不變 LOOP AD ADC BYTEPTR[DI],30H ;BCD碼向ASCII碼轉換;高位相加若產(chǎn)生進位,則使SUM單元加1(表示百位),故使用ADC指令 LEA DX,SUM ;輸出結果 MOV AH,09H INT 21H MOV AH,4CH ;返回DOS INT 21HCODE ENDS END FIRST簡析:按照本參考程序,屏幕顯示格式如“73+46=119”的樣式。基本思路是:首先調用DOS功能,從鍵盤輸入2個0~9之間的數(shù)字(字符串輸入的AH調用號為10,單個字符輸入的AH調用號為1),然后向CRT輸出“+”(單個字符輸出的AH調用號為2);再由鍵盤輸入2個數(shù),然后輸出“=”。將兩次輸入的數(shù)分別作為2個加數(shù)相加,得到的和經(jīng)十進制調整后,向CRT輸出(字符串輸出的AH調用號為9)。以下幾處需進行碼制轉換:調用單個字符輸入功能后,AL中的出口參數(shù)為各數(shù)字鍵所對應的ASCII碼,故應轉換為BCD碼才能進行加運算。轉換方式:與0FH相與,所得為未組合BCD碼。2個未組合BCD碼相加,和應該用AAA指令進行十進制調整,調整結果反映在累加器和標志位CF上。加法完成之后,應將結果逐位轉換為ASCII碼,才可以向CRT輸出。做加法運算時還應注意:加數(shù)輸入之后,先取兩個低位相加,再取高位相加(同時加上低位相加產(chǎn)生的進位),需仔細檢查指針。若用循環(huán)結構完成加運算,則進入循環(huán)之前必須清CF,方可在循環(huán)體中使用ADC指令。有一個長度不超過100字節(jié)的字符串,以回車符結尾。編程統(tǒng)計其中非空格的字符個數(shù),并將統(tǒng)計結果以自擬格式顯示在CRT上。答:一種可能的程序如下實現(xiàn):DATA SEGMENT STR DB ‘It’’safineday,isn’’tit’,0DH,‘$’ ;依題意以0DH為結束符。加上“$”便于顯示整個字符串 COUNT EQU $-STR-2 ;串長中不包括結束符和“$”符號 NUM DB 0 ;置統(tǒng)計結果初值為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 ;關鍵字符(空格) 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 ;顯示另一個字符串 MOV AH,9 INT 21H ;將16進制的統(tǒng)計結果轉換為十進制數(shù),再轉換為兩個ASCII碼輸出 MOV AL,NUM MOV AH,0 ;AX中為待轉換16進制數(shù) MOV BL,10 DIV BL ;AX/BL ;商(十位)在AL中,余數(shù)(個位)在AH中,均為未組合BCD碼 PUSH AX ;入棧保護 OR AL,30H ;將十位數(shù)轉換為ASCII碼 MOV DL,AL ;送CRT顯示 MOV AH,2 INT 21H POP AX ;恢復除法運算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論