單片機指令系統(tǒng)復(fù)習(xí).doc
《單片機指令系統(tǒng)復(fù)習(xí).doc》由會員分享,可在線閱讀,更多相關(guān)《單片機指令系統(tǒng)復(fù)習(xí).doc(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
一. 填空題 1. 指出以下程序順序執(zhí)行后每一條指令的結(jié)果。填寫在劃線部分。 (1)MOV A,#25H ; (A)=25H (2)MOV 40H,#1AH ; (40H)=1AH (3)MOV R2,#33H ; (R2)= 33H (4)CLR C ; (C)= 0 (5)ADD A ,R2 ; (A)=58H (6)ADDC A,40H ?。?(A)=72H (7)MOV RO,#40H ; (R0)=40H (8)ADDC A,@RO ; (A)=8CH 2. 在劃線部分寫出下列程序每一條指令執(zhí)行后其目的操作數(shù)的結(jié)果。 (1)MOV A,#OFOH ; 0F0H (2) CPL A ; 0FH (3)ANL 30H,#00H ; 00H (4) ORL 30H, #BDH ; 0BDH (5)XRL 30H,A ; 0B2H 3. 若(A)=7AH,分別執(zhí)行下列指令后,A的值是多少?填在劃線部分。標志位CY和OV的值各是多少 考慮上下指令之間的聯(lián)系。 (1)ANL A,#0FFH ; 7AH (4)ORL A,#00H ; 7AH (2)ORL A,#0FFH ; 0FFH (5)XRL A,#0FFH ; 85H (3)ANL A,#00H ; 00H (6)XRL A,00H ; 7AH 二.簡答題 1. 8051單片機的指令系統(tǒng)有何特點? 解:8051的指令系統(tǒng)由111條指令組成。如果按字節(jié)數(shù)分類,有49條單字節(jié)指令46條雙字節(jié)指令和16條三字節(jié)指令,以單字節(jié)指令為主;如果按照指令執(zhí)行時間分類,有64條單周期指令、45條雙周期指令和2條四周期指令,以單周期指令為主。 8051的指令系統(tǒng)具有以下特點: (1)存儲效率高、執(zhí)行速度快,可以進行直接地址到直接地址的數(shù)據(jù)傳送,能把一個并行I/O口中的內(nèi)容傳送到內(nèi)部RAM單元中而不必經(jīng)過累加器A或工作寄存器Rn。這樣可以大大提高傳送速度和緩解累加器A的瓶頸效應(yīng)。 (2)用變址尋址方式訪問程序存儲器中的表格,將程序存儲器單元中的固定常數(shù)或表格字節(jié)內(nèi)容傳送到累加器A中。這為編成翻譯算法提供了方便。 (3)在算術(shù)運算指令中設(shè)有乘法和除法指令 (4)指令系統(tǒng)中一些對I/O口進行操作的指令具有“讀——修改——寫”的功能。這一功能指:在執(zhí)行讀鎖存器的指令時,CPU首先完成將鎖存器的值通過緩沖器BUF2度入內(nèi)部,進行修改、改變,然后重新寫到鎖存器中去。這種類型指令包含所有的邏輯操作和位操作指令。 (5)8051單片機內(nèi)部有一個布爾處理器,對為地址空間具有豐富的位操作指令。布爾操作類指令有17條,包括布爾傳送指令、布爾狀態(tài)控制指令、布爾邏輯操作指令、布爾條件轉(zhuǎn)移指令。 2. 8051單片機指令系統(tǒng)按功能可分為幾類?具有幾種尋址方式?它們的尋址范圍如何? 解:MCS-51單片機指令系統(tǒng)按功能可分為5類: (1)數(shù)據(jù)傳送指令2)算術(shù)運算指令3)邏輯運算和移位指令4)控制轉(zhuǎn)移指令5)位操作指令 MCS-51單片機的指令系統(tǒng)提供了七種尋址方式,其對應(yīng)的尋址范圍如下表: 尋址方式 使用的變量 尋址范圍 立即尋址 程序存儲器 直接尋址 內(nèi)部RAM低128個字節(jié); 特殊功能寄存器SFR 寄存器尋址 R0~R7;A、B、DPTR、C 寄存器間接尋址 @R0、@R1、SP 內(nèi)部RAM、堆棧指針SP @R0、@R1、@DPTR 外部RAM 變址尋址 @A+PC、@A+DPTR 程序存儲器 相對尋址 PC+偏移量 程序存儲器 位尋址 內(nèi)部RAM低128B位尋址區(qū) 可位尋址的特殊功能寄存器位 3. 訪問特殊功能寄存器和外部數(shù)據(jù)存儲器應(yīng)采用哪種尋址方式? 解: 訪問特殊功能寄存器,應(yīng)采用直接尋址、位尋址方式。訪問外部數(shù)據(jù)存儲器,應(yīng)采用寄存器間接尋址方式。在0~255B范圍內(nèi),可用寄存器R0、R1間接尋址: MOVX A,@R0 或 MOVX A,@R1 MOVX @R0,A 或 MOVX @R1,A 在0~64KB范圍內(nèi),可用16位寄存器DPTR間接尋址 MOVX A,@DPTR MOVX @DPTR,A 4. “DA A”指令的作用是什么?怎樣使用? 解:這條指令是在進行BCD碼加法運算時,跟在“ADD”和“ADDC”指令之后,用來對BCD碼的加法運算結(jié)果自動進行修正的,使其仍為BCD碼表達形式。 在計算機中,遇到十進制調(diào)整指令時,中間結(jié)果的修正是由ALU硬件中的十進制修正電路自動進行的。用戶不必考慮何時該加“6”,使用時只需在上述加法指令后面緊跟一條“DA A”指令即可。 5. 片內(nèi)RAM 20H~2FH單元中的128個位地址與直接地址00H~7FH形式完全相同,如何在指令中區(qū)分出位尋址操作和直接尋址操作? 解: 雖然內(nèi)部RAM位尋址區(qū)的位地址范圍00H~7FH與低128個單元的單元地址范圍00H~7FH形式完全相同,但是在應(yīng)用中可以通過指令的類型區(qū)分單元地址和位地址。 位尋址的操作只適用于下列位指令,而直接尋址操作對這些指令是無效的。MOV C,bit MOV bit,C CLR bit SETB bit CPL bit ANL C,bit ANLC,/bit JB bit,rel JNB bit,rel 6. 8051單片機指令系統(tǒng)中有長跳轉(zhuǎn)LJMP,長調(diào)用LCALL指令,為何還設(shè)置了絕對跳轉(zhuǎn)AJMP,絕對調(diào)用ACALL指令?在實際使用是應(yīng)怎樣考慮? 解: 在實際應(yīng)用中,可從尋址范圍和指令長度兩個方面來選擇長跳轉(zhuǎn)指令LJMP和短跳轉(zhuǎn)指令A(yù)JMP、長調(diào)用指令LCALL和短調(diào)用指令A(yù)CALL。 長跳轉(zhuǎn)LJMP在64KB范圍內(nèi)轉(zhuǎn)移,而短跳轉(zhuǎn)AJMP只能在2KB空間轉(zhuǎn)移。長調(diào)用LCALL調(diào)用位于64KB程序空間的子程序,而短調(diào)用ACALL調(diào)用位于2KB程序空間范圍的子程序。AJMP、ACALL指令代碼長度為2個字節(jié);LJMP、LCALL指令代碼長度為3個字節(jié)。 7. SJMP,AJMP和LJMP指令在功能上有何不同? 解: 指令的轉(zhuǎn)移范圍不同。SJMP是256B范圍內(nèi)的相對轉(zhuǎn)移指令,AJMP是2KB范圍內(nèi)的無條件短跳轉(zhuǎn)指令,LJMP是64KB范圍內(nèi)的無條件長跳轉(zhuǎn)指令。 8. MOVC A,@A+DPTR與MOVX A,@DPTR指令有何不同? 解: MOVC指令是針對程序存儲器的數(shù)據(jù)傳送指令,@A+DPTR基址變址尋址時,DPTR為常數(shù)且是表格的首地址,A為從表格首址到被訪問字節(jié)地址的偏移量。 MOVX指令是針對外部RAM的數(shù)據(jù)傳送指令,@DPTR寄存器間接尋址時,尋址范圍在0~64KB。 9. 在“MOVC A,@A+DPTR”和“MOVC A,@A+PC”中,分別使用了DPTR和PC作基址,請問這兩個基址代表什么地址?使用中有何不同? 解: 使用@A+DPTR基址變址尋址時,DPTR為常數(shù)且是表格的首地址,A為從表格首址到被訪問字節(jié)地址的偏移量。使用@A+PC基址變址尋址時,PC仍是下條指令首地址,而A則是從下條指令首地址到常數(shù)表格中的被訪問字節(jié)的偏移量。 10. 設(shè)片內(nèi)RAM中的(40H)=50H,寫出執(zhí)行下列程序段后寄存器A和R0,以及片內(nèi)RAM中50H和51H單元的內(nèi)容為何值? MOV A,40H MOV R0,A MOV A,#00 MOV @R0,A MOV A,#30H MOV 51H,A MOV 52H,#70H 解:結(jié)果為:(A)=30H (R0)=50H (50H)=00H (51H)=30H 11. 設(shè)堆棧指針(SP)=60H,片內(nèi)RAM中的(30H)=24H,(31H)=10H。執(zhí)行下列程序段后,61H,62H,30H,31H,DPTR及SP中的內(nèi)容將有何變化? 解:結(jié)果為: (61H)=24H (62H)=10H (30H)=00H (31H)=0FFH DPTR=2410H SP=60H 12. 在8051的片內(nèi)RAM中,已知(20H)=30H,(30H)=40H,(40H)=50H,(50H)=55H。分析下面各條指令,說明源操作數(shù)的尋址方式,分析按順序執(zhí)行各條指令后的結(jié)果。 MOV A,40H MOV R0,A MOV P1,,#80H MOV @R0,20H MOV DPTR,#2000H MOV 40H,30H MOV R0,30H MOV D0H,R0 MOV 10H,#10H MOV 50H,R0 MOV A,@R0 MOV P2,P1 解: 指令 源操作數(shù)的尋址方式 執(zhí)行指令后的結(jié)果 MOV A,40H 直接尋址 (A)=50H MOV R0,A 寄存器尋址 (R0)=50H MOV P1,#80H 立即尋址 (P1)=80H MOV @R0,20H 寄存器間接尋址 (50H)=30H MOV DPTR,#2000H 立即尋址 (DPTR)=2000H MOV 40H,30H 直接尋址 (40H)=40H MOV R0,30H 直接尋址 (R0)=40H MOV D0H,R0 直接尋址 (D0H)=40H MOV 10H,#10H 立即尋址 (10H)=10H MOV A,@R0 寄存器間接尋址 (A)=40H MOV P2,P1 寄存器尋址 (P2)=80H 13.指出下列程序中每一條指令的劃線操作數(shù)的尋址方式及其完成的操作。 MOV 3FH ,#40H ;3FH為直接尋址,指令把數(shù)40H送地址3FH中 MOV A ,3FH ;A為特殊寄存器尋址,把地址3FH中的內(nèi)容送A中 MOV R1, #3FH ;3FH為立即尋址,指令把數(shù)3FH送寄存器R1中 MOV A, @R1 ;R1間接尋址, R1的內(nèi)容3FH作地址中的內(nèi)容送A中 MOV 3FH, R1 ;寄存器尋址, R1的內(nèi)容送地址3FH中 14. 內(nèi)部RAM的4FH單元,可用哪幾種方式尋址?分別舉例說明。 答: 1、直接尋址:MOV R1, 4FH 2、間接尋址:MOV R1,#4FH和MOV A, @R1 15. 特殊功能寄存器可用哪幾種方式尋址?分別舉例說明。 答:只有直接尋址: MOV A, 90H (MOV A, P1 ); 該指令只有機器碼E590H。 16. 編程:將立即數(shù)55H送入內(nèi)部RAM的30H單元。 (1)用立即尋址 (2)用寄存器尋址 (3)用寄存器間接尋址 答: (1)MOV 30H ,#55H (2)MOV R1 ,#55H MOV 30H , R1 (3)MOV R1,#30H MOV @R1 ,#55H 17. 用指令實現(xiàn)下述數(shù)據(jù)傳送: (1)內(nèi)部RAM 30H單元的內(nèi)容送內(nèi)部RAM40H單元。 答: MOV 40H , 30H (2)外部RAM 30H單元的內(nèi)容送R0寄存器 答: MOV R1,#30H MOVX A,@R1 MOV R0 ,A (3)外部RAM 30H 單元的內(nèi)容送內(nèi)部RAM 30H單元 答: MOV R1,#30H MOVX A,@R1 MOV 30H,A (4)外部RAM 2000H單元的內(nèi)容送內(nèi)部RAM20H單元 答: MOV DPTR,#2000H MOVX A,@DPTR MOV 20H,A (5)外部ROM 2000H單元的內(nèi)容送內(nèi)部RAM20H單元 答: MOV DPTR,#2000H MOV A,#00H MOVC A,@A+DPTR MOV 20H,A (6)外部ROM 2000H單元內(nèi)容送外部RAM20H單元。 答: MOV DPTR,#2000H MOV A,#00H MOVC A,@A+DPTR MOV R1,#20H MOVX @R1,A 18. 指出下列指令執(zhí)行后目的操作數(shù)的結(jié)果,并寫出每條指令的機器碼。可不管上下句聯(lián)系。其中(R0)=30H。 MOV 30H #52H ;(30H)=52H MOV A,#78H ;(A)=78H MOV A,#30H ;(A)=30H MOV R0,#30H ;(R0)=30H MOV A,@R0 ;(A)=52H,把30H的內(nèi)容送A中。 19.指出在下列各條指令中,45H代表什么尋址方式? (1)MOV A, #45H ;立即尋址 (2)MOV 45H,#46H ;立即尋址 (3)MOV 45H,46H ;直接尋址 (4)MOV C,45H ;位尋址 20. 分析下列指令順序執(zhí)行的結(jié)果,并寫出每條指令的機器碼。 (1)MOV A,#32H ;7432H (2)MOV DPTR,#2020H ;902020H (3)MOVX @DPTR,A ;F0H (4)MOV 20H, #45H ; 752045H (4)MOV R0 ,#20H ;7820H (5)MOVX A ,@R0 ;E2H (6)MOV 30H ,A ;F530H 結(jié)果:片外存儲器RAM2020H內(nèi)容為32H,(30H)=(A)=45H 23. 指出以下程序順序執(zhí)行后每一條指令的結(jié)果。填寫在劃線部分。 (1)MOV A,#25H ; (A)=25H (2)MOV 40H,#1AH ; (40H)=1AH (3)MOV R2,#33H ; (R2)= 33H (4)CLR C ; (C)= 0 (5)ADD A ,R2 ; (A)=58H (6)ADDC A,40H ; (A)=72H (7)MOV R0,#40H ; (R0)=40H (8)ADDC A,@R0 ; (A)=8CH 24. 在劃線部分寫出下列程序每一條指令執(zhí)行后其目的操作數(shù)的結(jié)果。 (1)MOV A,#0F0H ; 0F0H (2) CPL A ; 0FH (3)ANL 30H,#00H ; 00H (4) ORL 30H, #BDH ; 0BDH (5)XRL 30H,A ; 0B2H 25. 若(A)=7AH,分別執(zhí)行下列指令后,A的值是多少?填在劃線部分。標志位CY和OV的值各是多少?不考慮上下指令之間的聯(lián)系。 (1)ANL A,#0FFH ; 7AH (2)ORL A,#0FFH ; 0FFH (3)ANL A,#00H ; 00H (4)ORL A,#00H ; 7AH (5)XRL A,#0FFH ; 85H (6)XRL A,00H ; 7AH 26. 請判斷下列各條指令的書寫格式是否有錯,如有錯說明原因: 答 :打()為不存在指令. 1、mul r0r1 () 2、mov a,@r7 () 3、mov a,#3000h () 4、movc @a+dptr,a () 5、ljmp #1000h () 6、MOVX @R0,B ()7、MOV A,30H (√)8、MOVX A,30H () 9、ADDC A,R7 (√) 10、 ANL #99H ,36H () 27.閱讀下列程序段,寫出每條指令執(zhí)行后的結(jié)果,并說明此程序段完成什么功能? MOV R 1 ,#30H ;(R 1 )= 30H MOV A,#64H ;(A)= 64H ADD A,#47H ;(A)= 0ABH ,(CY)= 0 ,(AC)= 0 DA A ;(A)= 11 ,(CY)= 1 ,(AC)= 1 MOV @R 1 ,A ;(R 1 )= 30H ,(30H)= 11H 此程序段完成的功能: 程序采用十六進制運算指令完成十進制數(shù)運算 64+47=11,且進位為1。結(jié)果在30H單元。注意到DA A的功能。 28. 內(nèi)部RAM的4FH單元,可用哪幾種方式尋址?分別舉例說明。 答: 1. 直接尋址:MOV R1, 4FH 2. 間接尋址:MOV R1,#4FH和MOV A, @R1 29. 編程:將立即數(shù)55H送入內(nèi)部RAM的30H單元。 (1)用立即尋址 MOV 30H ,#55H(2)用寄存器尋址 MOV R1 ,#55H MOV 30H , R1(3)用寄存器間接尋址 MOV R1,#30H MOV @R1 ,#55H 30. 用指令實現(xiàn)下述數(shù)據(jù)傳送: (1)內(nèi)部RAM 30H單元的內(nèi)容送內(nèi)部RAM40H單元。 答: MOV 40H , 30H (2)外部RAM 30H單元的內(nèi)容送R0寄存器 答: MOV R1,#30H MOVX A,@R1 MOV R0 ,A (3)外部RAM 30H 單元的內(nèi)容送內(nèi)部RAM30H單元 答: MOV R1,#30H MOVX A,@R1 MOV 30H,A (4)外部RAM 2000H單元的內(nèi)容送內(nèi)部RAM20H單元 答: MOV DPTR,#2000H MOVX A,@DPTR MOV 20H,A (5)外部ROM 2000H單元的內(nèi)容送內(nèi)部RAM20H單元 答: MOV DPTR,#2000H MOV A,#00H MOVC A,@A+DPTR MOV 20H, (6)外部ROM 2000H單元內(nèi)容送外部RAM20H單元。 答: MOV DPTR,#2000H MOV A,#00H MOVC A,@A+DPTR MOV R1,#20H MOVX @R1,A 三. 編程題 1.試編程實現(xiàn)內(nèi)部RAM25H單元與外部RAM5500H單元的數(shù)據(jù)交換。 MOV DPTR,#5500H MOVX A,@DPTR XCH A,25H MOVX @DPTR,A 2.試編程實現(xiàn)外部RAM2040H單元的內(nèi)容與3040H單元互換。 MOV DPTR,#2040H MOVX A,@DPTR MOV 30H, A MOV DPTR,#3040H MOVX A,@DPTR XCH A,30H MOVX @DPTR,A MOV DPTR,#2040H MOV A,30H MOVX @DPTR,A 3. 試編程實現(xiàn)兩個無符號16位數(shù)的減法。被減數(shù)和減數(shù)分別存放在DATA1和DATA2為首址的內(nèi)部RAM中,低位在低地址單元,高位在后,差存于R3(低8位)和R4(高8位)中 . CLR C MOV R0,#DATA1 MOV A,@R0 MOV R1,#DATA2 SUBB A,@R1 MOV R3,A INC R0 INC R1 MOV A,@R0 SUBB A,@R1 MOV R4,A 4. 若外部RAM的(2000H)=X,(2001H)=Y,編程實現(xiàn)Z=3X+2Y,結(jié)果存入內(nèi)部RAM 20H單元(設(shè)Z<255) MOV DPTR,#2000H MOVX A,@DPTR MOV B,#03H MUL AB MOV B,A ;存3X MOV DPTR,#2001H MOVX A,@DPTR MOV 20H,A ADD A,20H ;計算2Y ADD A,B ;3X+2Y MOV 20H,A 5. 完成以下的數(shù)據(jù)傳送過程。 解:(1)R1的內(nèi)容傳送到R0 ; MOV A, R1 MOV R0, A (2)片外RAM 20H單元內(nèi)容送R0 ; MOV DPTR, #0020H MOVX A, @DPTR MOV R0, A (3)片外 RAM 20H單元的內(nèi)容送片內(nèi)RAM 20H單元; MOV DPTR, #0020H MOVX A, @DPTR MOV 20H, A (4)片外RAM 1000H單元的內(nèi)容送片內(nèi) RAM 20H 單元; MOV DPTR, #1000H MOVX A, @DPTR MOV 20H, A (5)ROM 2000H單元的內(nèi)容送R0單元; MOV A, #00H MOV DPTR, #2000H MOVC A, @A+DPTR MOV R0H, A (6)ROM 2000H 單元的內(nèi)容送片內(nèi)RAM 20H單元; MOV A, #00H MOV DPTR, #2000H MOVC A,@A+DPTR MOV 20H, A (7)ROM 2000H單元的內(nèi)容送片外RAM 20H單元。 MOV A, #00H MOV DPTR, #2000H MOVC A,@A+DPTR MOV DPTR, #0020H MOVX @DPTR,A 6. 設(shè)有兩個4位BCD碼,分別存放在片內(nèi)RAM的23H,22H單元和33H,32H單元中,求它們的和,并送入43H,42H單元中去。(以上均為低位字節(jié),高位在高字節(jié))。 ORG 0000H LJMP START ORG 0030H START: MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END 7. 編程將片內(nèi)RAM的40H~60H單元中內(nèi)容送到片外RAM以3000H開始的單元中。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R7,#20H MOV R1,#40H MOV DPTR,#3000H LOOP:MOV A,@R1 MOVX @DPTR,A INC R1 INC DPTR DJNZ R7,LOOP SJMP $ END 8. 編程計算片內(nèi)RAM區(qū)30H~37H的8個單元中數(shù)的算術(shù)平均值,結(jié)果存在3AH單元中。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#30H ;數(shù)據(jù)首地址 MOV R1,#00H ;和高位 MOV R2,#00H ; 和低位 MOV R3,#07H ;循環(huán)次數(shù) LP2: MOV A,@R0 ADD A,R2 MOV R2,A JNC LP1 INC R1 LP1: INC R0 DJNZ R3,LP2 MOV R3,#03H LP3: CLR C MOV A,R1 RRC A ; 和高位除2 MOV R1,A MOV A,R2 ;和低高位除2 RRC A MOV R2,A DJNZ R3,LP3 MOV 3AH,R2 SJMP $ END 9. 設(shè)有100個有符號數(shù),連續(xù)存放在片外RAM以2200H為首地址的存儲區(qū)中,試片成統(tǒng)計其中正數(shù)|、負數(shù)、零的個數(shù)。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R2,#100 MOV R3,#00H ;零的個數(shù) MOV R4,#00H ;正數(shù)的個數(shù) MOV R5,#00H ;負數(shù)的個數(shù) MOV DPTR,#2000H LOOP: MOVX A,@DPTR CJNE A,#00H,NET1 INC R3 INC DPTR DJNZ R2,LOOP SJMP NET3 NET1: JC NET2 INC R4 INC DPTR DJNZ R2,LOOP SJMP NET3 NET2: INC R5 INC DPTR DJNZ R2,LOOP NET3: SJMP $ END 11.試編程實現(xiàn)兩個無符號16位數(shù)的減法。被減數(shù)和減數(shù)分別存放在DATA1和DATA2為首址的內(nèi)部RAM中,低位在低地址單元,高位在后,差存于R3(低8位)和R4(高8位)中。 CLR C MOV R0,#DATA1 MOV A,@R0 MOV R1,#DATA2 SUBB A,@R1 MOV R3,A INC R0 INC R1 MOV A,@R0 SUBB A,@R1 MOV R4,A 26. 從內(nèi)部存儲器20H單元開始,有30H個數(shù)據(jù)。試編一個程序,把其中的正數(shù)、負數(shù)分別送51H和71H開始的存儲單元,并分別將正數(shù)、負數(shù)的個數(shù)送50H和70H單元。 參考程序: ?。ㄓ捎陂g接尋址寄存器不夠用 ,本處采用兩段程序分先后處理正負數(shù)) MOV R0,#20H ;處理正數(shù) MOV R2,#30H MOV 50H,#00H MOV 70H,#00H MOV R1, #51H LOOP0: MOV A, @R0 ;取數(shù) INC R0 JB ACC.7, LOOP1 MOV @R1 ,A INC R1 INC 50H LOOP1: DJNZ R2, LOOP0 LOP: MOV R0,#20H ;處理負數(shù) MOV R2,#30H MOV R1, #71H LOOP2: MOV A, @R0 INC R0 JNB ACC.7 LOOP3 MOV @R1 ,A ;為負數(shù) INC R1 INC 70H LOOP3: DJNZ R2, LOOP2 END 27. 設(shè)內(nèi)部RAM中30H和31H單元中有兩個帶符號數(shù),求出其中的大數(shù)存放在32H單元中。 MOV A,30H XRL A,31H JB ACC.7,LOOP2 ;是否異號 MOV A,30H ;同號 SUBB A,31H JC LOOP1 MOV 32H,30H ;30H大 SJMP LOOP4 LOOP1:MOV 32H,31H ;31H大 SJMP LOOP4 LOOP2:MOV A,30H ;異號 JB ACC.7 ,LOOP3 MOV 32H,31H ;正數(shù)大 SJMP LOOP4 LOOP3:MOV 32H,30H LOOP4:RET 28. 根據(jù)如下要求,試編制數(shù)據(jù)塊傳送程序。將存放在8051單片機內(nèi)部RAM中首址為20H,長度為50H的數(shù)據(jù)塊,傳送到片外RAM以4200H為首地址的連續(xù)單元中。 MOV R0,#20H MOV DPTR ,#4200H MOV R2,#50H LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,LOOP END 29. 設(shè)有兩長度均為20H的無符號字符串SA和SB,分別存放在單片機片內(nèi)RAM以20H及40H為首址的連續(xù)單元中。首地址存放高位字節(jié)。要求當SA>SB時,將內(nèi)部RAM的60H單元清0;當SA ≤SB時將該單元全置1(FFH)。試編制實現(xiàn)上述要求的程序。 MOV R0,#20H MOV R1,#40H MOV R2, #20H LOOP2: MOV 61H,@R1 ;61H做緩沖單元 MOV A , @R0 CJNE A,61H ,LOOP1 ; 不相等轉(zhuǎn) INC R0 ;相等準備下一字節(jié) INC R1 DJNZ R2 , LOOP2 ;所有字節(jié)都相等? MOV 60H,#00H ;都相等 SJMP LOOP4 LOOP1: JC LOOP3 MOV 60H,#00H ;大于 SJMP LOOP4 LOOP3: MOV 60H,#0FFH ;小于 LOOP4: RET 30. 編一程序。將8051片內(nèi)存儲區(qū)DATA1單元開始的20個單字節(jié)數(shù)據(jù)依次與DATA2單元為起始地址的20個單字節(jié)數(shù)據(jù)進行交換。 MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#20H LOOP:MOV A,@R1 XCH A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2, LOOP END 31. 試編寫一程序。將8051片內(nèi)數(shù)據(jù)存儲區(qū)DATA1單元開始的50個單字節(jié)逐一移至DATA2單元開始的存儲區(qū)中。 MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#50 CJNE R0,#DATA2,LOOP0 ; 計算地址大小 SJMP LOOP5 ;地址相同 LOOP0:JC LOOP2 ;考慮數(shù)據(jù)覆蓋,因地址交叉 LOOP1:MOV A,@R0 ;DATA1大于DATA2 MOV @R1,A ;如40H~72H送30H~62H INC R0 INC R1 DJNZ R2, LOOP1 SJMP LOOP5 LOOP2:MOV R0,#DATA1+50 ;DATA1小于DATA2 MOV R1,#DATA2+50 ;如30H~62H送40H~72H LOOP3:MOV A,@R0 MOV @R1,A DEC R0 DEC R1 DJNZ R2, LOOP3 LOOP5:RET 習(xí)題 2 2.1 指出下列程序中每一條指令的劃線操作數(shù)的尋址方式及其完成的操作。 MOV 3FH ,#40H ;3FH為直接尋址,指令把數(shù)40H送地址3FH中 MOV A ,3FH ;A為特殊寄存器尋址,把地址3FH中的內(nèi)容送A中 MOV R1, #3FH ;3FH為立即尋址,指令把數(shù)3FH送寄存器R1中 MOV A, @R1 ;R1間接尋址, R1的內(nèi)容3FH作地址中的內(nèi)容送A中 MOV 3FH, R1 ;寄存器尋址, R1的內(nèi)容送地址3FH中 2.2 內(nèi)部RAM的4FH單元,可用哪幾種方式尋址?分別舉例說明。 答: 1、直接尋址:MOV R1, 4FH 2、間接尋址:MOV R1,#4FH和MOV A, @R1 2.3 特殊功能寄存器可用哪幾種方式尋址?分別舉例說明。 答:只有直接尋址: MOV A, 90H (MOV A, P1 );P1口該指令只有機器碼E590H。 2.6 指出下列指令執(zhí)行后目的操作數(shù)的結(jié)果,并寫出每條指令的機器碼??刹还苌舷戮渎?lián)系。其中( RO)=30H。 MOV 30H #52H ;(30H)=52H MOV A,#78H ;(A)=78H MOV A,#30H ;(A)=30H MOV RO,#30H ;(RO)=30H MOV A,@RO ;(A)=52H,把30H的內(nèi)容送A中。 2.7指出在下列各條指令中,45H代表什么尋址方式? (1)MOV A, #45H ;立即尋址 ?。?)MOV 45H,46H ;直接尋址 (2)MOV 45H,#46H ;直接尋址 ?。?)MOV C,45H ;位尋址 2.8 分析下列指令順序執(zhí)行的結(jié)果,并寫出每條指令的機器碼。 (1)MOV A,#32H ;7432H ?。?)MOV RO ,#20H ;7820H (2)DPTR,#2020H ;902020H ?。?)MOVX A ,@RO ;E2H (3)MOVX @DPTR,A ;F0H ?。?)MOV 30H ,A ;F530H 結(jié)果:片外存儲器RAM2020H內(nèi)容為32H,(30H)=(A)=32H 2.9試編程實現(xiàn)內(nèi)部RAM25H單元與外部RAM5500H單元的數(shù)據(jù)交換。 參考程序: MOV DPTR,#5500H MOVX A,@DPTR XCH A,25H MOVX @DPTR,A 2.10試編程實現(xiàn)外部RAM2040H單元的內(nèi)容與3040H單元互換。 參考程序: MOV DPTR,#2040H MOVX A,@DPTR MOV 30H, A MOV DPTR,#3040H MOVX A,@DPTR XCH A,30H MOVX @DPTR,A MOV DPTR,#2040H MOV A,30H MOVX @DPTR,A 2.11分析以下程序的執(zhí)行過程,并繪出執(zhí)行過程示意圖。 (1) MOV A,#32H (6)PUSH A (2) MOV SP,#55H (7)MOV A,#2FH (3) MOV DPTR,#4000H ;設(shè)定初值(8) MOV @DPTR,A ;使用寄存器 (4) PUSH DPL (9)POP A ;恢復(fù)現(xiàn)場 (5) PUSH DPH ;保護現(xiàn)場 (10)POP DPH (6) MOV DPTR,#4200H ;使用 (11)POP DPL (12) MOV @DPTR,A 參考答案說明:本程序前三條指令中 A、DPTR被給定了值,在后面程序中又要用到A、DPTR寄存器 序中采用堆棧保存和恢復(fù)A、DPTR的值。 2.12 指出以下程序順序執(zhí)行后每一條指令的結(jié)果。填寫在劃線部分。 (1)MOV A,#25H ; (A)=25H (5)ADD A ,R2 ; (A)=58H (2)MOV 40H,#1AH ; (40H)=1AH (6)ADDC A,40H ; (A)=72H (3)MOV R2,#33H ; (R2)= 33H (7)MOV RO,#40H ; (R0)=40H (4)CLR C ; (C)= 0 (8)ADDC A,@RO ; (A)=8CH 2.13試編程實現(xiàn)兩個無符號16位數(shù)的減法。被減數(shù)和減數(shù)分別存放在DATA1和DATA2為首址的內(nèi)部 AM中,低位在低地址單元,高位在后,差存于R3(低8位)和R4(高8位)中。 參考程序: CLR C MOV R0,#DATA1 MOV A,@R0 MOV R1,#DATA2 SUBB A,@R1 MOV R3,A INC R0 INC R1 MOV A,@R0 SUBB A,@R1 MOV R4,A 2.14 在劃線部分寫出下列程序每一條指令執(zhí)行后其目的操作數(shù)的結(jié)果。 (1)MOV A,#OFOH ; 0F0H (2) CPL A ; 0FH (3)ANL 30H,#00H ; 00H (4) ORL 30H, #BDH ; 0BDH (5)XRL 30H,A ; 0B2H 2.15 若(A)=7AH,分別執(zhí)行下列指令后,A的值是多少?填在劃線部分。標志位CY和OV的值各是多 ?不考慮上下指令之間的聯(lián)系。 (1)ANL A,#0FFH ; 7AH (4)ORL A,#00H ; 7AH (2)ORL A,#0FFH ; 0FFH (5)XRL A,#0FFH ; 85H (3)ANL A,#00H ; 00H (6)XRL A,00H ; 7AH 2.16若外部RAM的(2000H)=X,(2001H)=Y,編程實現(xiàn)Z=3X+2Y,結(jié)果存入內(nèi)部RAM 20H單元(設(shè)Z<255) 參考程序: MOV DPTR,#2000H MOVX A,@DPTR MOV B,#03H MUL AB MOV B,A ;存3X MOV DPTR,#2001H MOVX A,@DPTR MOV 20H,A ADD A,20H ;計算2Y ADD A,B ;3X+2Y MOV 20H,A 2.17 請判斷下列各條指令的書寫格式是否有錯,如有錯說明原因: 答 :打()為不存在指令. 1、mul r0r1 () 6、MOVX @R0,B () 2、mov a,@r7 () 7、MOV A,30H (√) 3、mov a,#3000h () 8、MOVX A,30H () 4、movc @a+dptr,a () 9、ADDC A,R7 (√) 5、ljmp #1000h () 10、 ANL #99H ,36H () 2.18閱讀下列程序段,寫出每條指令執(zhí)行后的結(jié)果,并說明此程序段完成什么功能? MOV R 1 ,#30H ;(R 1 )= 30H MOV A,#64H ;(A)= 64H ADD A,#47H ;(A)= 0ABH ,(CY)= 0 ,(AC)= 0 DA A ;(A)= 11 ,(CY)= 1 ,(AC)= 1 MOV @R 1 ,A ;(R 1 )= 30H ,(30H)= 11H 此程序段完成的功能: 程序采用十六進制運算指令完成十進制數(shù)運算 64+47=11,且進位為1。結(jié)果 在30H單元。注意到DA A的功能。 1、填空(每空1分,共20分) 1、十六進制數(shù)2B.4H轉(zhuǎn)換為二進制數(shù)是_______________,轉(zhuǎn)換為十進制數(shù)是_______________。 2、一臺計算機所用的二進制代碼的位數(shù)稱為____________,8位二進制數(shù)稱為______________。 3、8051單片機片內(nèi)有___________字節(jié)的ROM,____________字節(jié)的RAM。 4、串行通信根據(jù)傳送信息的形式分為________________和________________。 5、MCS—51單片機系統(tǒng)通常有上電復(fù)位和_______兩種復(fù)位方式。復(fù)位對內(nèi)部RAM______影響。 6、堆棧按照___________原則工作,使用__________指明棧頂位置。 7、_____速的外設(shè)和計算機傳送_______批量數(shù)據(jù)時常采用DMA方式。 8、MCS—51單片機的P2口有兩種用途:________________和_________。 9、中斷系統(tǒng)中的兩個特殊功能寄存器IE為_______________,IP為_____________。 10、一個機器周期為_______個時鐘周期,_______個振蕩周期。 二、判斷是非,正確的打√,不正確的 打X號 (每小題1分,共10分) 1、字長越長,計算機處理數(shù)據(jù)的速度越快; ( ) 2、匯編語言是面向過程的語言。 ( ) 3、任何一個十進制小數(shù)都可以用二進制精確表示。 ( ) 4、計算機的內(nèi)存與外存都可以直接與CPU交換數(shù)據(jù)。( ) 5、8051片內(nèi)數(shù)據(jù)存儲器的A0H單元既可采用直接尋址方式,又可采用寄存器間接尋址方式.( ) 6、P0、P1、P2、P3這四個并行輸入/輸出接口可以并行輸入或輸出8位數(shù)據(jù),也可以按位使用。 ( ) 7、復(fù)位影響片內(nèi)RAM存放的內(nèi)容。 ( ) 8、單片機有4組工作寄存器,可以同時使用四組。 ( ) 9、定時器/計數(shù)器0在工作方式0時的最大計數(shù)范圍是256。( ) 10、定時器/計數(shù)器溢出中斷可以由硬件產(chǎn)生,也可以由軟件產(chǎn)生。( ) 三、計算(5分) 1、設(shè)X=98,Y=58,用補碼列式計算X-Y(以八位二進制數(shù)表示) 四、簡答題(每小題4分,共20分) 1、微型計算機由哪幾部分構(gòu)成?并簡述各部分的功能。 2 計算機與外設(shè)之間傳輸數(shù)據(jù)的方式有哪幾種?有何特點? 3、8051、8031、8751這三者有何區(qū)別和聯(lián)系? 4、EA/VDD引腳有何功用?8031的EA引腳應(yīng)如何處理,為什么? 5、MCS—51單片機的尋址方式有哪幾種? 五、指令分析(15分) 1、 分析執(zhí)行指令(5分) MOV A,#7FH ADD A,#47H 后,A、C、AC、OV、P的內(nèi)容是什么? 2、用數(shù)據(jù)傳送指令來實現(xiàn)下列要求的數(shù)據(jù)傳送。(每小題2分,共6分) (1)內(nèi)部RAM 50H單元內(nèi)容傳送到R3中。 (2)外部RAM 30H單元內(nèi)容送內(nèi)部RAM20H單元。 (3)ROM 2000H單元內(nèi)容送外部RAM 30H單元。 3、指令改錯。(每小題1分,共4分) (1) MOV #78H, A (2) DEC DPTR (3) MOVX A,@R5 (4) XRL 30H 六、程序設(shè)計(15分) 1. 將A中所存的一位十六進制數(shù)轉(zhuǎn)換為ASCII碼。(7分) 2.編寫一程序段,其功能為:內(nèi)部RAM的32H(高)~30H(低)和42H(高)~40H(低)兩個三 字節(jié)無符號數(shù)相加,結(jié)果存入32H(高)~30H(低)單元,設(shè)三字節(jié)相加時無進位。(8分) 七、應(yīng)用題(15分) 已知振蕩器振蕩頻率fosc為12MHz,要求定時器/計數(shù)器0產(chǎn)生10ms定時,編寫初始化程序。 參考答案 一、 填空 1.10,1011.01 43.25 2. 字長,字節(jié) 3.4K, 128; 4.同步通信,異步通信 5.操作復(fù)位, 不產(chǎn)生 6.先進后出, 堆棧指針 7,高, 大 8.準雙向輸入輸出接口,高8位地址總線 9.中斷允許寄存器,優(yōu)先級選擇寄存器 10.6, 12 二、判斷是非 1.√;2√; 3; 4;5;6?!?;7;8 9;10。√ 三、計算 1.00101000 四、簡答 1. CPU--算術(shù)邏輯運算,控制運算等、存儲器――存儲數(shù)據(jù),中間結(jié)果等、I/O接口――片內(nèi) 片外數(shù)據(jù)交換,電平轉(zhuǎn)換,信息轉(zhuǎn)換等、總線――連接片內(nèi)片外元器件。 2. 無件傳送方式――最簡單,只傳送數(shù)據(jù)信息 查詢傳送方式------CPU不斷在查詢狀態(tài)下效率低, 中斷方式-=適時性好, DMA方式――最快的數(shù)據(jù)傳送方式 3.8051有4KB掩膜ROM,8031內(nèi)部無ROM,8751內(nèi)部有4KB的EPROM。 4.EA為片外程序存儲器選擇端,同時又是編程電壓輸入端;8031的EA引腳應(yīng)接地。 5.立即尋址 `寄存器尋址 直接尋址 、間接尋址 變址尋址 、相對尋址 五、指令分析 1.(A)=C6H,C=0,AC=1,OV=1,P=0 2. (5) MOV R3,50H (6) MOV R0,#30H, MOVX A,@R0 MOV 20H,A (7) MOV DPTR,#2000H CLR A MOVC A,@A+DPTR MOV R0,#30H MOVX @R0,A 3.(1)MOV A,#78H (2) INC DPTR (3) MOVX A,@R0 (4) XRL A 六、程序設(shè)計 1. MOV R2,A ADD A,#F6H MOV A,R2 JNC AD30H ADD A,#07H AD30H:ADD A,#30H 2. MOV R0,#30H MOV R1,#40H MOV R2,#03H CLR C LOOP:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP END 七、應(yīng)用題 Tcy=12(1/(12106))=1s; 故定時值為10ms時,計數(shù)值為:N=10ms/1s=10000 (1)方式1時,初值X=216-N=65536-10000=55536=D8FCH 故設(shè)定的初值TH0=D8H;TL0=F0H (2) 方式1時方式控制寄存器的編程: TMOD的各位內(nèi)容確定如下:由于定時器/計數(shù)器0設(shè)定為工作方式1,非門控方式,所以 C/T(TMOD.2)=0,M!( TMOD.1)=0,M0( TMOD.0)=1,GATE!( TMOD.3)=0;定時器/計數(shù)器1 沒有使用,相應(yīng)的D7-D4為隨意態(tài)“X”可取為0,則( TMOD)=01H (5)初始化程序 Start: MOV TL0, #F0H; MOV TH0, #D8H; MOV TMOD, #01H; SETB TR0- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機 指令系統(tǒng) 復(fù)習(xí)
鏈接地址:http://www.820124.com/p-6638434.html