第3章指令系統(tǒng)_第1頁
第3章指令系統(tǒng)_第2頁
第3章指令系統(tǒng)_第3頁
第3章指令系統(tǒng)_第4頁
第3章指令系統(tǒng)_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 AT89S51單片機(jī)的 指令系統(tǒng)12AT89S51AT89S51單片機(jī)單片機(jī)使用使用MCS-51MCS-51指令系統(tǒng)指令系統(tǒng)。n介紹指令系統(tǒng)介紹指令系統(tǒng)尋址方式尋址方式n對對111111條條基本指令基本指令按功能分類詳細(xì)講解按功能分類詳細(xì)講解。掌握匯編語言指令是程序設(shè)計(jì)的掌握匯編語言指令是程序設(shè)計(jì)的基礎(chǔ)基礎(chǔ)。內(nèi)容概要內(nèi)容概要3.1 3.1 指令系統(tǒng)概述指令系統(tǒng)概述1.1.特性:特性: 1 1)5151單片機(jī)的指令集為單片機(jī)的指令集為復(fù)雜指令集復(fù)雜指令集。 2 2)AT89S51AT89S51在硬件結(jié)構(gòu)中有一個(gè)在硬件結(jié)構(gòu)中有一個(gè)位處理機(jī)位處理機(jī),一個(gè)處理一個(gè)處理位變位變 量量的的指令子集

2、指令子集。2.2.分類分類 1 1)按按所占字節(jié)分所占字節(jié)分,分,分三種三種: (1 1)單字節(jié)指令)單字節(jié)指令4949條;條; (2 2)雙字節(jié)指令)雙字節(jié)指令4545條;條; (3 3)三字節(jié)指令)三字節(jié)指令1717條。條。 2) 2)執(zhí)行時(shí)間來分執(zhí)行時(shí)間來分,分三種:,分三種: (1 1)1 1個(gè)個(gè)機(jī)器周期(機(jī)器周期(1212個(gè)時(shí)鐘振蕩周期)的指令個(gè)時(shí)鐘振蕩周期)的指令6464條條; (2 2)2 2個(gè)個(gè)機(jī)器周期指令機(jī)器周期指令4545條條; (3 3)4 4個(gè)個(gè)機(jī)器周期機(jī)器周期乘、除指令乘、除指令。33.2 3.2 指令格式指令格式 1.1.定義定義 指令格式指令格式:指令的表示方法。

3、指令的表示方法。2.2.指令的組成指令的組成 指令通常由指令通常由兩部分兩部分組成:組成:操作碼操作碼和和操作數(shù)操作數(shù)。 操作碼操作碼指令進(jìn)行什么指令進(jìn)行什么操作操作。 操作數(shù)操作數(shù)指令操作的指令操作的對象對象。 注意:注意:操作數(shù)操作數(shù)可能是可能是具體數(shù)據(jù)具體數(shù)據(jù),也可能是指出到哪里,也可能是指出到哪里 取得數(shù)據(jù)的取得數(shù)據(jù)的地址或符號地址或符號。43.3.不同長度指令的格式不同長度指令的格式(1 1)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。 MOV AMOV A,RnRn RnRn A A E8HE8H(2 2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一

4、個(gè)字節(jié)是操作數(shù))雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。 MOV AMOV A,#data#data MOV A MOV A,direct direct E5H ,directE5H ,direct (3 3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié))三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。 5data A74H,dataMOV direct1,MOV direct1,direct2*direct2 *direct185H,direct1,85H,direct1,direct2*direct1 A63.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式1.1.概念:概念: 尋址方

5、式尋址方式在指令中說明操作數(shù)所在位置的方法在指令中說明操作數(shù)所在位置的方法??刂破髯x入指令控制器讀入指令解析指令解析指令取操作數(shù)取操作數(shù)執(zhí)行執(zhí)行存運(yùn)算結(jié)果存運(yùn)算結(jié)果操作數(shù)在哪操作數(shù)在哪里取呢?里取呢?操作數(shù)存到操作數(shù)存到哪里呢?哪里呢?72. 概述概述 總的來說,在指令中以以下四種方式給出操作數(shù)的信息:總的來說,在指令中以以下四種方式給出操作數(shù)的信息: 1)把操作數(shù)直接放在到指令中:告訴)把操作數(shù)直接放在到指令中:告訴CPU,操作數(shù)就在指令中,操作數(shù)就在指令中, 無需到其他地方尋找;無需到其他地方尋找; 2)把裝有操作數(shù)的寄存器放在指令中:告訴)把裝有操作數(shù)的寄存器放在指令中:告訴CPU,操作

6、數(shù)在,操作數(shù)在 某個(gè)寄存器中,去寄存器中取就可以;某個(gè)寄存器中,去寄存器中取就可以; 3)把操作數(shù)的地址直接放在指令中:告訴)把操作數(shù)的地址直接放在指令中:告訴CPU, 操作數(shù)的地址就在操作數(shù)的地址就在 指令中,按該地址取數(shù)就可以;指令中,按該地址取數(shù)就可以; 4)把裝有操作數(shù)地址的寄存器放在指令中:告訴)把裝有操作數(shù)地址的寄存器放在指令中:告訴CPU, 操作數(shù)的地址操作數(shù)的地址 在某個(gè)寄存器中,按該地址取數(shù)就可以;在某個(gè)寄存器中,按該地址取數(shù)就可以; 對以上四種方式,對以上四種方式,稍加變化,稍加變化,再配合以再配合以不同的指令,不同的指令,最終形成最終形成51單單片機(jī)的片機(jī)的7種尋址方式。

7、種尋址方式。3.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式3.3.尋址方式介紹尋址方式介紹1 1)學(xué)習(xí)內(nèi)容)學(xué)習(xí)內(nèi)容 每一種尋址方式的書寫語法;每一種尋址方式的書寫語法; 每一種尋址方式的尋址范圍(每一種尋址方式的尋址范圍(片內(nèi)片內(nèi)/外外ROM 、片內(nèi)、片內(nèi)/外外RAM、 SFR、位訪問區(qū)、片外設(shè)備寄存器、位訪問區(qū)、片外設(shè)備寄存器)。)。 注意:注意:每一種尋址方式,都有特定的尋址范圍,不可能是每一種每一種尋址方式,都有特定的尋址范圍,不可能是每一種 尋址方式都能訪問到每一個(gè)地址空間;尋址方式都能訪問到每一個(gè)地址空間; 同一種尋址方式,配合以不同的指令,尋址范圍可能不同。同一種尋址方式,配合以不

