微機原理與接口技術(shù)習(xí)題答案4(1)_第1頁
微機原理與接口技術(shù)習(xí)題答案4(1)_第2頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 4 章 匯編語言程序設(shè)計 1. 已知在 BUF 的起始處保存有 N 個字符的 ASCII 碼, 編寫匯編語言程序?qū)崿F(xiàn), 符串傳送到緩沖區(qū) BUFR 中,并且使字符串的順序與原來的順序相反。 解: BUF DB BONJOUR_BELLE BUFR DB 100 DUP(?) MOV CX, N LEA SI, BUF LEA DI, BUFR ADD DI,CX DEC DI L1: MOV AL,SI MOV DI,AL INC SI DEC DI LOOP L1 2. 利用移位、傳送和相加指令實現(xiàn) AX 的內(nèi)容擴大 10 倍。 解:將擴大后的結(jié)果放在 DX : AX 中,注意到 10X

2、 AX = 8X AX + 2X AX。 XOR DX,DX SHL AX, 1 RCL DX, 1 MOV BX,AX MOV CX,DX SHL AX, 1 RCL DX, 1 SHL AX, 1 RCL DX, 1 ADD AX, BX ADC DX, CX 將這組字 3. 在緩沖區(qū) VAR 中連續(xù)存放著 3 個 16 位的無符號數(shù), 編寫程序?qū)崿F(xiàn)將其按遞增關(guān)系排列; 如果 VAR 中保存的為有符號數(shù),則再編寫程序?qū)崿F(xiàn)將其按遞減關(guān)系排列。 解: VAR DW 1236 ,-432, 3900 XOR SI,SI MOV AX,V ARSI CMP AX, V ARSI+2 JAE L1

3、XCHG AX, V ARSI+2 L1: CMP AX, V ARSI+4 JAE L2 XCHG AX, V ARSI+4 L2: MOV VARSI, AX MOV AX,V ARSI+2 CMP AX, V ARSI+4 JAE L3 XCHG AX, V ARSI+4 L3: MOV VARSI+2, AX 4. 編寫程序段實現(xiàn)將 AL 和 BL 中的每一位依次交叉,得到的 16 位字保存在 DX 中,例 如(AL )= 01100101B , (BL )= 11011010B,則得到的(DX )= 10110110 10011001B。 解:利用移位指令完成。 XOR DX,DX

4、MOV CX,8 L1: SHR AL,1 RCR DX,1 SHR BL,1 RCR DX,1 LOOP L1 5. 在變量 VAR1 和 VAR2 中分別保存有兩個字節(jié)型的正整數(shù), 編寫完整的匯編語言程序?qū)?現(xiàn): ( 1)當兩數(shù)中有一個奇數(shù)時,將奇數(shù)存入 VAR1 ,偶數(shù)存入 VAR2 ; ( 2)當兩數(shù)均為奇數(shù)時,兩個變量的內(nèi)容不變; (3)當兩數(shù)均為偶數(shù)時,兩數(shù)縮小一倍后存入原處。 解:當 VAR1 為奇數(shù)時,不論 VAR2 的奇偶性,這兩個單元的內(nèi)容均不變;只有當 VAR1 為偶數(shù)時,如果 VAR2 為奇數(shù),則 VAR1 與 VAR2 內(nèi)容交換;如果 VAR2 為偶數(shù),則兩數(shù)縮 小一

5、倍后存入原處。 DATA SEGMENT VAR1 DB 28 VAR2 DB 36 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DA TA START: MOV AX, DA TA MOV DS,AX MOV ES, AX MOV AL,V AR1 MOV BL,V AR2 TEST AL,1 JZ EVEN1 JMP OVER EVEN1: TEST BL,1 JZ EVEN2 MOV VAR1,BL EVEN2: OVER: MOV AH,4CH MOV AL,0 INT 21H CODE ENDS END START 6. 已知

6、在字變量 VAR1 、 VAR2 和 VAR3 中保存有 3 個相同的代碼,但有一個錯碼,編寫 程序段找出這個錯碼,并將它送到 AX,其地址送 SI;如果 3 個代碼都相同,則在 AX 中置 1 標志。 解:在數(shù)據(jù)段中定義: VAR1 DW 5A34H VAR2 DW 5A35H VAR3 DW 3A34H 在代碼段中編寫程序段: MOV AX,-1 MOV BX,V AR1 CMP BX,V AR2 JZ L2 CMP BX,VAR3 JZ L1 MOV AX,BX LEA SI,VAR1 JMP OVER MOV VAR2,AL JMP OVER SHR AL,1 MOV VAR1,AL

