




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章MCS-51指令系統實訓3指令的應用3.1簡介3.2尋址方式3.3指令系統本章小結習題3實訓3指?令?的?應?用1.實訓目的(1)掌握指令格式及表示方法:助記符表示和機器碼表示。(2)了解人工匯編與機器匯編的方法。(3)了解尋址方式的概念。(4)掌握常用指令的功能及應用。
2.實訓設備和器件(1)實訓設備:單片機開發系統、微機等。(2)實訓電路:同實訓1電路。
3.實訓步驟與要求(1)將表3.1中的助記符指令翻譯成機器碼。(2)將機器碼分別輸入到單片機開發系統中,或經機器匯編后分別下載到單片機開發系統中,單步運行,觀察并記錄實驗板上的8個發光二極管的亮滅狀態及相關單元的數據,填入表3.1中。
4.實訓分析與總結1)指令形式從實訓中可以看出,指令有兩種形式:助記符指令和機器碼指令(機器指令)。助記符指令只有翻譯成機器碼后,單片機才能直接執行。機器碼指令分為以下三種:單字節指令:機器碼只有一個字節的指令稱為單字節指令。例如單字節指令CLRA的機器碼是E4H。雙字節指令:機器碼包括兩個字節的指令稱為雙字節指令。例如雙字節指令MOVA,#55H的機器碼是74H55H。三字節指令:機器碼包括三個字節的指令稱為三字節指令。例如三字節指令MOVP1,#55H的機器碼是75H90H55H。單片機指令系統中,大多數指令是單字節指令和雙字節指令。2)指令分析(1)?MOVP1,#55H:將常數55H送入P1口。在助記符指令中,常數被稱為立即數。發光二極管的狀態為立即數55H: 01010101對應P1口各位:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0相應的LED狀態:亮滅亮滅亮滅亮滅參照實訓1的電路圖,若P1口的某一位輸出0(低電平),則經過反相后變為高電平,由外部電源VCC驅動發光二極管處于點亮狀態;否則,二極管處于熄滅狀態。(2)?MOV20H,#0F0H:將立即數0F0H送到內部RAM的20H單元中。???MOVP1,20H:將20H單元的內容,即0F0H送到P1口。發光二極管的狀態為0F0H:11110000P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:滅滅滅滅亮亮亮亮(3)?MOVA,#0F0H:將立即數0F0H送到累加器A中。???MOVP1,A:將累加器A的內容,即0F0H送到P1口。發光二極管的狀態同(2)。(4)?MOVR4,#0FH:將立即數0FH送到寄存器R4中。MOVP1,R4:將寄存器R4的內容,即0FH送到P1口。發光二極管的狀態如下:0FH:00001111P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:亮亮亮亮滅滅滅滅(5)?MOV20H,#0AAH:將立即數0AAH送到內部RAM的20H單元中。???MOVR0,#20H:將立即數20H送到R0寄存器中。???MOVP1,@R0:將R0所指向的20H單元的內容,即0AAH送到P1口中。發光二極管的狀態如下:0AAH:10101010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:滅亮滅亮滅亮滅亮(6)?MOVA,#55H:將立即數55H送到累加器A中。MOVP1,A:將累加器A的內容,即55H送到P1口。發光二極管的狀態同(1)。ANLA,#0FH:將累加器A的內容55H與立即數0FH進行邏輯“與”操作,結果為05H,再送回累加器A中。MOVP1,A:將累加器A的內容,即05H送到P1口。發光二極管的狀態如下:05H:00000101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:亮亮亮亮亮滅亮滅???ORLA,#0F0H:將累加器A的內容05H與立即數0F0H進行邏輯“或”操作,結果為0F5H,再送回累加器A中。???MOVP1,A:將累加器A的內容,即0F5H送到P1口。發光二極管的狀態如下:0F5H:11110101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:滅滅滅滅亮滅亮滅(7)?CLR ?A:累加器清0。MOVP1,A:將累加器A的內容,即00H送到P1口。發光二極管的狀態是全亮。CPL??A:將A的內容00H按位取反,結果為0FFH。MOVP1,A:將累加器A的內容,即0FFH送到P1口。發光二極管的狀態是全滅。(8)?MOVA,#01H:將立即數01H送到累加器A中。MOVP1,A:將累加器A的內容,即01H送到P1口。發光二極管的狀態如下:01H:0000000?1P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:亮亮亮亮亮亮亮滅??RL?A:移位指令,將A的內容01H循環左移一位,結果為02H。??MOVP1,A:將累加器A的內容,即02H送到P1口。發光二極管的狀態如下:02H:00000?010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:亮亮亮亮亮亮滅亮???RL?A:將A的內容02H左移一位,結果為04H。???MOVP1,A:將累加器A的內容,即04H送到P1口。發光二極管的狀態如下:02H:00000?100P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態:亮亮亮亮亮滅亮?亮3)現象分析從實訓2中看到以下現象:往P1口傳送數據的指令中,數據的來源不盡相同。數據是指令的操作對象,叫做操作數。指令必須給出操作數所在的地方,才能進行數據傳送。尋找操作數地址的方法,稱為尋址方式。下面是在實訓中遇到的采用了不同尋址方式的指令:
MOVP1,#55H;把操作數直接寫在指令中,稱為立即數尋址
MOVP1,20H ;把存放操作數的內存單元的地址直接寫在指令 ;中,稱為直接尋址MOVP1,A ;把操作數存放在寄存器中,稱為寄存器尋址MOVP1,@R0 ;把存放操作數的內存單元的地址放在寄存器 ;R0中,這種尋址方式稱為寄存器間接尋址除了以上4種尋址方式之外,MCS-51單片機還有變址尋址方式、相對尋址方式和位尋址方式等。思考:指出表3.1中每一條指令的尋址方式。注意:P1與寄存器R0~R7、累加器A不同,它是內部RAM單元90H的符號地址,只能作為內存單元直接尋址。3.1簡介3.1.1指令概述3.1.2指令格式從實訓2中看到,不同指令翻譯成機器碼后字節數也不一定相同。按照機器碼個數,指令可以分為以下三種:
MCS-51單片機指令系統包括49條單字節指令、46條雙字節指令和16條三字節指令。采用助記符表示的匯編語言指令格式如下:標號是程序員根據編程需要給指令設定的符號地址,可有可無;標號由1~8個字符組成,第一個字符必須是英文字母;標號后必須用冒號。操作碼表示指令的操作種類,如MOV表示數據傳送操作,ADD表示加法操作等。操作數或操作數地址表示參加運算的數據或數據的有效地址。操作數一般有以下幾種形式:沒有操作數項,即操作數隱含在操作碼中,如RET指令;只有一個操作數,如CPLA指令;有兩個操作數,如MOVA,#00H指令,操作數之間以逗號相隔,前面的操作數稱為目的操作數,后面的操作數稱為源操作數;有三個操作數,如CJNEA,#00H,NEXT指令,操作數之間也以逗號相隔。注釋是對指令的解釋說明,用以提高程序的可讀性。注釋前必須加分號。3.2尋址方式1.寄存器尋址寄存器尋址是指將操作數存放于寄存器中。寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOVR1,A的操作是把累加器A中的數據傳送到寄存器R1中,其操作數存放在累加器A中,所以尋址方式為寄存器尋址。如果程序狀態寄存器PSW的RS1RS0=01(選中第一組工作寄存器,對應地址為08H~0FH),設累加器A的內容為20H,則執行MOVR1,A指令后,內部RAM09H單元的值就變為20H,如圖3.1所示。圖3.1寄存器尋址示意圖寄存器尋址的尋址范圍包括如下兩部分:(1)通用寄存器R0~R7。MCS-51單片機中共有4組32個通用寄存器,但寄存器尋址只能使用當前寄存器組,指令中的寄存器名稱也只能是R0~R7。因此,在使用前,需要通過對PSW中的RS1、RS0位的狀態進行設置,來選擇當前寄存器組。單片機復位時,RS1RS0=00,選中第0組工作寄存器。(2)部分專用寄存器。例如累加器A、寄存器B以及數據指針DPTR等。實訓3中,采用寄存器尋址的指令如下:MOV P1,A ;將累加器A的內容送到P1口MOV P1,R4 ;將寄存器R4的內容送到P1口CLR A ;將累加器A清0CPL A ;將累加器A中的內容取反RL A ;將累加器A的內容循環左移
2.直接尋址直接尋址是指把存放操作數的內存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內部RAM區和特殊功能寄存器SFR區。例如,指令MOVA,3AH執行的操作是將內部RAM中地址為3AH的單元內容傳送到累加器A中,其操作數3AH就是存放數據的單元地址,因此該指令采用的是直接尋址方式。設內部RAM3AH單元的內容是88H,那么指令MOVA,3AH的執行過程如圖3.2所示。圖3.2直接尋址示意圖在直接尋址中,指令中直接給出了存放操作數的內部RAM地址,而不是操作數本身,其尋址范圍只限于內部RAM中,包括如下兩部分:(1)內部RAM的低128單元,地址范圍為00H~FFH,在指令中直接以單元地址形式給出。例如:指令MOVA,3AH中,3AH表示內部RAM單元地址。(2)專用寄存器。專用寄存器除以單元地址形式給出外,還可以用寄存器符號形式給出。直接尋址是訪問專用寄存器的惟一方法。實訓3中,采用直接尋址的指令如下:MOVP1,20H ;將20H單元的內容傳送到P1口圖3.3立即數尋址示意圖
3.立即數尋址立即數尋址是指將操作數直接寫在指令中。例如,指令MOVA,#3AH執行的操作是將立即數3AH送到累加器A中,該指令就是立即數尋址。注意:立即數前面必須加“#”號,以區別立即數和直接地址。該指令的執行過程如圖3.3所示。實訓3中,采用立即數尋址的指令如下:MOV P1,#55H ;將立即數55H送P1口MOV 20H,#0F0H ;將立即數0F0H送20H單元MOV A,#0F0H ;將立即數0F0H送累加器A中MOV R4,#0FH ;將立即數0FH送寄存器R4中MOV R0,#20H ;將立即數20H送寄存器R0中ANL A,#0FH ;將累加器A的內容與立即數0FH進行邏輯與操作ORL A,#0F0H ;將累加器A的內容與立即數0F0H進行邏輯或操作MOV A,#01H ;將立即數01H送累加器A中MOV A,#55H ;將立即數55H送累加器A中
除了以上給出的8位立即數尋址的指令例子外,MCS-51指令系統中還有一條16位立即數尋址指令,該指令為
MOVDPTR,#2000H;把16位立即數2000H傳送到數據指針DPTR中
4.寄存器間接尋址寄存器間接尋址是指將存放操作數的內存單元的地址放在寄存器中,指令中只給出該寄存器。執行指令時,首先根據寄存器的內容,找到所需要的操作數地址,再由該地址找到操作數并完成相應操作。在MCS-51指令系統中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,它們被稱為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加上符號“@”。例如,指令MOVA,@R0執行的操作是將R0的內容作為內部RAM的地址,再將該地址單元中的內容取出來送到累加器A中。設R0=3AH,內部RAM3AH中的值是65H,則指令MOVA,@R0的執行結果是累加器A的值為65H,該指令的執行過程如圖3.4所示。圖3.4寄存器間接尋址示意圖寄存器間接尋址的尋址范圍如下:(1)內部RAM的低128字節。對內部RAM的低128字節單元的間接尋址,只能使用R0或R1作間接尋址寄存器,其通用形式為@Ri(i=0或1)。(2)外部RAM的64K字節。對外部RAM的64K字節的間接尋址,使用DPTR作間接尋址寄存器,其形式為@DPTR。例如:MOVXA,@DPTR,其功能是把由DPTR指定的外部RAM單元的內容送到累加器A中。(3)外部RAM的低256字節。外部RAM的低256字節是一個特殊的尋址區,除了可以使用DPTR作間接尋址寄存器外,還可以使用R0或R1作間接尋址寄存器,例如MOVXA,@R0,即把由R0指定的外部RAM單元的內容傳送到累加器A中。實訓3中,采用寄存器間接尋址的指令如下:MOVP1,@R0 ;將R0所指的存儲單元的內容送P1口
5.變址尋址變址尋址是指將基址寄存器與變址寄存器的內容相加,結果作為操作數的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。例如,指令MOVCA,@A+DPTR執行的操作是將累加器A和基址寄存器DPTR的內容相加,相加結果作為操作數存放的地址,再按照該地址將操作數取出來送到累加器A中。設累加器A=02H,DPTR=0300H,外部ROM中,0302H單元的內容是55H,則指令MOVCA,@A+DPTR的執行結果是累加器A的內容為55H。該指令的執行過程如圖3.5所示。圖3.5變址尋址示意圖對變址尋址方式說明如下:(1)變址尋址是專門針對程序存儲器的尋址方式,所以只能對程序存儲器進行尋址,尋址范圍為64K字節。(2)變址尋址的指令只有2條:MOVC A,@A+DPTRMOVC A,@A+PC(3)盡管變址尋址比較復雜,但變址尋址的指令都是一字節指令。6.相對尋址相對尋址是指將程序計數器PC的當前內容與指令中的操作數相加,其結果作為跳轉指令的轉移地址(也稱目的地址)。該類尋址方式主要用于跳轉指令。例如,指令SJMP54H執行的操作是將PC當前的內容與54H相加,結果再送回PC中,成為下一條將要執行指令的地址。設指令SJMP54H的機器碼80H54H存放在2000H處,當執行到該指令時,先從2000H和2001H單元取出指令,PC自動變為2002H;再把PC的內容與操作數54H相加,形成目標地址2056H,再送回PC,使得程序跳轉到2056H單元繼續執行。該指令的執行過程如圖3.6所示。相對尋址是專門為改變程序執行方向而設置的,程序執行的方向由程序計數器PC控制,在程序順序執行過程中,PC自動加1,按照指令的存放順序逐一執行;而相對尋址則會修改PC的值,從而使程序跳轉到新的目的地址執行。圖3.6相對尋址示意圖
7.位尋址位尋址是指按位進行的尋址操作,而上述介紹的指令都是按字節進行的尋址操作。MCS-51單片機中,操作數不僅可以按字節進行操作,也可以按位進行操作。當我們把某一位作為操作數時,這個操作數的地址稱為位地址。例如,指令SETB3DH執行的操作是將內部RAM位尋址區中的3DH位置1。設內部RAM27H單元的內容是00H,執行SETB3DH后,由于3DH對應內部RAM27H的第5位,因此該位變為1,也就是27H單元的內容變為20H。該指令的執行過程如圖3.7所示。圖3.7位尋址示意圖位尋址區包括專門安排在內部RAM中的如下兩個區域:(1)內部RAM的位尋址區,地址范圍是20H~2FH,共16個RAM單元,每個單元包括8個位,共計128個位,位地址為00H~7FH。對這128個位有兩種表示方式:一是位地址,例如:SETB3DH;二是單元地址加位的方式,即點操作符寫法,例如:SETB27H.5。(2)特殊功能寄存器SFR中的11個寄存器可以位尋址,包括83個位(相關內容可參見有關章節中位地址定義的內容)。對這些位在指令中有如下4種表示方法:直接使用位地址,例如:MOVC,0D0H。點操作符表示法,例如:MOVC,0D0H.0。位名稱表示法,例如:MOVC,P。專用寄存器符號與點操作符表示法,例如:MOVC,PSW.0。
8.?MCS-51單片機尋址方式小結以上介紹了MCS-51單片機的7種尋址方式,每一種尋址方式都有各自不同的尋址區域和特點,在此歸納總結如表3.2所示。表3.2MCS-51單片機尋址方式小結注:指令舉例中,尋址方式是指源操作數的尋址方式。3.3指令系統MCS-51單片機指令系統包括111條指令,按功能可以劃分為以下5類:數據傳送指令(29條)。算術運算指令(24條)。邏輯運算及移位指令(24條)。控制轉移指令(17條)。位操作指令(17條)。3.3.1指令系統中的符號說明指令的書寫必須遵守一定的規則,為了敘述方便,我們采用表3.3的約定。表3.3指令描述約定3.3.2數據傳送類指令數據傳送指令是MCS-51單片機匯編語言程序設計中使用最頻繁的指令,包括內部RAM、寄存器、外部RAM以及程序存儲器之間的數據傳送。數據傳送操作是指把數據從源地址傳送到目的地址,源地址內容不變,即數據傳送類指令分類如圖3.8所示.圖3.8數據傳送指令分類
1.內部8位數據傳送指令(15條)內部8位數據傳送指令共15條,主要用于MCS-51單片機內部RAM與寄存器之間的數據傳送。指令基本格式:MOV<目的操作數>,<源操作數>1)以累加器A為目的地址的傳送指令(4條)例3.1
已知相應單元的內容如下,請指出每條指令執行后相應單元內容的變化。(1)MOVA,#20H(2)MOVA,40H(3)MOVA,R0(4)MOVA,@R0解:(1)MOVA,#20H執行后A=20H。(2)MOVA,40H執行后A=30H。(3)MOVA,R0執行后A=50H。(4)MOVA,@R0執行后A=10H。2)以Rn為目的地址的傳送指令(3條)3)以直接地址為目的地址的傳送指令(5條)注意:以上傳送指令的結果不影響程序狀態字寄存器PSW標志。4)以寄存器間接地址為目的地址的傳送指令(3條)注意:以上傳送指令的結果不影響程序狀態字寄存器PSW標志。例3.2
已知相應單元的內容如下,請指出下列指令執行后各單元內容相應的變化。(1)MOVA,R6(2)MOVR6,70H(3)MOV70H,50H(4)MOV40H,@R0(5)MOV@R1,#88H解:(1)MOVA,R6執行后A=30H。 (2)MOVR6,70H執行后R6=40H。(3)MOV70H,50H執行后?(70H)=60H。(4)MOV40H,@R0執行后?(40H)=60H。(5)MOV@R1,#88H執行后?(66H)=88H。注意:以上指令結果不影響程序狀態字寄存器PSW標志。
2.16位數據傳送指令(1條)3.外部數據傳送指令(4條)注意:①外部RAM只能通過累加器A進行數據傳送。②累加器A與外部RAM之間傳送數據時只能用間接尋址方式,間接尋址寄存器為DPTR、R0、R1。③以上傳送指令結果(未注明的)通常影響程序狀態字寄存器PSW的P標志。例3.3
把外部數據存儲器2040H單元中的數據傳送到外部數據存儲器2560H單元中去。解:MOVDPTR,#2040H MOVXA,@DPTR ;先將2040H單元的內容傳送到累加器A中 MOVDPTR,#2560H MOVX@DPTR,A ;再將累加器A中的內容傳送到2560H單元中注意:以上指令結果影響程序狀態字寄存器PSW的P標志。4.交換和查表類指令(9條)1)字節交換指令(3條)例3.4設內部數據存儲區2AH、2BH單元中連續存放有4個BCD碼(1個BCD碼占4位),試編寫一程序把這4個BCD碼倒序排序,即解:MOVR0,#2AH ;將立即數2AH傳送到寄存器R0中 MOVA,@R0 ;將2AH單元的內容傳送到累加器A中 SWAPA ;將累加器A中的高4位與低4位交換 MOV@R0,A ;將累加器A的內容傳送到2AH單元中 MOVR1,#2BH
MOVA,@R1 ;將2BH單元的內容傳送到累加器A中
SWAPA ;將累加器A中的高4位與低4位交換XCHA,@R0 ;將累加器A中的內容與2AH單元的內容交換MOV@R1,A ;將累加器A的內容傳送到2BH單元注意:①以上指令結果影響程序狀態字寄存器PSW的P標志。②查表指令用于查找存放在程序存儲器中的表格。4)查表指令(2條)5)堆棧操作指令(2條)注意:①堆棧是用戶自己設定的內部RAM中的一塊專用存儲區,使用時一定先設堆棧指針,堆棧指針缺省為SP=07H。②堆棧遵循后進先出的原則安排數據。③堆棧操作必須是字節操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫成:PUSH/POPACC或PUSH/POP0E0H而不能寫成:PUSH/POPA④堆棧通常用于臨時保護數據及子程序調用時保護現場和恢復現場。⑤以上指令結果不影響程序狀態字寄存器PSW標志。例3.5
設堆棧指針為30H,把累加器A和DPTR中的內容壓入,然后根據需要再把它們彈出,編寫實現該功能的程序段。解:MOVSP,#30H ;設置堆棧指針,SP=30H為棧底地址PUSH ACC;SP+1→SP,SP=31H,ACC→(SP)PUSH DPH;SP+1→SP,SP=32H,DPH→(SP)PUSH DPL;SP+1→SP,SP=33H,DPL→(SP)POP DPL;(SP)→DPL,SP-1→SP,SP=32HPOP DPH ;(SP)→DPH,SP-1→SP,SP=31HPOP ACC ;(SP)→ACC,SP-1→SP,SP=30H3.3.3算術運算類指令算術運算類指令分類如圖3.9所示。圖3.9算術運算類指令分類
1.加、減法指令(22條)1)加法指令(8條)2)減法指令(4條)注意:①減法指令中沒有不帶借位的減法指令,所以在需要時,必須先將CY清0。②指令執行結果均在累加器A中。③以上指令結果均影響程序狀態字寄存器PSW的CY、OV、AC和P標志。例3.6編寫計算12A4H+0FE7H的程序,將結果存入內部RAM41H和40H單元,40H存低8位,41H存高8位。解:單片機指令系統中只提供了8位的加減法運算指令,兩個16位數(雙字節)相加可分為兩步進行,第一步先對低8位相加,第二步再對高8位相加。程序如下:MOVA,#0A4H ;被加數低8位→AADDA,#0E7H ;加數低8位E7H與之相加,A=8BH,CY=1MOV40H,A ;A→(40H),存低8位結果MOVA,#12H;被加數高8位→AADDCA,#0FH ;加數高8位+A+CY,A=22HMOV41H,A ;存高8位運算結果注意:①該指令結果影響程序狀態字寄存器PSW的CY、OV、AC和P標志。3)BCD碼調整指令(1條)②BCD(BinaryCodedDecimal)碼是用二進制形式表示十進制數,例如十進制數45的BCD碼形式為45H。BCD碼只是一種表示形式,與其數值沒有關系。BCD碼用4位二進制碼表示一位十進制數,這4位二進制數的權為8421,所以BCD碼又稱為8421碼。十進制數碼0~9所對應的BCD碼如表3.4所示。表3.4十進制數碼與BCD碼的對應表在表3.4中,用4位二進制數表示一個十進制數位,例如56D和87D的BCD碼表示為01010110 (56D) 10000111(87D)000101000011(143D)③?DAA指令將A中的二進制碼自動調整為BCD碼。④?DAA指令只能跟在ADD或ADDC加法指令后,不適用于減法。例3.7說明指令MOVA,#05H和ADDA,#08H及DAA的執行結果。解:MOVA,#05H ;05H→A ADDA,#08H ;05H+08H→A,A=0DH DA?A ;自動調整為BCD碼,A=13H4)加1減1指令(9條)注意:以上指令結果通常不影響程序狀態字寄存器PSW。例3.8分別指出指令INCR0和INC@R0的執行結果。設R0=30H,(30H)=00H。解:INCR0 ;R0+1=30H+1=31H→R0,R0=31HINC@R0 ;(R0)+1=(30H)+1→(R0),(30H)=01H, ;R0中內容不變
2.乘、除法指令1)乘法指令(1條)注意:乘法指令結果影響程序狀態字寄存器PSW的OV(積超過0FFH則置1,否則為0)和CY(總是清0)以及P標志。2)除法指令(1條)注意:①除法指令結果影響程序狀態字寄存器PSW的OV(除數為0則置1,否則為0)和CY(總是清0)以及P標志。②當除數為0時結果不能確定。3.3.4邏輯運算及移位類指令邏輯運算及移位類指令邏輯運算指令循環移位指令(4條):RL、RLC、RR、RRC邏輯與指令(6條):ANL邏輯或指令(6條):ORL邏輯異或指令(6條):XRL累加器A清0和取反指令(2條):CLR、CPL邏輯運算及移位類指令分類如圖3.10所示。圖3.10邏輯運算及移位類指令分類1.邏輯運算指令(20條)1)邏輯與指令(6條)注意:①以上指令結果通常影響程序狀態字寄存器PSW的P標志。②邏輯與指令通常用于將一個字節中的指定位清0,其它位不變。2)邏輯或指令(6條)注意:①以上指令結果通常影響程序狀態字寄存器PSW的P標志。②邏輯或指令通常用于將一個字節中的指定位置1,其余位不變。3)邏輯異或指令(6條)注意:①以上指令結果通常影響程序狀態字寄存器PSW的P標志。②?“異或”原則是相同為0,不同為1。4)累加器A清0和取反指令(2條)例3.9利用邏輯指令完成下面的操作:(1)將累加器A中的數據高4位清0,低4位不變(該操作也稱為屏蔽掉累加器A的高4位)。(2)將累加器A中的數據高4位置1,低4位不變。(3)將累加器A中的數據低4位取反,高4位不變。解:(1)?ANLA,#00001111B或者ANLA,#0FH(2)?ORLA,#11110000B或者ORLA,#0F0H(3)?XRLA,#00001111B或者XRLA,#0FH2.循環移位指令(4條)注意:執行帶進位的循環移位指令之前,必須給CY置位或清0。例3.10已知累加器A的內容為01H,請指出下列指令執行后累加器A的值各是多少。(1)?RRA (2)RLA(3)?SETBC (4)?SETBC???RRC?A ?RLC?A解:累加器A為8位寄存器,可以將其內容01H寫成8位二進制形式:000000001B,記為D7D6D5D4D3D2D1D0。(1)指令RRA執行的操作是將累加器A的內容循環右移一位,移位過程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→D7所以指令執行后累加器A的內容為80H。(2)指令RLA執行的操作是將累加器A的內容循環左移一位,移位過程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→D0所以指令執行后累加器A的內容為02H。(3)指令SETBC執行后,進位標志位CY=1;指令RRCA執行的操作是將累加器A的內容帶CY循環右移一位,移位過程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→CY、CY→D7所以指令執行后累加器A的內容為80H,CY=1。(4)指令SETBC執行后,進位標志位CY=1;指令RLCA執行的操作是將累加器A的內容帶CY循環左移一位,移位過程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→CY、CY→D0所以指令執行后累加器A的內容為03H,CY=0。3.3.5控制轉移類指令控制轉移類指令的本質是改變程序計數器PC的內容,從而改變程序的執行方向。控制轉移類指令分為:無條件轉移指令、條件轉移指令及調用和返回指令。具體分類如圖3.11所示。圖3.11控制轉移類指令分類
1.無條件轉移指令(4條)1)長轉移指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②該指令可以轉移到64KB程序存儲器中的任意位置。例3.11假定在某程序中存在如下指令:
NEXT:MOVA,#00H ;NEXT為指令的標號,代表該指令在 ;程序存儲器中存放的地址,假定該 ;指令的存儲地址為2000H
請寫出指令LJMPNEXT執行后PC的值。
解:執行指令LJMPNEXT之后,PC=2000H,即程序從NEXT標號所指向的指令開始執行。2)絕對轉移指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②該指令轉移范圍是2KB。
例3.12指令KWR:AJMPKWR1的執行結果。解:設KWR標號地址=1030H,KWR1標號地址=1100H,該指令執行后PC首先加2變為1032H,然后由1032H的高5位和1100H的低11位拼裝成新的PC值0001000100000000B,即程序從1100H開始執行。3)相對轉移指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②該指令的轉移范圍是以本指令的下一條指令為中心的-128~+127字節以內,屬于相對尋址方式。該指令的執行過程是:先執行完本指令,PC自動增2,然后再與rel相加得到新的轉移地址。在PCPC+2+rel中,第一個PC表示新的轉移地址,第二個PC表示本指令所在地址。③在實際應用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用標號來代替的,不一定寫出它們的具體地址。例3.13假定某程序中有如下指令:
SJMPNEXTNEXT: INCR1在指令SJMPNEXT中,NEXT為相對偏移量,假定該偏移值為20H,本指令所在地址為1000H,請計算執行完SJMPNEXT指令后PC的值。解:指令SJMPNEXT所在地址為1000H,執行完該指令后PC=1002H,再利用指令中的偏移量計算新的PC值:PC=1002H+20H=1022H4)間接尋址的無條件轉移指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②該指令通常用于散轉(多分支)程序。例3.14假定DPTR=2000H,指出當累加器A的內容分別為02H、04H、06H、08H時,執行指令JMP@A+DPTR后,PC的值分別為多少。解:當累加器A=02H時,執行指令JMP@A+DPTR后,PC=2000H+02H=2002H。當累加器A=04H時,執行指令JMP@A+DPTR后,PC=2000H+04H=2004H。當累加器A=06H時,執行指令JMP@A+DPTR后,PC=2000H+06H=2006H。當累加器A=08H時,執行指令JMP@A+DPTR后,PC=2000H+08H=2008H。
2.條件轉移指令(8條)1)累加器A判0指令(2條)注意:①以上指令結果不影響程序狀態字寄存器PSW。②轉移范圍與指令SJMP相同。③?PCPC+2+rel中,第一個PC表示新的轉移地址,第二個PC表示本指令所在地址。④在實際應用中,rel用標號代替,無需計算出具體的偏移量。2)比較轉移指令(4條)注意:①以上指令結果影響程序狀態字寄存器PSW的CY標志。②轉移范圍與SJMP指令相同。③?PCPC+3+rel中,第一個PC表示新的轉移地址,第二個PC表示本指令所在地址。④在實際應用中,rel用標號代替,無需計算出具體的偏移量。例3.15假定累加器A=20H,在程序中有如下兩條指令,請指出指令執行完后PC的值分別為多少。(1)?CJNEA,#20H,NEXT ;假定本指令所在地址為1000H,偏移量為20H(2)?CJNEA,#30H,NEXT1 ;假定本指令所在地址為1000H,偏移量為20H解:(1)在指令CJNEA,#20H,NEXT中,A=20H,則順序執行程序,PC=1000H+3=1003H。(2)在指令CJNEA,#30H,NEXT1中,A≠30H,則指令轉移到相應標號地址處執行,新地址的計算方法是:執行完本指令后,PC的值自動增3,然后再與偏移量相加。PC=1000H+3+20H=1023H。同時由于A<#30H,所以CY=1。注意:①DJNZ指令通常用于循環程序中控制循環次數。②轉移范圍與SJMP指令相同。③以上指令結果不影響程序狀態字寄存器PSW。3)減1非零轉移指令(2條)
3.調用和返回指令(5條)1)絕對調用指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②調用范圍與AJMP指令相同。2)長調用指令(1條)注意:①該指令結果不影響程序狀態字寄存器PSW。②調用范圍與LJMP指令相同。3)返回指令(2條)注意:該指令結果不影響程序狀態字寄存器PSW。注意:該指令結果不影響程序狀態字寄存器PSW。4)空操作(1條)3.3.6位操作類指令位操作指令的操作數是“位”,其取值只能是0或1,故又稱之為布爾操作指令。位操作指令的操作對象是片內RAM的位尋址區(即20H~2FH)和特殊功能寄存器SFR中的11個可位尋址的寄存器。片內RAM的20H~2FH共16個單元128個位,我們為這128個位的每個位均定義一個名稱:00H~7FH,稱為位地址,如表3.5所示。對于特殊功能寄存器SFR中可位尋址的寄存器的每個位,也有名稱定義,如表3.6所示。表3.5片內RAM位尋址區的位地址分布表3.6SFR中的位地址分布對于位尋址,有以下四種不同的寫法。第一種是直接地址寫法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二種是點操作符寫法,如MOVC,0D0H.2。第三種是位名稱寫法,即在指令格式中直接采用位定義名稱,這種方式只適用于可以位尋址的SFR,如MOVC,OV。第四種是專用寄存器符號與點操作符表示法,如MOVC,PSW.0。位操作類指令分為以下五組:位傳送指令(2條):MOV。位置位和位清0指令(4條):SETB、CLR。位運算指令(6條):ANL、ORL、CPL。位轉移指令(3條):JB、JNB、JBC。判CY標志指令(2條):JC、JNC。1.位傳送指令(2條)注意:位傳送指令的操作數中必須有一個是進位位C,不能在其它兩個位之間直接傳送。進位位C也稱為位累加器。2.位置位和位清0指令(4條)3.位運算指令(6條)注意:以上指令結果通常影響程序狀態字寄存器PSW的CY標志。4.位轉移指令(3條)注意:①?JBC與JB指令的區別是:前者轉移后把尋址位清0,后者只轉移而不把尋址位清0。②以上指令結果不影響程序狀態字寄存器PSW。
5.判CY標志指令(2條)注意:以上結果不影響程序狀態字寄存器PSW。例3.16用位操作指令編程計算邏輯方程P1.7=ACC.0×(B.0+P2.1)+,其中“+”表示邏輯或,“×”表示邏輯與。解:程序段如下:
MOVC,B.0 ;B.0→CORLC,P2.1 ;C或P2.1→CANLC,ACC.0 ;C與ACC.0→C,即ACC.0×(B.0+P2.1)→CORLC,/P3.2 ;C或/P3.2,即ACC.0×(B.0+P2.1)+→CMOVP1.7,C ;C→P1.7
3.3.7常用偽指令1.定位偽指令ORG格式:[標號:]ORG地址表達式功能:規定程序塊或數據塊存放的起始位置。例如:ORG1000H ;表示下面的指令MOVA, ;#20H存放于1000H開始的單元 MOVA,#20H2.定義字節數據偽指令DB格式:[標號:]DB字節數據表功能:字節數據表可以是多個字節數據、字符串或表達式,它表示將字節數據表中的數據從左到右依次存放在指定地址單元。例如:ORG1000HTAB:DB2BH,0A0H,'A',2*4;表示從1000H單元開始的地方存放數據2BH,;0A0H,41H(字母A的ASCII碼),08H
3.定義字數據偽指令DW格式:[標號:]DW字數據表功能:與DB類似,但DW定義的數據項為字,包括兩個字節,存放時高位在前,低位在后。例如: ?ORG1000HDATA:DW324AH,3CH;表示從1000H單元開始;的地方存放數據32H,;4AH,00H,3CH(3CH;以字的形式表示為;003CH)
4.定義空間偽指令DS格式:[標號:]DS表達式功能:從指定的地址開始,保留多少個存儲單元作為備用的空間。例如: ?ORG1000H BUF:DS50 TAB:DB22H;表示從1000H開始的地方預留;50(1000H~1031H)個存儲字節;空間,22H存放在1032H單元
5.符號定義偽指令EQU或=格式:符號名EQU表達式或符號名=表達式功能:將表達式的值或某個特定匯編符號定義為一個指定的符號名,只能定義單字節數據,并且必須遵循先定義后使用的原則,因此該語句通常放在源程序的開頭部分。例如: LEN=10 SUMEQU21H MOVA,#LEN;執行指令后,累加器A中的值;為0AH
6.數據賦值偽指令DATA格式:符號名DATA表達式功能:將表達式的值或某個特定匯編符號定義為一個指定的符號名,只能定義單字節數據,但可以先使用后定義,因此用它定義數據時可以放在程序末尾。例如: MOVA,#LEN
LENDATA10盡管LEN的引用在定義之前,但匯編語言系統仍可以知道A的值是0AH。7.數據地址賦值偽指令XDATA格式:符號名XDATA表達式功能:將表達式的值或某個特定匯編符號定義為一個指定的符號名,可以先使用后定義,可用于雙字節數據定義。例如: DELAYXDATA0356H LCALLDELAY ;執行指令后,程序轉到;0356H單元執行8.匯編結束偽指令END格式:[標號:]END功能:匯編語言源程序結束標志,用于整個匯編語言程序的末尾處。本章小結程序由指令組成。一臺計算機能夠提供的所有指令的集合稱為指令系統。指令有機器碼指令和助記符指令兩種形式。計算機能夠直接執行的指令是機器碼指令。尋找操作數地址的方式稱為尋址方式。MCS-51指令系統共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址等。MCS-51單片機指令系統包括111條指令,按功能可以劃分為以下5類:數據傳送指令(29條)、算術運算指令(24條)、邏輯運算指令(24條)、控制轉移指令(17條)和位操作指令(17條)。習題33.1單項選擇題。(1)單片機在與外部I/O口進行數據傳送時,將使用
指令。A.?MOVX B.?MOV C.?MOVC D.視具體I/O口器件而定(2)在寄存器間接尋址方式中,Ri是指
。A.?R0~R7 B.?R0~R1 C.操作碼 D.操作數地址(3)下列指令中,影響堆棧指針的指令是
。A.?LJMPaddr16B.?DJNZRn,relC.?LCALLaddr16D.?MOVXA,@Ri(4)?MCS-51單片機有七種尋址方式,其中:MOVA,direct指令的源操作數屬于
尋址方式。A.間接 B.變址 C.相對 D.直接(5)指令JZNEXT的作用是
。A.當CY標志為0時跳轉到NEXT語句執行B.當累加器A內容不為全0時跳轉到NEXT語句執行C.當累加器A內容為全0時跳轉到NEXT語句執行D.當CY標志為1時跳轉到NEXT語句執行(6)將外部數據存儲單元的內容傳送到累加器A中的指令是
。A.MOVXA,@A+DPTRB.?MOVA,@R0C.MOVCA,@A+DPTRD.?MOVXA,@DPTR(7)在指令MOV30H,#55H中,30H是
。A.指令的操作碼 B.操作數 C.操作數的目的地址 D.機器碼(8)在下列指令中,屬判位轉移的指令是
。A.?AJMPaddr11 B.?CJNEA,direct,relC.?DJNZRn,rel D.?JNCrel(9)?8031有4組工作寄存器區,將當前工作寄存器設置為第2組應使用的指令是
。A.?SETBRS0和CLRRS1 B.?SETBRS0和SETBRS1C.?CLRRS0和CLRRS1 D.?CLRRS0和SETBRS1(10)?MCS-51單片機中,下一條將要執行的指令地址存放在
中。A.?SP B.?DPTR C.?PCD.?PSW(11)當執行DAA指令時,CPU將根據
的狀態自動調整,使ACC的值為正確的BCD碼。A.?CY B.?MOV20H,R4C.?C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中數學九年級下冊統編教案 7.2正弦、正弦(第1課時)
- 鄉鎮事業編試題及答案
- 物業暗訪試題及答案
- 廣西名校聯盟2024-2025學年高三下學期考前押題聯合考試英語試卷(原卷版)
- 安徽省亳州市2025屆九年級下學期中考三模數學試卷(含詳解)
- 2025年湖北省武漢市中考數學模擬試卷(含部分答案)
- 2025合同范本家政聯盟合作協議書
- 2025年中國蘇打水飲水系統行業市場前景預測及投資價值評估分析報告
- Pimonidazole-hydrochloride-Standard-生命科學試劑-MCE
- Mc-PEG4-Val-Ala-PAB-Exatecan-生命科學試劑-MCE
- 有源醫療器械現場檢查
- 電力設備交接和預防性試驗規程
- 品管圈PDCA改善案例-降低住院患者跌倒發生率
- 銀行催收實習心得
- 2024年高考政治總復習必修三《政治與法治》 綜合測試題及答案
- 2025年注冊安全工程師考試道路運輸和其他安全(初級)安全生產實務試題及解答參考
- 2025年湖南省高中學業水平合格性考試數學試卷(含答案)
- 氣壓傳動課件 項目二任務二 壓力控制回路的組裝與調試
- 《環境保護產品技術要求 工業廢氣吸附凈化裝置》HJT 386-2007
- 中國文化概況chapter-1
- 事業單位公開招聘報名表
評論
0/150
提交評論