8、同的指令,尋址范圍可能不同。 2 2)寄存器尋址方式寄存器尋址方式 含義:含義:指令中的操作數(shù)指令中的操作數(shù)放在放在某一寄存器某一寄存器中,中,CPUCPU應(yīng)在指定的寄存器應(yīng)在指定的寄存器 中去讀取中去讀取 寫入操作數(shù)寫入操作數(shù)。 例如:例如:MOVMOV A A,R Rn n ;( (R Rn n) )A A,n n =0=07 789 語法:語法:將寄存器名稱寫在指令中;將寄存器名稱寫在指令中; 尋址范圍尋址范圍: A B R0-R7 PC DPTR C(位位) 3)直接尋址方式直接尋址方式 含義:含義:指令直接給出操作數(shù)的地址指令直接給出操作數(shù)的地址(8位)。位)。 一般性說明中直接尋址

9、方式的一般性說明中直接尋址方式的8位位地址用地址用“direct” 表示。表示。 語法:語法:直接把表示地址的直接把表示地址的8位二進(jìn)制數(shù)位二進(jìn)制數(shù)寫在指令中。寫在指令中。 例:例: MOVA,direct “direct”就是操作數(shù)的單元地址就是操作數(shù)的單元地址。 例:例: MOVA,40H 表示把表示把內(nèi)部內(nèi)部RAM 40H單元的內(nèi)容傳送到單元的內(nèi)容傳送到A。 源操作數(shù)(右邊的操作數(shù))采用的是源操作數(shù)(右邊的操作數(shù))采用的是直接尋址方式直接尋址方式。 目的操作數(shù)目的操作數(shù)(左左邊的操作數(shù))采用的邊的操作數(shù))采用的是是寄存器寄存器尋址方式尋址方式。 例例:MOV 42HMOV 42H,62H

10、62H 把把片內(nèi)片內(nèi)RAMRAM中中62H62H單元的內(nèi)容送到單元的內(nèi)容送到片內(nèi)片內(nèi)RAMRAM中的中的42H42H單元中單元中。 尋址范圍:尋址范圍:所有所有SFR.SFR.訪訪問片內(nèi)所有問片內(nèi)所有SFRSFR的的唯一唯一尋址方式尋址方式。 片內(nèi)片內(nèi)RAM.RAM. 4) 4) 寄存器間接尋址方式寄存器間接尋址方式 含義:含義:操作數(shù)地址操作數(shù)地址在指定的在指定的寄存器中,寄存器中,要要先從寄存器中找先從寄存器中找 到操作數(shù)的地址,再按該地址找到操作數(shù)。到操作數(shù)的地址,再按該地址找到操作數(shù)。 語法:語法:在寄存器名稱前面加在寄存器名稱前面加前綴標(biāo)志前綴標(biāo)志“ ”。 以以區(qū)區(qū)分分寄存器尋址和寄

11、存器間接尋址寄存器尋址和寄存器間接尋址。 能用于該尋址方式的寄存器只有能用于該尋址方式的寄存器只有R0R0、R1R1、DPTR.DPTR. 例:例: MOV AMOV A, R Ri i ;i i=0=0或或1 1 若若R Ri i的內(nèi)容為的內(nèi)容為40H40H,即把,即把內(nèi)部內(nèi)部RAM 40HRAM 40H地址單元中的地址單元中的 內(nèi)容傳送給內(nèi)容傳送給A A。1011尋址范圍:尋址范圍: 當(dāng)寄存器間接尋址用于MOVX指令時(shí),訪問的是片外數(shù)據(jù) 存儲(chǔ)器空間; 用于其它指令時(shí),訪問的是片內(nèi)數(shù)據(jù)存儲(chǔ)器單元。 DPTR只能用于對片外數(shù)據(jù)存儲(chǔ)器的寄存器間接尋址。5 5)立即數(shù)尋址方式立即數(shù)尋址方式 含義:

12、含義:操作數(shù)直接包含在指令中,操作數(shù)直接包含在指令中,也稱也稱立即數(shù)立即數(shù)。 語法:語法: 在操作數(shù)前加前綴標(biāo)志在操作數(shù)前加前綴標(biāo)志“# #”。 可可與直接尋址指令中的直接地址加以區(qū)別,與直接尋址指令中的直接地址加以區(qū)別, 例如:例如: MOV AMOV A,#40H#40H 將將40H40H放入累加器放入累加器A A中中 尋址范圍:尋址范圍:程序存儲(chǔ)器中的常數(shù)。程序存儲(chǔ)器中的常數(shù)。6 6)基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式 含義:含義:以以DPTRDPTR或或PCPC作為作為基址寄存器基址寄存器,以累加器,以累加器A A作為作為變址寄存器變址寄存器 ,以兩者

13、內(nèi)容相加形成的,以兩者內(nèi)容相加形成的1616位地址作為目的地址進(jìn)行尋位地址作為目的地址進(jìn)行尋 址。址。 語法:語法:使用使用本尋址方式的本尋址方式的指令指令只只有有3 3條條: MOVCMOVC A A,A+DPTRA+DPTR MOVC A MOVC A, A+PC, A+PC JMP JMP A+DPTRA+DPTR 例:例: MOVCMOVCA A,A+DPTRA+DPTR 其中,其中,(A A)=05H=05H,(DPTRDPTR)=0400H=0400H,指令執(zhí)行結(jié),指令執(zhí)行結(jié) 果是把果是把程序存儲(chǔ)器程序存儲(chǔ)器0405H0405H單元的內(nèi)容傳送給單元的內(nèi)容傳送給A A。1213 尋址

14、范圍:尋址范圍:前兩條指令適用于讀前兩條指令適用于讀程序存儲(chǔ)器程序存儲(chǔ)器中中固定固定的數(shù)據(jù)。的數(shù)據(jù)。 第第3 3條為條為散轉(zhuǎn)指令散轉(zhuǎn)指令,A A中內(nèi)容為程序運(yùn)行后的動(dòng)態(tài)結(jié)果中內(nèi)容為程序運(yùn)行后的動(dòng)態(tài)結(jié)果 ,可根據(jù),可根據(jù)A A中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。7 7)相對尋址方式相對尋址方式 含義:含義:指令指令(機(jī)器碼)(機(jī)器碼)中出現(xiàn)的是程序要跳轉(zhuǎn)到的指令的位置和中出現(xiàn)的是程序要跳轉(zhuǎn)到的指令的位置和 程序當(dāng)前位置之間的字節(jié)數(shù)。程序當(dāng)前位置之間的字節(jié)數(shù)。 語法:語法:直接在指令中寫出程序要跳轉(zhuǎn)到的直接在指令中寫出程序要跳轉(zhuǎn)到的指令的地址指令的地址(

15、以標(biāo)號(以標(biāo)號 形式給出)。形式給出)。 該尋址方式是專門用于跳轉(zhuǎn)指令的,偏移量該尋址方式是專門用于跳轉(zhuǎn)指令的,偏移量由匯編程序自動(dòng)計(jì)由匯編程序自動(dòng)計(jì)算和填入算和填入。 例:例: S SJMP LOOPJMP LOOP “LOOP”LOOP” 為目的地址標(biāo)號。為目的地址標(biāo)號。 注意:注意: 偏移量偏移量relrel是帶符號是帶符號8 8位二進(jìn)制補(bǔ)碼數(shù)位二進(jìn)制補(bǔ)碼數(shù),128128+127+127 。由匯編器計(jì)算和填入。按如下公式計(jì)算:由匯編器計(jì)算和填入。按如下公式計(jì)算:14Rel=目的地址目的地址-轉(zhuǎn)移指令所在的地址轉(zhuǎn)移指令所在的地址-轉(zhuǎn)移指令字節(jié)數(shù)轉(zhuǎn)移指令字節(jié)數(shù)標(biāo)號標(biāo)號1,2,3尋址范圍:尋址