7、SHR BL,1 MOV VAR2,BL L1: MOV AX,V AR2 LEA SI,VAR2 JMP OVER L2: CMP BX,V AR3 JZ OVER MOV AX,V AR3 LEA SI,VAR3 OVER: 7. 分析下列程序段的功能: MOV CL , 04 SHL DX , CL MOV BL , AH SHL AX ,CL SHR BL , CL OR DL , BL 解:程序段完成 DX:AX 組成的 32 位無符號數(shù)左移 4 位,低位補零(也即除以 16)。 8. 下列程序段執(zhí)行后,求 BX 寄存器的內(nèi)容: MOV CL , 3 MOV BX , 0B7H RO

8、L BX , 1 ROR BX , CL 解:實際上完成 BX 內(nèi)容循環(huán)右移 2 位,因此, BX 寄存器的內(nèi)容為 C02DH 。 9. 下列程序段執(zhí)行后,求 BX 寄存器的內(nèi)容: MOV CL , 5 MOV BX , 7D5CH SHR BX , CL 解:完成 BX 內(nèi)容邏輯右移 5 位,因此, BX 寄存器的內(nèi)容為 03EAH 。 10. 將 BUFFERS 中 N 個字按相反順序傳遞到 BUFFERT 中。 解: LEA SI,BUFFERS LEA DI,BUFFERT MOV CX,N ADD DI,N ADD DI,N SUB DI,2 L1: MOV AX,SI MOV DI

9、,AX ADD SI,2 SUB DI,2 LOOP L1 11. 數(shù)組 ARRAY 中存放有一組字型數(shù)據(jù),前兩個字節(jié)存放數(shù)據(jù)長度( 5 的倍數(shù))。為給這 個數(shù)組中的數(shù)據(jù)進行加密保護, 每 5 個數(shù)據(jù)取出一個數(shù)據(jù)進行加密處理: 奇數(shù)位進行取 反,偶數(shù)位不變, 例如對數(shù)據(jù) 0110 1100 1011 0001B 加密后變成 1100 0110 0001 1011B , 編寫加密程序 encrpytion 和解密程序 unencrpytion 。 解:約定從第一個數(shù)據(jù)開始, 每 5 個數(shù)據(jù)為一組, 每組中的第一個數(shù)據(jù)采取加密 /解密處理。 由于加密算法采用的是取反操作, 解密算法也采用取反操作,

10、 因此解密和解密算法是同一個 程序。 ENCRPYTION PROC NEAR LEA SI,ARRAY XOR DX,DX MOV AX,SI MOV BX,5 DIV BX MOV CX, AX ADD SI, 2 L1:MOV AX, SI XOR AX,0AAAAH MOV SI, AX ADD SI,10 LOOP L1 RET ENCRPYTION ENDP 13. 設(shè) BUF 中存放有 N 個無符號數(shù)(或有符號數(shù)) ,編程實現(xiàn)求它們的最小值 和最大值(存入 DX )。 解: BUF 存放有 N 個無符號數(shù)的程序如下: MOV CX,N-1 LEA SI,BUF MOV AX,SI

11、 MOV DX,AX ADD SI,2 L1: CMP AX,SI JBE NOCHG1 XCHG AX,SI NOCHG1: CMP DX,SI JAE NOCHG2 XCHG DX,SI NOCHG2: ADD SI,2 LOOP L1 如果 BUF 中存放的是有符號數(shù),則只需要將程序中的兩行內(nèi)容修改: JBE NOCHG1 改成: JLE NOCHG1AX ) 14. 設(shè) BUFFER 中存放有 N 個無符號 (第 1 個字節(jié)存放緩沖區(qū)的長度) ,編程實現(xiàn)將其中的 0 元素抹去,并更新其長度。 解:設(shè) BUFFER 中存放的是字節(jié)型數(shù)據(jù)。采用雙指針方法: SI 為讀指針, DI 為寫指針

