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