16、范圍:程序存儲(chǔ)器。程序存儲(chǔ)器。7 7位尋址方式位尋址方式 含義:含義:對內(nèi)部對內(nèi)部RAMRAM和特殊功能寄存器具有位尋址功能的某位和特殊功能寄存器具有位尋址功能的某位 內(nèi)容進(jìn)行置內(nèi)容進(jìn)行置1 1和清和清0 0操作。操作。 語法:語法:位地址一般以位地址一般以直接位地址直接位地址給出,給出,一般性說明中一般性說明中位地位地 址符號為址符號為“bitbit”。 例:例:MOV CMOV C,bitbit 其具體指令:其具體指令: MOV CMOV C,40H40H 把位地址為把位地址為40H40H單元單元的值送到位的值送到位累加器累加器C C。 尋址范圍:尋址范圍: 內(nèi)部內(nèi)部RAMRAM和和SFR

17、SFR中可為尋址的區(qū)域。中可為尋址的區(qū)域。15問題:問題:當(dāng)一條指令給定后,如何來確定該當(dāng)一條指令給定后,如何來確定該指令的指令的尋址方式?尋址方式? 例如例如: : MOV AMOV A,#40H#40H,屬于立即數(shù)尋址還是寄存器尋,屬于立即數(shù)尋址還是寄存器尋 址?址? 要看以哪個(gè)操作數(shù)要看以哪個(gè)操作數(shù)作為參照系作為參照系。 操作數(shù)分為操作數(shù)分為源操作數(shù)源操作數(shù)和和目的操作數(shù)目的操作數(shù)。對于。對于 源操作數(shù)源操作數(shù)“#40H#40H”來說,是來說,是“立即數(shù)尋址立即數(shù)尋址”方式方式, 但對但對目的操作數(shù)目的操作數(shù)“A A”來說,是屬于來說,是屬于“寄存器尋址寄存器尋址” 方式。方式。 一般而

18、言,一般而言,指令的指令的尋址方式指的是尋址方式指的是源操作數(shù)源操作數(shù), 以此例為立即數(shù)尋址方式。以此例為立即數(shù)尋址方式。1617序號序號尋址方式尋址方式尋址空間尋址空間1 1寄存器尋址寄存器尋址R0R0R7R7、A A、B B、C(C(位位) )、DPTRDPTR、PCPC2 2直接尋址直接尋址內(nèi)部內(nèi)部128128字節(jié)字節(jié)RAMRAM、特殊功能寄存器、特殊功能寄存器3 3寄存器間接尋址寄存器間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器4 4立即數(shù)尋址立即數(shù)尋址程序存儲(chǔ)器中的立即數(shù)程序存儲(chǔ)器中的立即數(shù)5 5基址寄存器加變址寄存器間基址寄存器加變址寄存器間接尋址接尋址讀程

19、序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)讀程序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)6 6相對尋址相對尋址程序存儲(chǔ)器相對轉(zhuǎn)移程序存儲(chǔ)器相對轉(zhuǎn)移7 7位尋址位尋址內(nèi)部內(nèi)部RAMRAM中的可尋址位、中的可尋址位、SFRSFR中的可中的可尋址位尋址位表表3-1 3-1 7 7種尋址方式及其尋址空間種尋址方式及其尋址空間3.4 AT89S513.4 AT89S51指令系統(tǒng)分類介紹指令系統(tǒng)分類介紹共共111111條條指令,按功能分為指令,按功能分為五類五類:(1 1)數(shù)據(jù)傳送類()數(shù)據(jù)傳送類(2828條)條)(2 2)算術(shù)運(yùn)算類()算術(shù)運(yùn)算類(2424條)條)(3 3)邏輯操作類()邏輯操作類(2525條)條)(4 4)控制轉(zhuǎn)移類

20、()控制轉(zhuǎn)移類(1717條)條)(5 5)位操作類()位操作類(1717條)條)先簡單介紹指令先簡單介紹指令用到用到的符號。的符號。Rn 當(dāng)前寄存器區(qū)的當(dāng)前寄存器區(qū)的8個(gè)工作寄存器個(gè)工作寄存器R0R7(n=07)。Ri 當(dāng)前寄存器區(qū)中作為當(dāng)前寄存器區(qū)中作為間接尋址寄存器間接尋址寄存器的的2個(gè)寄存器個(gè)寄存器R0、R1(i=0,1)。1819directdirect直接地址,即內(nèi)部RAM單元或SFR的地址。#data#data指令中的立即數(shù)。#data1#data16 6指令中的立即數(shù)。relrel偏移量,8位的補(bǔ)碼數(shù)。DPTRDPTR數(shù)據(jù)指針,可用作16位數(shù)據(jù)存儲(chǔ)器單元地址的寄存器。bitbit

21、內(nèi)部RAM或特殊功能寄存器中的直接尋址位的地址。C C或或CyCy進(jìn)位標(biāo)志位或位處理機(jī)中的位累加器。addr11addr1111位目的地址。addr16addr1616位目的地址。 間接尋址寄存器前綴,如Ri,A+DPTR。( () )表示地址單元或寄存器中的內(nèi)容。()表示以單元或寄存器中的內(nèi)容作為地址間接尋址單元的內(nèi)容。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。20四種基本形式: 助記符助記符 操作數(shù)1 ,操作數(shù)2 ,操作數(shù)3 助記符助記符 操作數(shù)1 ,操作數(shù)2 助記符助記符 操作數(shù)1 助記符助記符 助記符:由英文字母組成,表示指令的基本功能助記符:由英文字母組成,表示指令的基本功能 操作數(shù):指