12、, 從低地址開始,內(nèi)存中讀出一個字節(jié),如果不為 0,則寫入內(nèi)存;如果為 0,則不進行寫操 作。 LEA SI, BUFFER XOR CX,CX MOV CL, SI INC SI MOV DI, SI XOR BH,BH XOR AL,AL L1: CMP SI,AL JZ L2 MOV BL,SI MOV DI,BL INC DI INC BH L2: INC SI LOOP L1 MOV BUFFER,BH 16. 編寫一個子程序?qū)崿F(xiàn)統(tǒng)計 AL 中 1 的個數(shù),然后檢測出字節(jié)型緩沖區(qū) BUF 中 0 和 1 個 數(shù)相等的元素個數(shù)。 解: 統(tǒng)計 AL 中 1 的個數(shù), 只需將 AL 右移,

13、 移出的一位內(nèi)容進行累加, 子程序為: COUNTBYTE PROC NEAR PUSH AX PUSH CX MOV CX,8 XOR BL,BL COU1: SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RET COUNTBYTE ENDP 在此基礎(chǔ)上,可以檢測出字節(jié)型緩沖區(qū) BUF 中 0 和 1 個數(shù)相等的元素個數(shù),即一個字 節(jié)中有 4 個 1。設(shè) BUF 中有 N 個字節(jié)型數(shù)據(jù),結(jié)果保持在 BH 中。 MOV CX,N LEA SI, BUF XOR BH,BH L1: MOV AL,SI CALL COUNTBYTE CMP BL,4 JNZ

14、L2 INC BH L2: INC SI LOOP L1 19. 在緩沖區(qū) BUFFER 中, 第 1 個字節(jié)存放數(shù)組的長度 ( 256 ) , 從第 2 個字節(jié)開始存放字 符的 ASCII 碼,編寫子程序完成在最高位給字符加上偶校驗。 解: STACK SEGMENT STACK STACK DW 100H DUP ( ?) TOP LABEL BYTE STACK ENDS DATA SEGMENT BUFFER DB 3 ;首字節(jié)為字符串長度 DB ABC ;字符串 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STAC

15、K START: MOV AX,STACK MOV SS,AX LEA SP,TOP MOV AX,DA TA MOV DS,AX MOV ES,AX LEA DI,BUFFER XOR CX,CX MOV CL,DI INC DI CALL SETEVEN MOV AH,4CH ;返回 DOS MOV AL,0 INT 21H SETEVEN PROC NEAR ;加偶校驗子程序 PUSH AX PUSH BX PUSH CX PUSH DI SETEVEN1: MOV AL,DI CALL COUNTBYTE AND BL,01H JZ SETEVEN2 OR AL,80H MOV DI,

16、AL SETEVEN2: INC DI LOOP SETEVEN1 POP DI POP CX POP BX POP AX RET SETEVEN ENDP COUNTBYTE PROC NEAR PUSH AX PUSH CX MOV CX,8 XOR BL,BL COU1: SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RET COUNTBYTE ENDP CODE ENDS END START 20. 編寫程序完成求多位數(shù)( N 個字)的絕對值。21.已知斐波那契數(shù)列的定義為: F =1,F2 =1,Fj二Fj丄 (i - 3),編寫求該 數(shù)列前 n

17、項的子程序。 解:設(shè)獎斐波那契數(shù)列存放在字變量 RESULT DW 100H DUP RESULT 中。在數(shù)據(jù)段中定義 (?) 22. 編寫程序?qū)崿F(xiàn)循環(huán)顯示 10 條信息,保存每條信息的變量分別為 INFOM1 解:在數(shù)據(jù)段中定義變量: TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5 DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代碼段中編寫程序段: MOV CX,10 XOR SI,SI L1: MOV DX,TABLESI MOV AH,9FIBONACCI PROC NEAR X

18、OR DI,DI MOV RESULTDI,1 MOV RESULTDI+2,1 ADD DI,4 MOV CX,N L1: MOV AX, RESULTDI-4 ADD AX, RESULTDI-2 MOV RESULTDI,AX ADD DI,2 LOOP L1 RET 在代碼段中編寫子程序 ;前兩個數(shù)為 1 FIBONACCI ENDP INFORM10。 INT 21H 這里, WAIT 為延時子程序,用于在顯示信息之間的停頓。 23. 編寫程序?qū)崿F(xiàn)將包含 20 個數(shù)據(jù)的數(shù)組 ARRAY 分成兩個數(shù)組:正數(shù)數(shù)組 ARRAYP 和負 數(shù)數(shù)組 ARRAYN ,并分別將這兩個數(shù)組中數(shù)據(jù)的個數(shù)

19、顯示出來。 解:先編寫一個子程序 DISPALD ,完成以 3 位十進制數(shù)形式顯示出 AL 的內(nèi)容。 DISPALD PROC NEAR PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL, 100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 POP AX MOV DL,30H ADD SI,2 CALL WAIT LOOP L1 INT 2

20、1H ADD DL,AH MOV AH,2 INT 21H POP DX POP CX POP AX RET DISPALD ENDP 在此基礎(chǔ)上, 根據(jù)題目要求, 需要用到 3 個指針: SI 指向源數(shù)組 ARRAY , DI 指向正數(shù)數(shù) 組 ARRAYP , BX 指向負數(shù)數(shù)組 ARRAYN 。 MOV CX,20 XOR DX,DX LEA SI,ARRAY LEA DI,ARRAYP LEA BX,ARRAYN L1: MOV AL,SI AND AL,AL JS L2 MOV DI,AL INC DI INC DL JMP L3 L2: MOV BX,AL INC BX INC DH

21、 L3: INC SI LOOP L1 MOV AL,DL CALL DISPALD MOV AL,DH CALL DISPALD 24. 編寫程序?qū)崿F(xiàn)求緩沖區(qū) BUFFER 的 100 個字中的最小偶數(shù)(存入 解:設(shè) BUFFER 中存放的是有符號數(shù)。 MOV CX,100 LEA SI,BUFFER MOV AX, 7FFFH L1: AND WORD PTR SI,1 JNZ L2 CMP SI,AX JGE L2 MOV AX,SI L2: ADD SI,2 LOOP L1 25. 編寫程序?qū)崿F(xiàn)求級數(shù)12 22 n 的前 n項和剛大于 解:BL 用于存放項數(shù)。 STACK SEGMEN

22、T STACK STACK DW 100H DUP ( ?) TOP LABEL WORD STACK ENDS DATA SEGMENT DB 100H DUP ( ?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START:AX )。 2000 的項數(shù) n。 MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV BL,1 MOV CX,0 COUNT: MOV AL, BL MUL BL ADD CX,AX CMP

23、CX,2000 JA EXIT INC BL JMP COUNT EXIT: 26. 定義一條宏指令,實現(xiàn)將指定數(shù)據(jù)段的段地址傳送到段寄存器 ES 或 DS 的功能。 解: 27. 定義一條宏指令,實現(xiàn)從鍵盤中輸入一個字符串(利用 INT 21H 的 09 號功能)。 28. 定義一條宏指令,實現(xiàn)在屏幕上輸出回車、換行。 29. 利用其它指令完成與下列指令一樣的功能: (1)REP MOVSB ; (2)REP LODSB; (3)REP STOSB; (4)REP SCASB。 解:設(shè) DF=0 (1) L1: MOV AL,SI MOV ES:DI,AL INC SI INC LOOP L

24、1 DI 2) L1: MOV AL,SI INC SI LOOP L1 3) L1: MOV ES:DI,AL INC DI LOOP L1 4) L1: MOV AL,SI CMP AL,ES:DI INC SI INC DI LOOP L1 30. 設(shè)在數(shù)據(jù)段中定義了: STR1 DB ASSEMBLE LANGUAGE STR2 DB 20 DUP(?) 利用字符串指令編寫程序段實現(xiàn): ( 1)從左到右將 STR1 中的字符串傳送到 STR2; ( 2)從右到左將 STR1 中的字符串傳送到 STR2; (3)將 STR1 中的第 6 個和第 7 個字節(jié)裝入 DX; ( 4)掃描 ST

25、R1 字符串中有無空格,如有則將第一個空格符的地址傳送到 SI。 解:STR1 中有 17 個字符(含一個空格),設(shè) DS 和 ES 均指向 STR1 和 STR2 所在的段。 ( 1 ) CLD MOV CX,17 LEA SI,STR1 LEA DI,STR2 REP MOVSB (2) MOV CX,17 LEA SI,STR1 LEA DI,STR2 ADD DEC SI,CX SI L1: MOV AL,SI MOV DI,AL DEC SI INC DI LOOP L1 (3) LEA SI,STR1 MOV DX,SI+6 (4) MOV CX,17 LEA SI,STR1 MO