22、令需要處理的數(shù)據(jù)。按七種不同的尋址方式操作數(shù):指令需要處理的數(shù)據(jù)。按七種不同的尋址方式 表達(dá)。表達(dá)。 注意:注意: 相同的助記符,其后的操作數(shù)采用的尋址方式相同的助記符,其后的操作數(shù)采用的尋址方式 不同,不同, 所生成的機(jī)器代碼是不同的。所生成的機(jī)器代碼是不同的。 211.助記符的基本書寫格式;2.指令的基本功能;3.操作數(shù)的尋址方式;4.指令的尋址范圍;5.指令執(zhí)行后對相關(guān)標(biāo)志位的影響;6.了解指令生成的機(jī)器碼的大致情況;7.運(yùn)算結(jié)果是否保存,保存在哪里。22概述概述 數(shù)據(jù)傳送類指令,按照基本功能的不同,包含如下幾類:數(shù)據(jù)傳送類指令,按照基本功能的不同,包含如下幾類: 一般數(shù)據(jù)傳送類指令一般

23、數(shù)據(jù)傳送類指令 MOV 堆棧操作類指令堆棧操作類指令 PUSH POP 外部數(shù)據(jù)傳送指令外部數(shù)據(jù)傳送指令 MOVX 查表指令查表指令 MOVC 字節(jié)交換指令字節(jié)交換指令 XCH 半字節(jié)交換指令半字節(jié)交換指令 XCHD 3.4.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3.4.1 3.4.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 1.1.一般數(shù)據(jù)傳送類指令一般數(shù)據(jù)傳送類指令 通用格式通用格式: MOV MOV , 基本功能:基本功能: 把把源操作數(shù)源操作數(shù)傳送傳送到到目的操作數(shù)目的操作數(shù)。指令執(zhí)行。指令執(zhí)行之之后,源后,源 操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以

24、數(shù) 據(jù)傳送類操作屬據(jù)傳送類操作屬“復(fù)制復(fù)制”性質(zhì),性質(zhì),而不是而不是“搬家搬家”。 指令對標(biāo)志位的影響:指令對標(biāo)志位的影響: 不影響標(biāo)志位不影響標(biāo)志位: : CyCy、AcAc和和OVOV; 影響的標(biāo)志位:影響的標(biāo)志位:奇偶標(biāo)志位奇偶標(biāo)志位P P。231)以累加器為目的操作數(shù)的指令以累加器為目的操作數(shù)的指令 MOVA,Rn; (Rn)A,n =07 E8HEFH MOVA, R Ri i ; (R Ri i)A i =0,1 E6HE7H MOVA,direct ; (direct)A E5H,direct MOVA,#data ; #dataA 74H,data 把源操作數(shù)內(nèi)容送累加器把源操

25、作數(shù)內(nèi)容送累加器A,源操作數(shù)源操作數(shù)有寄存器尋址、直接有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式尋址、間接尋址和立即數(shù)尋址等方式. 例例 (R6)=50H (R0)=30H (30H)=01H (70H) =FFHMOVA,R6;MOVA,R0;MOVA,70H ;MOVA,#78H;24(R6)A,寄存器尋址,寄存器尋址 (A)=50H(R0)A,間接尋址,間接尋址 (A)= 01H(70H)A,直接尋址,直接尋址 (A)=FFH78HA,立即數(shù)尋址,立即數(shù)尋址 (A)=78H 2 2)以以RnRn為目的操作數(shù)的指令為目的操作數(shù)的指令MOV MOV Rn ,A A ;(A)(A)Rn

26、 ,n n =0=07 7MOV MOV Rn ,direct direct ;(direct)(direct)Rn ,n n =0=07 7MOV MOV Rn ,#data#data;#data#dataRn ,n n =0=07 7把源操作數(shù)送入當(dāng)前寄存器區(qū)的把源操作數(shù)送入當(dāng)前寄存器區(qū)的R0R0R7R7中的某一寄存器。中的某一寄存器。3 3)以直接地址以直接地址directdirect為目的操作數(shù)的指令為目的操作數(shù)的指令MOV directMOV direct,A A ; (A)(A)directdirectMOV directMOV direct,Rn ; ( (Rn) )direct

27、direct,n n =0=07 7MOV direct1MOV direct1,direct2 direct2 ;(direct2)(direct2)direct1direct1MOV directMOV direct, Ri ; (Ri)directdirect,i i =0=0,1 1MOV directMOV direct,#data #data ; #data#datadirectdirect25 把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。directdirect指指的是內(nèi)部的是內(nèi)部RAMRAM或或SFRSFR地址。地址。4 4)以寄存器間接地址為目

28、的操作數(shù)的指令以寄存器間接地址為目的操作數(shù)的指令MOVMOV R Ri i,A A;(A)(A)(R Ri i), i i=0=0,1 1MOVMOV R Ri i,direct direct ;(direct)(direct)(R Ri i),i i=0=0,1 1MOVMOV R Ri i,#data #data ;#data#data(R Ri i), i i=0=0,1 1功能是把源操作數(shù)內(nèi)容送入功能是把源操作數(shù)內(nèi)容送入R0R0或或R1R1指定的存儲(chǔ)單元中。指定的存儲(chǔ)單元中。5 5)1616位數(shù)傳送指令位數(shù)傳送指令MOVMOVDPTRDPTR,#data16#data16; #data

29、16#data16DPTR DPTR 功能是把功能是把1616位立即數(shù)送入位立即數(shù)送入DPTRDPTR,用來設(shè)置數(shù)據(jù)存儲(chǔ)器,用來設(shè)置數(shù)據(jù)存儲(chǔ)器的地址指針。的地址指針。2627 1 1)AT89S51AT89S51有兩個(gè)有兩個(gè)DPTRDPTR,通過設(shè)置,通過設(shè)置特殊功能寄存器特殊功能寄存器 AUXR1AUXR1中的中的DPSDPS位位來選擇。當(dāng)來選擇。當(dāng)DPS=1DPS=1,則指令中的,則指令中的 DPTRDPTR即為即為DPTR1DPTR1,DPTR0DPTR0被屏蔽,反之亦然。被屏蔽,反之亦然。 2 2)DPTRDPTR為為1616位的數(shù)據(jù)指針,分為位的數(shù)據(jù)指針,分為DPHDPH和和DPLD

30、PL。操作十操作十 分靈活方便。分靈活方便。設(shè)有兩個(gè)設(shè)有兩個(gè)DPTRDPTR后,就可避免頻繁的后,就可避免頻繁的 出入堆棧操作出入堆棧操作。 問題:指令中只能出現(xiàn)問題:指令中只能出現(xiàn)DPTR,但如果要把它作為兩個(gè)八位的寄存器,但如果要把它作為兩個(gè)八位的寄存器 使用,該如何做呢?使用,該如何做呢?2. 2. 堆棧操作指令堆棧操作指令 堆棧的概念:堆棧的概念: 內(nèi)部內(nèi)部RAMRAM中設(shè)定一個(gè)中設(shè)定一個(gè)后進(jìn)先出后進(jìn)先出,向上生長,向上生長的區(qū)域,稱的區(qū)域,稱為為堆棧堆棧。 在特殊功能寄存器中有一個(gè)在特殊功能寄存器中有一個(gè)堆棧指針堆棧指針SPSP,指,指示示堆棧的棧頂位置。堆棧的棧頂位置。 堆棧操作有

31、進(jìn)棧和出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆堆棧操作有進(jìn)棧和出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。棧操作指令。280SP123進(jìn)棧進(jìn)棧0123出出棧棧SPSPSPSPSPSPSP(1)進(jìn)棧指令)進(jìn)棧指令PUSH direct 首先首先將將堆堆棧指針棧指針SP加加1,然后把,然后把direct中的內(nèi)容送到中的內(nèi)容送到SP指示的內(nèi)部指示的內(nèi)部RAM單元中。單元中。 例例:當(dāng)當(dāng)(SP)=60H,(A)=30H,(B)=70H時(shí),執(zhí)行下列指令時(shí),執(zhí)行下列指令 PUSH Acc 注意:注意:Acc在這里是直接尋址,在這里是直接尋址,機(jī)器碼:機(jī)器碼:C0H,E0H 功能:功能:(SP)+1

32、=61HSP,(A)61H 結(jié)果:結(jié)果:SP=61H, (61H)=30H PUSH B 注意:注意:B在這里是直接尋址,在這里是直接尋址,機(jī)器碼:機(jī)器碼:C0H,F0H 功能:功能:(SP)+1=62HSP,(B)62H 結(jié)果:結(jié)果:SP=62H, (62H)=70H29(2)出棧指令)出棧指令POPdirect 將將SP指示的棧頂單元指示的棧頂單元的的內(nèi)容送入內(nèi)容送入direct字節(jié)字節(jié)中中,SP減減1。 例:例:當(dāng)當(dāng)(SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H(61H)=30H時(shí),執(zhí)行指令時(shí),執(zhí)行指令 POP DPH POP DPH ;(SP

33、)(SP)DPHDPH,(SP)-1(SP)-1SPSP 結(jié)果:結(jié)果: (DPH)=(62H)=70H SP=61H(DPH)=(62H)=70H SP=61H POP DPL POP DPL;(SP)(SP)DPLDPL,(SP)-1(SP)-1SPSP 結(jié)果結(jié)果: : ( (DPlDPl)=(61H)=30H)=(61H)=30H,(SP)=60H(SP)=60H。3 3累加器累加器A A與外部數(shù)據(jù)存儲(chǔ)器與外部數(shù)據(jù)存儲(chǔ)器RAM/IORAM/IO傳送指令傳送指令 MOVX MOVX A A,DPTR DPTR ;(DPTR)(DPTR)A A,讀讀外部外部RAM/IORAM/IO MOVX

34、MOVX A A, R Ri i ;(R Ri i)A A,讀讀外部外部RAM/IORAM/IO MOVX DPTR MOVX DPTR,A A ;(A)(A)(DPTR)(DPTR),寫寫外部外部RAM/IO RAM/IO MOVX MOVX R Ri i ,A A ;(A)(A)(R Ri i),寫寫外部外部RAM/IORAM/IO30 說明說明: : MOV MOV的后面加的后面加“X X”,表示訪問的是片外,表示訪問的是片外RAMRAM或或I/OI/O口,口,在執(zhí)行前兩條指令,在執(zhí)行前兩條指令, (P3.7P3.7)有效;后兩條指令,有效;后兩條指令, (P3.6P3.6)有效。有效。

35、 尋址范圍尋址范圍: : 采用采用1616位的位的 DPTRDPTR間接尋址間接尋址,可尋址整個(gè),可尋址整個(gè)64KB64KB片外數(shù)據(jù)片外數(shù)據(jù)存儲(chǔ)器空間,高存儲(chǔ)器空間,高8 8位地址位地址(DPHDPH)由由P2P2口輸出,低口輸出,低8 8位地址位地址(DPLDPL)由由P0P0口輸出??谳敵?。 采用采用R Ri i(i i =0=0,1 1)進(jìn)行間接尋址,)進(jìn)行間接尋址,可尋址片外可尋址片外256256個(gè)單個(gè)單元的數(shù)據(jù)存儲(chǔ)器。元的數(shù)據(jù)存儲(chǔ)器。8 8位地址位地址(RiRi)由由P0P0口輸出,鎖存在地址口輸出,鎖存在地址鎖存器中,然后鎖存器中,然后P0P0口再作為口再作為8 8位數(shù)據(jù)口。位數(shù)據(jù)

36、口。31RDWR4 4查表指令查表指令 特性:特性: 共共兩條兩條,僅有的僅有的兩條兩條讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令。 傳送傳送為為單向,從程序存儲(chǔ)器中讀出數(shù)據(jù)單向,從程序存儲(chǔ)器中讀出數(shù)據(jù)到到A中中; 兩條查表指令兩條查表指令的的均采用均采用基址寄存器加變址寄存器基址寄存器加變址寄存器 間接尋址間接尋址方式。方式。3233(1)MOVC A,A+PC 以以PC作為基址寄存器作為基址寄存器,A為變址寄存器為變址寄存器,A的內(nèi)容的內(nèi)容(無無符號數(shù)符號數(shù))和和PC的當(dāng)前值(的當(dāng)前值(下一條指令的起始地址下一條指令的起始地址)相加后)相加后得到一個(gè)得到一個(gè)新的新的16位地址

37、位地址,把該地址的內(nèi)容送到,把該地址的內(nèi)容送到A。 例如:例如:當(dāng)當(dāng) (A)=30H時(shí),執(zhí)行地址時(shí),執(zhí)行地址1000H處的處的查表查表指令指令: 1000H: MOVCA,A+PC該指令占用一個(gè)字節(jié),下一條指令的地址為該指令占用一個(gè)字節(jié),下一條指令的地址為1001H(PC當(dāng)前值當(dāng)前值)(PC)=1001H再加上再加上A中的中的30H,得得1031H,結(jié)果結(jié)果把把程序存儲(chǔ)器中程序存儲(chǔ)器中1031H的內(nèi)容送入累加器的內(nèi)容送入累加器A。34優(yōu)點(diǎn)優(yōu)點(diǎn):不改變特殊功能寄存器及不改變特殊功能寄存器及PC的狀態(tài),根據(jù)的狀態(tài),根據(jù)A的內(nèi)容就的內(nèi)容就 可以取出表格中的常數(shù)??梢匀〕霰砀裰械某?shù)。缺點(diǎn)缺點(diǎn):1)表