26、V AL,20H L1: CMP SI, AL JZ L2 INC SI LOOP L1 L2: 31. 設(shè)在數(shù)據(jù)段中定義了: STRING DB Today is Sunday & July 16, 2000 編寫程序?qū)崿F(xiàn)將 STRING 中的& 用/代替。 解: STRING 中保存了 30 個字符。 MOV CX,30 LEA SI,STRING MOV AL, & L1: CMP SI,AL JNZ L2 MOV BYTE PTR SI , / L2: INC SI LOOP L1 32. 分析下列程序段完成的功能: MOV CX ,100 LEA SI , FIRST LEA DI

27、, SECOND REP MOVSB 解:將緩沖區(qū) FIRST 中 100 個字節(jié)傳送到 SECOND 中。 33. 分析下列程序段: LEA DI , STRING MOV CX ,200 CLD MOV AL , 20H REPZ SCASB JNZ FOUND JMP NOT_FOUND 問:轉(zhuǎn)移到 FOUND 的條件。 解:在緩沖區(qū) STRING 中搜索非空格字符,如果有非空格則轉(zhuǎn)到 FOUND , 中都是空格,則轉(zhuǎn)到 NOT_FOUND 。 34. 設(shè)在數(shù)據(jù)段的變量 OLDS 和 NEWS 中保存有 5 個字節(jié)的字符串,如果 同于 NEWS 字符串,則執(zhí)行 NEW_LESS ,否則順

28、序執(zhí)行程序。 解:設(shè) DS 和 ES 均指向字符串 OLDS 和 NEWS 所在的段。 CLD MOV CX,5 LEA SI,OLDS LEA DI,NEWS REPZ CMPSB JNZ NEW_LESS 35. 編程實現(xiàn)將 STRING 字符串中的小寫字母變換成大寫字母。 解:設(shè) STRING 中的字符個數(shù)為 N 。如果 200 個單元 OLDS 字符串不 用空格符清除緩沖區(qū) STUDENT_PRINT ; 在 STUDENT_ADDR 中查找第一個 _字符; 在 STUDENT_ADDR 中查找最后一個 _字符; 如果 STUDENT_NAME 中全為空格符,則 STUDENT_PRI

29、NT 全存入 * ; 將 STUDENT_NAME 傳送到 STUDENT_PRINT 的前 30 個字節(jié)中,將 STUDENT_ADDR 傳送到 STUDENT_PRINT 的后 9 個字節(jié)中。 37. (上機題 )編寫程序?qū)崿F(xiàn),將緩沖區(qū) BUFFER 中的 100 個字按遞增排序,并按下列格式 順序顯示: 數(shù)據(jù) 1 數(shù)據(jù) 2 38. (上機題)按同余法產(chǎn)生一組隨機數(shù) N (1N=50 ),并按 N + 50 賦給 45 名同學(xué)的 5 門課 程的成績, 要求編程實現(xiàn)計算每個同學(xué)的平均成績, 并根據(jù)平均成績統(tǒng)計全班的成績各等級 的人數(shù)(A : 90100, B : 8089, C: 7079,

30、 D: 6669, E: 6065, F: 60 分以下), 按下列格式顯示: L1: MOV CX,N LEA SI,STRING MOV AL,5FH AND SI,AL INC SI LOOP L1 STUDENT_NAME STUDENT_ADDR STUDENT_PRINT 編寫程序?qū)崿F(xiàn): DB 30 DUP (?) DB 9 DUP (?) DB 50 DUP (?) 36. 設(shè)在數(shù)據(jù)段中定義了: D: E: F: 39. (上機題)編寫程序?qū)崿F(xiàn)下列 5 項功能,通過從鍵盤輸入 15 進行菜單式選擇: ( 1 )按數(shù)字鍵“ 1”,完成將字符串中的小寫字母變換成大寫字母。用戶輸入由英文大 小寫字母或數(shù)字 0 9 組成的字符串(以回車結(jié)束) ,變換后按下列格式在屏幕上顯示: 例如: abcdgyt0092 ABCDGYT0092 按任一鍵重做;按 Esc 鍵返回主菜單。 ( 2)按數(shù)字鍵“ 2”,完成在字符串中找最大值。用戶輸入由英文大小寫字母或數(shù)字 0 9 組成的字符串(以回車結(jié)束) ,找出最大值后按下列格式在

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論