38、格只能存放在表格只能存放在該條查表指令所在地址的該條查表指令所在地址的+256個(gè)個(gè) 單元之內(nèi)單元之內(nèi),表格大小受到限制,表格大小受到限制; 2)且表格只能被一段程序所用。且表格只能被一段程序所用。(2)MOVC A,A+DPTR DPTR為基址寄存器,為基址寄存器,A的內(nèi)容的內(nèi)容(無符號數(shù)無符號數(shù))和和DPTR的內(nèi)容相的內(nèi)容相加得到一個(gè)加得到一個(gè)16位地址,把由該地址指定的程序存儲(chǔ)器單元的內(nèi)容位地址,把由該地址指定的程序存儲(chǔ)器單元的內(nèi)容送到累加器送到累加器A。 例:例:(DPTR)=8100H,(A)=40H,執(zhí)行指令,執(zhí)行指令 MOVC A,A+DPTR 將程序存儲(chǔ)器中將程序存儲(chǔ)器中8140

39、H單元單元內(nèi)容送入內(nèi)容送入A中。中。 應(yīng)用本指令,應(yīng)用本指令,表格的大小和位置可以在表格的大小和位置可以在64KB程序存儲(chǔ)器程序存儲(chǔ)器 空間中任意安排空間中任意安排。 一個(gè)表格一個(gè)表格可以為各個(gè)程序塊公用可以為各個(gè)程序塊公用。 執(zhí)行上述兩條指令時(shí),單片機(jī)的執(zhí)行上述兩條指令時(shí),單片機(jī)的 引腳信號(程序引腳信號(程序 存儲(chǔ)器讀)有效。存儲(chǔ)器讀)有效。 35PSEN5字節(jié)交換指令字節(jié)交換指令 XCH A,Rn ; (A) ( Rn),n =07 XCH A,direct ; (A) ( direct) XCH A,Ri ; (A) ( Ri),i=0,1 功能功能:將累加器將累加器A的內(nèi)容和源操作數(shù)

40、的內(nèi)容的內(nèi)容和源操作數(shù)的內(nèi)容相互交換相互交換。 尋址方式:尋址方式:源操作數(shù)有寄存器尋址、直接尋址和寄存器源操作數(shù)有寄存器尋址、直接尋址和寄存器間間 接尋址等方式。接尋址等方式。3637 XCH A,R7 ;(A) (R7) 80H 08H (A)=08H (R7)=80H XCH A,40H ;(A) (40H) 08H F0H (A)=F0H (40H)=08H XCH A,R0 ;(A) (R0) (R0)=30H (30H)=0FH F0H 0FH (A)=0FH (30H)=F0H 結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。例:例: (A)=80

41、H,(R7)=08H,(40H)=F0H, (R0)=30H, (30H)=0FH3810半字節(jié)交換指令半字節(jié)交換指令 XCHD A,Ri 累加器的低4位與內(nèi)部RAM低4位交換。 例如:例如:(R0)=60H,(60H)=3EH, ( A)=59H, XCHD A,R0” (A)=59H (60H)=3EH (A)=5EH, (60H)=39H3.4.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 指令構(gòu)成指令構(gòu)成: 加、減、乘、除加、減、乘、除指令。 使用限制使用限制: 算術(shù)運(yùn)算指令都是針對8位二進(jìn)制無符號數(shù)的,如要進(jìn)行帶符號帶符號或多字節(jié)多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。 對標(biāo)

42、志位的影響對標(biāo)志位的影響: 算術(shù)運(yùn)算的結(jié)果將使PSW的進(jìn)位(的進(jìn)位(Cy)、輔助進(jìn)位()、輔助進(jìn)位(Ac)、溢出()、溢出(OV)3種標(biāo)志位種標(biāo)志位置1或清0。 注意注意: 增1和減1指令不影響這些標(biāo)志。391加法指令加法指令 指令格式指令格式:ADD A,Rn ;(A)+(Rn)A ,n=07ADD A,direct;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1ADD A,#data ;(A)+#dataA 功能說明功能說明: 8位加法指令的一個(gè)加數(shù)一個(gè)加數(shù)總是來自累加器A,而另一個(gè)另一個(gè)加數(shù)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋

43、址方式得到。加的結(jié)果總是放在累加器加的結(jié)果總是放在累加器A中。中。4041練習(xí): 當(dāng)兩個(gè)加數(shù)都在片外RAM,運(yùn)算結(jié)果也需放在片外RAM中時(shí),程序如何編寫? 硬件資源分配如下:硬件資源分配如下: 片外RAM的指針用R0,兩個(gè)加數(shù)和結(jié)果地址由低到高依次存放,加法的源操作數(shù)用R1的寄存器尋址方式。MOVX A,R0 ;取第一個(gè)加數(shù)放;取第一個(gè)加數(shù)放R1MOV R1,A INC R0 ;取第二個(gè)加數(shù)放;取第二個(gè)加數(shù)放AMOVX A,R0ADD A,R1 ; 做加法做加法INC R0 ;存放運(yùn)算結(jié)果;存放運(yùn)算結(jié)果MOVX R0,A (1)如果)如果位位7有進(jìn)位有進(jìn)位,則進(jìn)位標(biāo)志,則進(jìn)位標(biāo)志Cy置置1,否

44、則,否則Cy清清0。(2)如果)如果位位3有進(jìn)位有進(jìn)位,輔助進(jìn)位標(biāo)志,輔助進(jìn)位標(biāo)志Ac置置1,否則否則Ac(Ac為為PSW寄寄 存器中的一位)清存器中的一位)清0。(3)如果)如果位位6有進(jìn)位有進(jìn)位,而,而位位7沒有進(jìn)位,沒有進(jìn)位,或者或者位位6沒有進(jìn)位沒有進(jìn)位,而,而位位7有有 進(jìn)位進(jìn)位,則溢出標(biāo)志位,則溢出標(biāo)志位OV置置1,否則否則OV清清0。 溢出標(biāo)志位溢出標(biāo)志位OV的狀態(tài)的狀態(tài),只有帶符號數(shù)加法運(yùn)算時(shí)才有意義。,只有帶符號數(shù)加法運(yùn)算時(shí)才有意義。 當(dāng)兩個(gè)帶符號數(shù)相加時(shí),當(dāng)兩個(gè)帶符號數(shù)相加時(shí),OV=1,表示加法運(yùn)算超出了累加器,表示加法運(yùn)算超出了累加器A所能表示的帶符號數(shù)的有效范圍(所能表

45、示的帶符號數(shù)的有效范圍(-128+127),即產(chǎn)生了溢出,),即產(chǎn)生了溢出,表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無溢出產(chǎn)生。表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無溢出產(chǎn)生。42【例例3-1】 (A)=53H,(R0)=FCH,執(zhí)行指令A(yù)DDA,R0運(yùn)算式為 結(jié)果結(jié)果:(A)=4FH,Cy=1,Ac=0(位(位3向位向位4無進(jìn)位)無進(jìn)位), OV=0(位位6和位和位7同時(shí)有進(jìn)位同時(shí)有進(jìn)位) P=1(A中1的位數(shù)為奇數(shù))。43【例例3-2】 (A)= 85H,(R0)=20H,(20H)=AFH,執(zhí)行指令A(yù)DD A,R0 運(yùn)算式為 結(jié)果結(jié)果:(A)=34H,Cy=1,位7有進(jìn)位,而位6

46、無進(jìn)位 P=1 (A中1的位數(shù)為奇數(shù)) 。 442帶進(jìn)位加法指令帶進(jìn)位加法指令 特點(diǎn)是進(jìn)位標(biāo)志位特點(diǎn)是進(jìn)位標(biāo)志位Cy參加運(yùn)算,三個(gè)數(shù)相加。參加運(yùn)算,三個(gè)數(shù)相加。 4條指令:條指令:ADDC A,Rn ;(A)+(Rn)+CA ,n =07ADDC A,direct ;(A)+(direct)+CAADDC A,Ri ;(A)+(Ri)+CA,i =0,1ADDC A,#data ;(A)+#data+CA 如果如果位位7有進(jìn)位有進(jìn)位,則進(jìn)位標(biāo)志,則進(jìn)位標(biāo)志Cy置置“1”,否則,否則Cy清清“0”; 如果如果位位3有進(jìn)位有進(jìn)位,則輔助進(jìn)位標(biāo)志,則輔助進(jìn)位標(biāo)志Ac置置“1”,否則,否則Ac清清“0

47、”; 如果如果位位6有進(jìn)位有進(jìn)位而而位位7沒有進(jìn)位沒有進(jìn)位,或者,或者位位7有進(jìn)位有進(jìn)位而而位位6沒有沒有 進(jìn)位進(jìn)位,則溢出標(biāo)志,則溢出標(biāo)志OV置置“1”,否則標(biāo)志,否則標(biāo)志OV清清“0”。45【例例3-3】 (A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令A(yù)DDC A,20H 運(yùn)算式為 結(jié)果為 (A)=85H,Cy=1,Ac=1() OV=0(第第6位和第位和第7位都有進(jìn)位)位都有進(jìn)位) P=1 (A中1的位數(shù)為奇數(shù))。 )。463增增1指令指令 5條指令:INC AINC Rn ;n=07INC direct INC Ri ;i =0,1 INC DPTR 把指令中所指出的變量增1,

48、且不影響PSW中的任何標(biāo)志。 若變量原來為若變量原來為FFH,加,加1后溢出為后溢出為00H(前四條指令前四條指令),并且并且 不影響標(biāo)志位。不影響標(biāo)志位。 指令“INC DPTR”,16位數(shù)增1指令。首先對低8位指針 DPL 執(zhí)行加1,當(dāng)溢出時(shí),就對DPH的內(nèi)容進(jìn)行加1,不不 影響標(biāo)志影響標(biāo)志Cy。 474十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 DA A 是對BCD碼的進(jìn)行十進(jìn)制調(diào)整。兩個(gè)BCD 碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮BCD碼的和數(shù)。485帶借位的減法指令帶借位的減法指令 4條指令: SUBB A,Rn ; (A)-(Rn)-CyA,n =07 SUBB A,dire

49、ct ; (A)-(direct)-CyA SUBB A,Ri ; (A)-(Ri)-CyA, i =0,1 SUBB A,#data ; (A)-#data-CyA 從A的內(nèi)容減去指定變量和進(jìn)位標(biāo)志Cy的值,結(jié)果存在A中。 如果位7需借位則Cy置1,否則Cy清0; 如果位3需借位則Ac置1,否則Ac清0; 如果位6借位而位7不借位,或者位7借位而位6不借位,則溢出標(biāo)志位OV置“1”,否則OV清“0”。49【例3-5】 (A)=C9H,(R2)=54H,Cy=1,執(zhí)行指令SUBB A,R2 運(yùn)算式為 結(jié)果結(jié)果: (A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位,而第 7位沒有向上產(chǎn)

50、生借位)。506減減1指令指令DEC A;(A)-1ADEC Rn ;(Rn)-1Rn,n=07DEC direct ;(direct)-1directDEC Ri ;(Ri)-1(Ri),i =0,1 功能是指定的變量減1。若原來為00H,減1后下溢為FFH,不影響標(biāo)志位(P標(biāo)志除外)?!纠?-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H, (40H)=0FFH,執(zhí)行指令DEC A;(A)-1A (A)=0EHDEC R7;(R7)-1R7 (R7)=18H DEC 30H;(30H)-130H (30H)=0FFH DEC R1;(R1)-1(R1) (4

51、0H)=0FEH517乘法指令乘法指令MUL AB ;ABBA 功能:功能: 乘積的低字節(jié)在累加器A中,高字節(jié)在B中。 標(biāo)志影響:標(biāo)志影響:如果積大于255,則OV置1,否則OV清0。 Cy標(biāo)志總是清0。8除法指令除法指令DIV AB ;A/BA(商商),余數(shù),余數(shù)B 商(為整數(shù))存放在A中,余數(shù)存放在B中,且Cy和溢出標(biāo)志位OV清“0”。 如果B的內(nèi)容為0(即除數(shù)為0),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位OV置1。523.4.3 邏輯操作類指令邏輯操作類指令1累加器累加器A 清清“0”指令指令CLRA 累加器A清0。不影響標(biāo)志位。2累加器累加器A求反指令求反指令CPL A 將累加器

52、A的內(nèi)容取反,不影響標(biāo)志位。533左環(huán)移指令左環(huán)移指令RLA 功能是A向左循環(huán)移位,位7循環(huán)移入位0,不影響標(biāo)志位,如圖3-1所示。 4帶進(jìn)位左環(huán)移指令帶進(jìn)位左環(huán)移指令RLCA 將累加器A的內(nèi)容和進(jìn)位標(biāo)志位Cy一起向左環(huán)移一位,如圖3-2 所示。54圖3-1 左環(huán)移左環(huán)移操作操作圖3-2 帶進(jìn)位左環(huán)移帶進(jìn)位左環(huán)移操作操作5右環(huán)移指令右環(huán)移指令RR A 這條指令的功能是A的內(nèi)容向右環(huán)移一位不影響其他標(biāo)志位,如圖3-3所示。6帶進(jìn)位右環(huán)移指令帶進(jìn)位右環(huán)移指令RRC AA的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,如圖3-4所示。55圖3-3 右環(huán)移右環(huán)移操作操作圖3-4 帶進(jìn)位右環(huán)移操作7累加器半字節(jié)交

53、換指令累加器半字節(jié)交換指令SWAP A 是將累加器A的高半字節(jié)(Acc.7Acc.4)和低半字節(jié)(Acc.3Acc.0)互換?!纠?-8】 (A)= 95H,執(zhí)行指令SWAP A 結(jié)果為結(jié)果為 (A)=59H。8邏輯與指令邏輯與指令 ANL A,Rn;(A)(Rn)A,n=07 ANL A,direct;(A)(direct)A ANL A,#data;(A)#dataA ANL A,Ri;(A)(Ri)A,i =01 ANL direct,A;(direct)(A)direct ANL direct,#data;(direct)#datadirect56 是在指定的變量之間進(jìn)行“邏輯與”操作

54、,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中。【例例3-9】 (A)=07H,(R0)=0FDH,執(zhí)行指令A(yù)NLA,R0運(yùn)算式為結(jié)果結(jié)果: (A)=05H。579邏輯或指令邏輯或指令ORLA,Rn;(A)(Rn)A ,n =07ORLA,direct;(A)(direct)AORLA,#data;(A) #dataAORLA,Ri;(A)(Ri)A,i =0,1ORLdirect,A;(direct)(A)directORLdirect,#data ;(direct)#datadirect 是在所指定的變量之間執(zhí)行位的“邏輯或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。58【例例3-10】 (P1

55、)=05H,(A)=33H,執(zhí)行指令ORLP1,A運(yùn)算式為結(jié)果結(jié)果:(P1)=35H。5910邏輯異或指令邏輯異或指令 XRL A,Rn ;(A) (Rn)A,n=07 XRL A,direct ;(A) (direct)A XRL A,Ri ;(A) (Ri)A ,i =0,1 XRL A,#data ;(A) #dataA XRL direct,A ;(direct) (A)direct XRL direct,#data ;(direct) #data direct 功能是在所指定的變量之間執(zhí)行以位位的“邏輯異或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。60【例例3-11】 (A)=90H

56、,(R3)=73H,執(zhí)行指令XRLA,R3運(yùn)算式為結(jié)果結(jié)果: (A)=E3H。613.4.4 3.4.4 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令1 1長轉(zhuǎn)移指令長轉(zhuǎn)移指令LJMPLJMPaddr16addr16 語法:語法:addr16 程序存儲(chǔ)器某單元的; 程序中可以用目的地址標(biāo)號、符號常量或 16位立即數(shù)表示; 指令執(zhí)行時(shí),將addr16裝入PC,轉(zhuǎn)向addr16 指定的目的地址。 目的地址無限制??梢允?4KB程序存儲(chǔ)器地址空 間的任何位置任何位置。 指令特性:指令特性:3字節(jié) 2周期 62632 2相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令SJMPSJMPrelrel 語法:語法: relrel 相對偏移量,帶符

57、號8位二進(jìn)制補(bǔ)碼數(shù); 注意:注意:寫代碼時(shí),程序中直接寫目的寫代碼時(shí),程序中直接寫目的 位置的程序標(biāo)號就可以,相對位置的程序標(biāo)號就可以,相對 偏移量在匯編時(shí)由匯編器自動(dòng)偏移量在匯編時(shí)由匯編器自動(dòng) 計(jì)算和填入。計(jì)算和填入。 無條件轉(zhuǎn)移的雙向轉(zhuǎn)移; 之間之間(-)。3絕對轉(zhuǎn)移指令絕對轉(zhuǎn)移指令A(yù)JMPaddr11 語法:語法:addr11 轉(zhuǎn)移目標(biāo)地址的低轉(zhuǎn)移目標(biāo)地址的低11位;位; 程序中可以用符號常量或立即數(shù)表示;程序中可以用符號常量或立即數(shù)表示; 兼容MCS48而設(shè)計(jì)的。 644間接跳轉(zhuǎn)指令間接跳轉(zhuǎn)指令JMP A+DPTR 功能功能:無條件轉(zhuǎn)移。無條件轉(zhuǎn)移。以以DPTR內(nèi)容為內(nèi)容為基址基址,A

58、的內(nèi)容作為的內(nèi)容作為變變 址址。給。給A賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移。賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移。 目的地址目的地址:由由A中中8位位無符號數(shù)無符號數(shù)與與DPTR的的16位位無符號數(shù)無符號數(shù) 內(nèi)容之和來確定。內(nèi)容之和來確定。 注意:注意:本指令不改變本指令不改變A和和DPTR的值,也不影的值,也不影 響標(biāo)志位。響標(biāo)志位。5條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 JZrel;如果;如果累加器累加器內(nèi)容為內(nèi)容為0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移JNZrel;如果;如果累加器累加器內(nèi)容非內(nèi)容非0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移 relrel 相對偏移量,帶符號8位二進(jìn)制補(bǔ)碼數(shù); 注意:注意:寫代碼時(shí),程序中直接寫目的寫代碼

59、時(shí),程序中直接寫目的 位置的程序標(biāo)號就可以,相對位置的程序標(biāo)號就可以,相對 偏移量在匯編時(shí)由匯編器自動(dòng)偏移量在匯編時(shí)由匯編器自動(dòng) 計(jì)算和填入。計(jì)算和填入。 條件滿足條件滿足,則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一指令。,則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一指令。 轉(zhuǎn)移范圍:轉(zhuǎn)移范圍:以下一條指令首地址為中心的以下一條指令首地址為中心的256B范圍內(nèi)(范圍內(nèi)(-128 +127)。)。6比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令CJNEA,direct,relCJNEA,#data,relCJNE Rn,#data,relCJNE Ri,#data,rel 比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移不相等則轉(zhuǎn)移, 并

60、轉(zhuǎn)向目的地址。 指令執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。指令執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。 注意:rel的含義、表達(dá)以及轉(zhuǎn)移的范圍,都與 上一條指令相同。 如果第一操作數(shù)(無符號整數(shù))小于第二操作數(shù)如果第一操作數(shù)(無符號整數(shù))小于第二操作數(shù)(無符號整數(shù)),則進(jìn)位標(biāo)志位Cy置1,否則Cy清0。687減減1不為不為0轉(zhuǎn)移指令轉(zhuǎn)移指令DJNZ Rn,rel;n =07DJNZ direct,rel功能:功能:將源操作數(shù)減將源操作數(shù)減1,結(jié)果送回源操作數(shù),結(jié)果送回源操作數(shù),如果結(jié)果不為如果結(jié)果不為0 則轉(zhuǎn)移。則轉(zhuǎn)移。 注意:rel的含義、表達(dá)以及轉(zhuǎn)移的范圍,都與上一條 指令相同。 用途:用途:用于實(shí)現(xiàn)程

溫馨提示

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

最新文檔

評論

0/150

提交評論