第3章 8051指令系統(tǒng)及編程基礎(chǔ)_第1頁
第3章 8051指令系統(tǒng)及編程基礎(chǔ)_第2頁
第3章 8051指令系統(tǒng)及編程基礎(chǔ)_第3頁
第3章 8051指令系統(tǒng)及編程基礎(chǔ)_第4頁
第3章 8051指令系統(tǒng)及編程基礎(chǔ)_第5頁
已閱讀5頁,還剩189頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第3章章 AT89S51單片機(jī)的單片機(jī)的 指令系統(tǒng)指令系統(tǒng)12內(nèi)容概要內(nèi)容概要8051單片機(jī)單片機(jī)指令系統(tǒng)指令系統(tǒng)(111條指令條指令)8051單片機(jī)的單片機(jī)的尋址方式尋址方式8051常見的常見的匯編語言源程序的編寫匯編語言源程序的編寫33.1 指令系統(tǒng)概述指令系統(tǒng)概述111條條指令按指令按所占字節(jié)分所占字節(jié)分,分分三種三種:(1)單字節(jié)單字節(jié)指令指令49條;條;(2)雙字節(jié)雙字節(jié)指令指令45條;條;(3)三字節(jié)三字節(jié)指令指令17條。條。111條條指令按指令按執(zhí)行時(shí)間來分執(zhí)行時(shí)間來分,分分三種:三種:(1)1個(gè)個(gè)機(jī)器周期(機(jī)器周期(12個(gè)時(shí)鐘振蕩周期)的指令個(gè)時(shí)鐘振蕩周期)的指令64條條;

2、(2)2個(gè)個(gè)機(jī)器周期指令機(jī)器周期指令45條條;(3)4個(gè)個(gè)機(jī)器周期機(jī)器周期乘、除指令。乘、除指令。 12MHz晶振,每個(gè)機(jī)器周期為晶振,每個(gè)機(jī)器周期為1s。34操作碼操作碼 + 操作數(shù)操作數(shù)執(zhí)行何種操作執(zhí)行何種操作參加操作的參加操作的數(shù)據(jù)數(shù)據(jù)或或指出到哪里指出到哪里取得數(shù)據(jù)的地址或符號(hào)。取得數(shù)據(jù)的地址或符號(hào)。3.2 指令格式指令格式 (1)單字節(jié)指令:)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。操作碼和操作數(shù)同在一個(gè)字節(jié)中。(2)雙字節(jié)指令:)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。作數(shù)。(3)三字節(jié)指令:)三字節(jié)指令:操作碼操作碼占占一個(gè)字節(jié),一個(gè)字

3、節(jié),操作數(shù)操作數(shù)占占二個(gè)字二個(gè)字節(jié)。節(jié)。操作數(shù):操作數(shù):指令所需操作數(shù)或操作數(shù)的地址;操指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以有一個(gè),也可以有兩個(gè)(一個(gè)源操作數(shù),作數(shù)可以有一個(gè),也可以有兩個(gè)(一個(gè)源操作數(shù),一個(gè)目的操作數(shù)),也一個(gè)目的操作數(shù)),也可以沒有。可以沒有。例:例: MOV A,Rn DEC A NOP 操作碼:操作碼:指令操作類型指令操作類型(必須有)(必須有)63.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式 尋址方式尋址方式在指令中在指令中說明操作數(shù)所在地址說明操作數(shù)所在地址的方法的方法 一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大

4、,指令系統(tǒng)就越復(fù)雜。指令系統(tǒng)就越復(fù)雜。 尋址方式所要解決的主要問題尋址方式所要解決的主要問題就是如何在整個(gè)就是如何在整個(gè)存儲(chǔ)器存儲(chǔ)器和和寄存器寄存器的尋址空間內(nèi)快速地的尋址空間內(nèi)快速地找到指定的地址單元找到指定的地址單元。 下面介紹指令系統(tǒng)下面介紹指令系統(tǒng)7種種尋址方式。尋址方式。671寄存器尋址方式寄存器尋址方式指令中的指令中的操作數(shù)操作數(shù)為某一為某一寄存器的內(nèi)容。寄存器的內(nèi)容。例如:例如:MOVA,Rn ;(Rn)A,n =07 把把Rn中的源操作數(shù)送入到累加器中的源操作數(shù)送入到累加器A中。由于中。由于指令指定了從寄存器指令指定了從寄存器Rn中取得源操作數(shù),所中取得源操作數(shù),所以稱為寄存器

5、尋址方式。以稱為寄存器尋址方式。78 8 本尋址方式的尋址范圍:本尋址方式的尋址范圍:(1)4組通用工作寄存區(qū)共組通用工作寄存區(qū)共32個(gè)工作寄存器。但個(gè)工作寄存器。但只對(duì)只對(duì)當(dāng)前工作寄存器區(qū)當(dāng)前工作寄存器區(qū)的的8個(gè)工作寄存器尋址,個(gè)工作寄存器尋址,指令中的寄存器名稱只能是指令中的寄存器名稱只能是R0R7。(2)部分特殊功能寄存器,部分特殊功能寄存器,如累加器如累加器A、寄存器、寄存器B以及數(shù)據(jù)指針寄存器以及數(shù)據(jù)指針寄存器DPTR等。等。92直接尋址方式直接尋址方式 指令中直接指令中直接給出操作數(shù)的單元地址,給出操作數(shù)的單元地址,該單元地址中該單元地址中的內(nèi)容就是操作數(shù),直接的操作數(shù)單元地址用的

6、內(nèi)容就是操作數(shù),直接的操作數(shù)單元地址用“direct”表示。表示。例如:例如: MOVA,direct “direct”就是操作數(shù)的單元地址。就是操作數(shù)的單元地址。例如:例如: MOVA,40H 表示把內(nèi)部表示把內(nèi)部RAM 40H單元(單元(direct)的內(nèi)容傳送到)的內(nèi)容傳送到A。指令中。指令中源操作數(shù)(右邊的操作數(shù))采用的是源操作數(shù)(右邊的操作數(shù))采用的是直接尋直接尋址方式址方式。 9例:例:MOV A,40H操作如圖所示:操作如圖所示:數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器0040H1111指令中兩個(gè)操作數(shù)都可由直接尋址方式給出。指令中兩個(gè)操作數(shù)都可由直接尋址方式給出。例如:例如: MOVdirect1

7、,direct2具體指令:具體指令:MOV 42H,62H把片內(nèi)把片內(nèi)RAM中中62H單元的內(nèi)容送到片內(nèi)單元的內(nèi)容送到片內(nèi)RAM中的中的42H單元中。單元中。直接尋址直接尋址是是訪問片內(nèi)所有特殊功能寄存器訪問片內(nèi)所有特殊功能寄存器的的唯一尋址唯一尋址方式。方式。例:例:MOV ?,40H操作如圖所示:操作如圖所示:數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器0040H34H34H003FH133. 寄存器間接尋址方式寄存器間接尋址方式 寄存器寄存器中中存的存的是是操作數(shù)地址操作數(shù)地址,即先從寄存器中找到操即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù)。作數(shù)的地址,再按該地址找到操作數(shù)。 為了區(qū)別寄存器尋址和寄存

8、器間接尋址,在寄存器間為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器名稱前面加接尋址方式中,應(yīng)在寄存器名稱前面加前綴標(biāo)志前綴標(biāo)志“”。例如:例如:MOV A,Ri ;i=0或或1 其中,其中, Ri的內(nèi)容為的內(nèi)容為40H,即把,即把內(nèi)部?jī)?nèi)部RAM 40H地址單地址單元中的內(nèi)容傳送給元中的內(nèi)容傳送給A。13例:例:MOV A,R1操作如圖所示操作如圖所示 數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器0040H0040H34HA40HR1154立即數(shù)尋址方式立即數(shù)尋址方式 直接直接在指令中在指令中給出操作數(shù)給出操作數(shù)也稱也稱立即數(shù)立即數(shù)。為了。為了與直接尋址指令中的直接地址加以區(qū)別,與直接尋址指令

9、中的直接地址加以區(qū)別,需在操作需在操作數(shù)前加前綴標(biāo)志數(shù)前加前綴標(biāo)志“#”。例如:例如: MOV A,#40H 第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在程序存儲(chǔ)器內(nèi)的常數(shù)。放在程序存儲(chǔ)器內(nèi)的常數(shù)。15165基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式 以以DPTR或或PC作為作為基址寄存器,基址寄存器,以累加器以累加器A作為作為變變址寄存器,址寄存器,以兩者內(nèi)容相加形成的以兩者內(nèi)容相加形成的16位地址作為目的位地址作為目的地址進(jìn)行尋址。地址進(jìn)行尋址。 例如指令:例如指令: MOVC A,A+DPTR 其中,(其中,(A)=0

10、5H,(,(DPTR)=0400H,指令,指令執(zhí)行結(jié)果是把程序存儲(chǔ)器執(zhí)行結(jié)果是把程序存儲(chǔ)器0405H單元的內(nèi)容傳送給單元的內(nèi)容傳送給A。本尋址方式的本尋址方式的指令有指令有3條條:MOVCA,A+DPTRMOVCA,A+PCJMP A+DPTR161717 前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。例例如,如,將固定的、按一定順序排列的將固定的、按一定順序排列的表格表格存放在程序存儲(chǔ)存放在程序存儲(chǔ)器中,在程序運(yùn)行中由器中,在程序運(yùn)行中由A的動(dòng)態(tài)參量來確定讀取對(duì)應(yīng)的的動(dòng)態(tài)參量來確定讀取對(duì)應(yīng)的表格參數(shù)。表格參數(shù)。 第第3條為條為散轉(zhuǎn)指令,散轉(zhuǎn)指令,A中內(nèi)容

11、為程序運(yùn)行后的動(dòng)態(tài)中內(nèi)容為程序運(yùn)行后的動(dòng)態(tài)結(jié)果,可根據(jù)結(jié)果,可根據(jù)A中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。跳轉(zhuǎn)。186相對(duì)尋址方式相對(duì)尋址方式 解決程序轉(zhuǎn)移。解決程序轉(zhuǎn)移。該尋址是以該該尋址是以該轉(zhuǎn)移指令的地址轉(zhuǎn)移指令的地址(PC值)加上值)加上它的字節(jié)數(shù),它的字節(jié)數(shù),再加上再加上相對(duì)偏移量(相對(duì)偏移量(rel),),形成形成新的轉(zhuǎn)移目的地址新的轉(zhuǎn)移目的地址,從而程序轉(zhuǎn)移到該目的地址。轉(zhuǎn)移,從而程序轉(zhuǎn)移到該目的地址。轉(zhuǎn)移的目的地址的目的地址用下式計(jì)算:用下式計(jì)算: 目的地址目的地址=轉(zhuǎn)移指令所在的地址轉(zhuǎn)移指令所在的地址+轉(zhuǎn)移指令字節(jié)數(shù)轉(zhuǎn)移指令字節(jié)數(shù)+rel

12、其中,其中,偏移量偏移量rel是帶符號(hào)是帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù),位二進(jìn)制補(bǔ)碼數(shù),128+127。 程序轉(zhuǎn)移范圍程序轉(zhuǎn)移范圍是以轉(zhuǎn)移指令的是以轉(zhuǎn)移指令的下條指令首地址下條指令首地址為基準(zhǔn)為基準(zhǔn)地址相對(duì)偏移在地址相對(duì)偏移在128+127之間。之間。19例如:例如: SJMP rel 程序要轉(zhuǎn)移到該指令的程序要轉(zhuǎn)移到該指令的PC值加值加3再加上再加上rel的目的地的目的地址處。編寫程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向址處。編寫程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號(hào)。的地址標(biāo)號(hào)。例如:例如: SJMP LOOP “LOOP” 為目的地址標(biāo)號(hào)。匯編時(shí),由匯編程序自為目的地址標(biāo)號(hào)。匯編時(shí),由匯編程

13、序自動(dòng)計(jì)算和填入偏移量。但手工匯編時(shí),偏移量的值由動(dòng)計(jì)算和填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。手工計(jì)算。19207位尋址方式位尋址方式 對(duì)內(nèi)部對(duì)內(nèi)部RAM和特殊功能寄存器具有位尋址功能的和特殊功能寄存器具有位尋址功能的某位某位內(nèi)容進(jìn)行內(nèi)容進(jìn)行置置1和和清清0操作。操作。 位地址一般以位地址一般以直接位地址直接位地址給出,位地址符號(hào)為給出,位地址符號(hào)為“bit”。 例如:例如:MOV C,bit 其具體指令:其具體指令: MOV C,40H 把位地址為把位地址為40H的的值送到進(jìn)位位值送到進(jìn)位位C。 由于由于AT89S51具有位處理功能,可直接對(duì)數(shù)據(jù)位方具有位處理功能,可直接對(duì)數(shù)據(jù)位

14、方便地實(shí)現(xiàn)便地實(shí)現(xiàn)置置1、清、清0、求反、傳送、判跳和邏輯運(yùn)算、求反、傳送、判跳和邏輯運(yùn)算等等操作,為測(cè)控系統(tǒng)的應(yīng)用提供了最佳代碼和速度,增操作,為測(cè)控系統(tǒng)的應(yīng)用提供了最佳代碼和速度,增強(qiáng)了實(shí)時(shí)性。強(qiáng)了實(shí)時(shí)性。2021 7種尋址方式種尋址方式已介紹完畢。已介紹完畢。 問題:?jiǎn)栴}:當(dāng)一條指令給定后,如何來確定該指令的當(dāng)一條指令給定后,如何來確定該指令的尋址方式?尋址方式?例如例如: MOV A,#40H,屬于立即數(shù)尋址,屬于立即數(shù)尋址還是寄存器尋址?還是寄存器尋址? 要看以哪個(gè)操作數(shù)要看以哪個(gè)操作數(shù)作為參照系作為參照系。 操作數(shù)分為操作數(shù)分為源操作數(shù)源操作數(shù)和和目的操作數(shù)目的操作數(shù)。對(duì)于對(duì)于源操

15、作源操作數(shù)數(shù)“#40H”來說,是來說,是“立即數(shù)尋址立即數(shù)尋址”方式,但對(duì)方式,但對(duì)目目的操作數(shù)的操作數(shù)“A”來說,是屬于來說,是屬于“寄存器尋址寄存器尋址”方式。方式。 一般而言,一般而言,尋址方式指的是尋址方式指的是源操作數(shù),源操作數(shù),所以此例所以此例為立即數(shù)尋址方式。為立即數(shù)尋址方式。 對(duì)指令系統(tǒng)對(duì)指令系統(tǒng)7種尋址方式種尋址方式總結(jié),概括見表總結(jié),概括見表3-1。212222233.4 AT89S51指令系統(tǒng)分類介紹指令系統(tǒng)分類介紹共共111條條指令,按功能分為指令,按功能分為五類:五類:(1)數(shù)據(jù)傳送類()數(shù)據(jù)傳送類(28條)條)(2)算術(shù)運(yùn)算類()算術(shù)運(yùn)算類(24條)條)(3)邏輯操

16、作類()邏輯操作類(25條)條)(4)控制轉(zhuǎn)移類()控制轉(zhuǎn)移類(17條)條)(5)位操作類()位操作類(17條)條)先簡(jiǎn)單介紹指令用到的符號(hào)。先簡(jiǎn)單介紹指令用到的符號(hào)。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)。232424direct直接地址,直接地址,即即8位位內(nèi)部數(shù)據(jù)存儲(chǔ)器單元內(nèi)部數(shù)據(jù)存儲(chǔ)器單元或或特殊功能寄存器特殊功能寄存器的地址。的地址。#data指令中的指令中的8位立即數(shù)。位立即數(shù)。#data16指令中的指令中的16位立即數(shù)。位

17、立即數(shù)。rel偏移量,偏移量,8位的帶符號(hào)補(bǔ)碼數(shù)。位的帶符號(hào)補(bǔ)碼數(shù)。DPTR數(shù)據(jù)指針,可用作數(shù)據(jù)指針,可用作16位位數(shù)據(jù)存儲(chǔ)器單元地址數(shù)據(jù)存儲(chǔ)器單元地址的寄存器。的寄存器。bit內(nèi)部?jī)?nèi)部RAM或特殊功能寄存器中的直接尋址位?;蛱厥夤δ芗拇嫫髦械闹苯訉ぶ肺?。C或或Cy進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。addr1111位目的地址。位目的地址。addr1616位目的地址。位目的地址。間接尋址寄存器前綴,如間接尋址寄存器前綴,如Ri,A+DPTR。()表示表示地址地址單元或寄存器中的內(nèi)容。單元或寄存器中的內(nèi)容。()表示以表示以單元或寄存器中的內(nèi)容作為地址間接尋址單元單元或

18、寄存器中的內(nèi)容作為地址間接尋址單元的內(nèi)容。的內(nèi)容。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。263.4.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 使用最頻繁使用最頻繁。一般數(shù)據(jù)傳送類指令的助記符為一般數(shù)據(jù)傳送類指令的助記符為“MOV”,通用格式通用格式如下:如下: MOV , 數(shù)據(jù)傳送類指令是數(shù)據(jù)傳送類指令是把把源操作數(shù)源操作數(shù)傳送傳送到到目的操作數(shù)目的操作數(shù)。指令執(zhí)行之后,源操作數(shù)不改變,目的操作數(shù)修改為指令執(zhí)行之后,源操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)據(jù)傳送類操作屬源操作數(shù)。所以數(shù)據(jù)傳送類操作屬“復(fù)制復(fù)制”性質(zhì),性質(zhì),而而不是不是“搬家搬家”。 本類指

19、令本類指令不影響標(biāo)志位不影響標(biāo)志位:Cy、Ac和和OV,但但不包括不包括奇奇偶標(biāo)志位偶標(biāo)志位P。26271以累加器為目的操作數(shù)的指令以累加器為目的操作數(shù)的指令MOVA,Rn; (Rn)A,n =07MOVA, Ri ; (Ri)A i =0,1MOVA,direct ; (direct)AMOVA,#data ; #dataA27 把源操作數(shù)內(nèi)容送累加器把源操作數(shù)內(nèi)容送累加器A,源操作數(shù)源操作數(shù)有寄存器尋有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式,例如:址、直接尋址、間接尋址和立即數(shù)尋址等方式,例如:MOV A,R6;(R6)A, MOV A,R0 ;(R0)A, MOV A,70H

20、;(70H)A, MOV A,#78H;78HA,寄存器尋址寄存器尋址間接尋址間接尋址直接尋址直接尋址立即數(shù)尋址立即數(shù)尋址292以以Rn為目的操作數(shù)的指令為目的操作數(shù)的指令 MOV Rn ,A ;(A)Rn ,n =07 MOV Rn ,direct ;(direct)Rn ,n =07 MOV Rn ,#data;#dataRn ,n =07 把源操作數(shù)送入當(dāng)前寄存器區(qū)的把源操作數(shù)送入當(dāng)前寄存器區(qū)的R0R7中的某一中的某一寄存器。寄存器。293以直接地址以直接地址direct為目的操作數(shù)的指令為目的操作數(shù)的指令 MOV direct,A ;(A)direct MOV direct,Rn ;(

21、Rn)direct,n =07 MOV direct1,direct2 ;(direct2)direct1 MOV direct,Ri ;(Ri)direct,i =0,1 MOV direct,#data ;#datadirect 把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。direct指指的是內(nèi)部的是內(nèi)部RAM或或SFR地址。地址。314以寄存器間接地址為目的操作數(shù)的指令以寄存器間接地址為目的操作數(shù)的指令MOV Ri,A ;(A)(Ri), i=0,1MOV Ri,direct ;(direct)(Ri),i=0,1MOV Ri,#data ;#data(R

22、i), i=0,1 功能是把源操作數(shù)內(nèi)容功能是把源操作數(shù)內(nèi)容送入送入R0或或R1指定的存儲(chǔ)單指定的存儲(chǔ)單元中。元中。31516位數(shù)傳送指令位數(shù)傳送指令 MOV DPTR,#data16 ;#data16DPTR 功能是把功能是把16位立即數(shù)送入位立即數(shù)送入DPTR,用來,用來設(shè)置數(shù)設(shè)置數(shù)據(jù)存儲(chǔ)器的地址指針。據(jù)存儲(chǔ)器的地址指針。33 AT89S51有兩個(gè)有兩個(gè)DPTR,通過設(shè)置通過設(shè)置特殊功能寄存器特殊功能寄存器AUXR1中的中的DPS位位來選擇。當(dāng)來選擇。當(dāng)DPS=1,則指令中的則指令中的DPTR即為即為DPTR1,DPTR0被屏蔽,反之亦然。被屏蔽,反之亦然。 DPTR為為16位的數(shù)據(jù)指針,

23、分為位的數(shù)據(jù)指針,分為DPH和和DPL。操作十。操作十分靈活方便。分靈活方便。設(shè)有兩個(gè)設(shè)有兩個(gè)DPTR后,就可避免頻繁的出入堆后,就可避免頻繁的出入堆棧操作。棧操作。346堆棧操作指令堆棧操作指令 內(nèi)部?jī)?nèi)部RAM中設(shè)定一個(gè)中設(shè)定一個(gè)后進(jìn)先出后進(jìn)先出(LIFO,Last In First Out)的區(qū)域,稱為)的區(qū)域,稱為堆棧堆棧。在特殊功能寄存器中在特殊功能寄存器中有一個(gè)有一個(gè)堆棧指針堆棧指針SP,指示堆棧的棧頂位置。堆棧操指示堆棧的棧頂位置。堆棧操作有作有進(jìn)棧進(jìn)棧和和出棧出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。條堆棧操作指令。3435(1)進(jìn)棧指令

24、)進(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í)行下列指令指令 PUSHAcc;(SP)+1=61HSP,(A)61H PUSHB;(SP)+1=62HSP,(B)62H結(jié)果:結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H。35(2)出棧指令)出棧指令 POP direct 將將SP指示的棧頂單元的內(nèi)容送入指示的棧頂單元的內(nèi)容送入direct字節(jié)中,字節(jié)中,SP減減1。 例如:

25、例如:當(dāng)當(dāng)(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(zhí)行時(shí),執(zhí)行指令指令POP DPH ;(SP)DPH,(SP)-1SPPOP DPL;(SP)DPL,(SP)-1SP 結(jié)果為結(jié)果為(DPTR)=7030H,(SP)=60H。377累加器累加器A與外部數(shù)據(jù)存儲(chǔ)器與外部數(shù)據(jù)存儲(chǔ)器RAM/IO傳送指令傳送指令MOVX A,DPTR ;(DPTR)A,讀外部,讀外部RAM/IOMOVX A,Ri ;(Ri)A,讀外部,讀外部RAM/IOMOVX DPTR,A ;(A)(DPTR),寫外部,寫外部RAM/IO MOVX Ri ,A ;(A)(Ri),寫外部,寫外部RAM/IO373

26、8 MOV的后面加的后面加“X”,表示訪問的是片外,表示訪問的是片外RAM或或I/O口,在執(zhí)行前兩條指令,口,在執(zhí)行前兩條指令,RD* (P3.7)有效;后兩條指有效;后兩條指令令 WR*(P3.6)有效。有效。 采用采用16位的位的 DPTR間接尋址間接尋址,可尋址整個(gè)可尋址整個(gè)64KB片外數(shù)片外數(shù)據(jù)存儲(chǔ)器空間,高據(jù)存儲(chǔ)器空間,高8位地址(位地址(DPH)由)由P2口輸出,低口輸出,低8位位地址(地址(DPL)由)由P0口輸出??谳敵?。 采用采用Ri(i =0,1)進(jìn)行間接尋址,)進(jìn)行間接尋址,可尋址片外可尋址片外256個(gè)單個(gè)單元的數(shù)據(jù)存儲(chǔ)器。元的數(shù)據(jù)存儲(chǔ)器。8位地址由位地址由P0口輸出,鎖

27、存在地址鎖存口輸出,鎖存在地址鎖存器中,然后器中,然后P0口再作為口再作為8位數(shù)據(jù)口。位數(shù)據(jù)口。388查表指令查表指令 共共兩條兩條,僅有的僅有的兩條兩條讀程序存儲(chǔ)器中表格數(shù)據(jù)的讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令指令。由于。由于程序存儲(chǔ)器只讀不寫,程序存儲(chǔ)器只讀不寫,因此傳送為因此傳送為單向,單向,從從程序存儲(chǔ)器中讀出數(shù)據(jù)到程序存儲(chǔ)器中讀出數(shù)據(jù)到A中。兩條查表指令均采用基中。兩條查表指令均采用基址寄存器加變址寄存器間接尋址方式。址寄存器加變址寄存器間接尋址方式。(1)MOVCA,A+PC 以以PC作為基址寄存器作為基址寄存器,A的內(nèi)容的內(nèi)容(無符號(hào)數(shù)無符號(hào)數(shù))和和PC的的當(dāng)前值(下一條指令的起始地址

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

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

30、PTR將程序存儲(chǔ)器中將程序存儲(chǔ)器中8140H單元單元內(nèi)容送入內(nèi)容送入A中。中。42 本指令執(zhí)行結(jié)果只與指針本指令執(zhí)行結(jié)果只與指針DPTR及累加器及累加器A的內(nèi)容的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān)有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此,因此表格的大小和位置可以在表格的大小和位置可以在64KB程序存儲(chǔ)器空間程序存儲(chǔ)器空間中任意安排中任意安排,一個(gè)表格一個(gè)表格可以為各個(gè)程序塊公用可以為各個(gè)程序塊公用。 兩條指令的助記符都是在兩條指令的助記符都是在MOV的后面加的后面加“C”,是是CODE的第一個(gè)字母,即表示程序存儲(chǔ)器中的代碼。的第一個(gè)字母,即表示程序存儲(chǔ)器中的代碼

31、。 執(zhí)行上述兩條指令時(shí),單片機(jī)的執(zhí)行上述兩條指令時(shí),單片機(jī)的PSEN*引腳信號(hào)引腳信號(hào)(程序存儲(chǔ)器讀)有效,這一點(diǎn)讀者要牢記。程序存儲(chǔ)器讀)有效,這一點(diǎn)讀者要牢記。42439字節(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ù)的內(nèi)容和源操作數(shù)的內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接的內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等方式。

32、尋址和寄存器間接尋址等方式。43例如:例如: (A)=80H,(R7)=08H,(40H)=F0H (R0)=30H,(30H)=0FH執(zhí)行下列指令:執(zhí)行下列指令:45XCH A,R7 ;(A) 與與(R7)互換互換XCH A,40H ;(A)與與(40H)互換互換XCH A,R0 ;(A)與與(R0)互換互換結(jié)果為結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H10半字節(jié)交換指令半字節(jié)交換指令XCHD A,Ri累加器的累加器的低低4位位與內(nèi)部與內(nèi)部RAM低低4位位交換。交換。例如:例如:(R0)=60H,(60H)=3EH,(A)=59H,執(zhí)行完執(zhí)行完“XCHD

33、 A,R0”指令,指令,則則(A)=5EH,(60H)=39H。473.4.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令算術(shù)運(yùn)算功能比較強(qiáng)。算術(shù)運(yùn)算功能比較強(qiáng)。 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令都是針對(duì)都是針對(duì)8位位二進(jìn)制二進(jìn)制無符號(hào)數(shù)無符號(hào)數(shù)的,的,如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。 算術(shù)運(yùn)算的結(jié)果將使算術(shù)運(yùn)算的結(jié)果將使PSW的進(jìn)位(的進(jìn)位(Cy)、輔助)、輔助進(jìn)位(進(jìn)位(Ac)、溢出()、溢出(OV)3種標(biāo)志

34、位種標(biāo)志位置置1或清或清0。但。但增增1和和減減1指令指令不影響這些標(biāo)志。不影響這些標(biāo)志。47491加法指令加法指令4條指令:條指令: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)+#dataA49 8位加法指令的位加法指令的一個(gè)加數(shù)一個(gè)加數(shù)總是總是來自累加器來自累加器A,而而另一個(gè)加數(shù)另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋址方式得到。器間接尋址和立即數(shù)尋址等不同的尋址方式得到。加的結(jié)果總是

35、放在累加器加的結(jié)果總是放在累加器A中。中。 使用本指令時(shí),要注意累加器使用本指令時(shí),要注意累加器A中的運(yùn)算結(jié)果中的運(yùn)算結(jié)果對(duì)對(duì)各個(gè)標(biāo)志位的影響:各個(gè)標(biāo)志位的影響:(1)如果)如果位位7有進(jìn)位,有進(jìn)位,進(jìn)位標(biāo)志進(jìn)位標(biāo)志Cy置置1,否則否則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)位,或者或者位位7有有進(jìn)位,進(jìn)位,而而位位6沒有進(jìn)位,沒有進(jìn)位,則溢出標(biāo)志位則溢出標(biāo)志位OV置置1,否則否則OV清清0。注意:注意:u 對(duì)于無符號(hào)

36、數(shù),進(jìn)位標(biāo)志位對(duì)于無符號(hào)數(shù),進(jìn)位標(biāo)志位CY1,表,表示溢出;示溢出;CY0表示無溢出。表示無溢出。u 溢出標(biāo)志位溢出標(biāo)志位OV的狀態(tài)只有帶符號(hào)數(shù)加的狀態(tài)只有帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。法運(yùn)算時(shí)才有意義。OV1表示兩個(gè)正表示兩個(gè)正數(shù)相加,和變?yōu)樨?fù)數(shù),或兩個(gè)負(fù)數(shù)相加,數(shù)相加,和變?yōu)樨?fù)數(shù),或兩個(gè)負(fù)數(shù)相加,和變?yōu)檎龜?shù)的錯(cuò)誤結(jié)果。和變?yōu)檎龜?shù)的錯(cuò)誤結(jié)果。 53【例【例3-1】(A)=53H,(R0)=FCH,執(zhí)行指令,執(zhí)行指令A(yù)DD A,R0運(yùn)算式為運(yùn)算式為 結(jié)果:結(jié)果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中中1的的位數(shù)為奇數(shù))。位數(shù)為奇數(shù))。注意:注意:在上面運(yùn)算中,由于位在上面運(yùn)算

37、中,由于位6和位和位7同時(shí)有進(jìn)位,所以同時(shí)有進(jìn)位,所以標(biāo)志位標(biāo)志位OV=0。5354【例【例3-2】 (A)= 85H,(R0)=20H,(,(20H)=AFH,執(zhí)行指,執(zhí)行指令令 ADD A,R0 運(yùn)算式為運(yùn)算式為 結(jié)果:結(jié)果:(A)=34H,Cy=1,Ac=1,OV=1,P=1。注意:注意:由于位由于位7有進(jìn)位,而位有進(jìn)位,而位6無進(jìn)位,所以標(biāo)志位無進(jìn)位,所以標(biāo)志位OV=1。54552帶進(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,dir

38、ect ;(A)+(direct)+CAADDC A,Ri ;(A)+(Ri)+CA,i =0,1ADDC A,#data ;(A)+#data+CA55 如果如果位位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”; 如果如果位位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”。57【例【例3-3】 (A)=85H,(20H)=FFH,Cy=1

39、,執(zhí)行指令,執(zhí)行指令 ADDCA,20H運(yùn)算式為運(yùn)算式為 結(jié)果為結(jié)果為 (A)=85H,Cy=1,Ac=1,OV=0,P=1 (A中中1的位數(shù)為奇數(shù))。的位數(shù)為奇數(shù))。57583增增1指令指令5條指令:條指令:INC AINC Rn ;n=07INC direct INC Ri ;i =0,1 INC DPTR把指令中所指出的變量增把指令中所指出的變量增1,且,且不影響不影響PSW中的任何標(biāo)志。中的任何標(biāo)志。指令指令“INC DPTR”,16位數(shù)增位數(shù)增1指令。首先對(duì)低指令。首先對(duì)低8位指針位指針DPL執(zhí)行加執(zhí)行加1,當(dāng)溢出時(shí),就對(duì),當(dāng)溢出時(shí),就對(duì)DPH的內(nèi)容進(jìn)行加的內(nèi)容進(jìn)行加1,不,不影響標(biāo)

40、志影響標(biāo)志Cy。58594十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 用于對(duì)用于對(duì)BCD碼加法碼加法運(yùn)算結(jié)果的內(nèi)容運(yùn)算結(jié)果的內(nèi)容修正,修正,指令格式為:指令格式為: DA A 是對(duì)壓縮的是對(duì)壓縮的BCD碼(一個(gè)字節(jié)存放碼(一個(gè)字節(jié)存放2位位BCD碼)的加法碼)的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。結(jié)果進(jìn)行十進(jìn)制調(diào)整。 兩個(gè)兩個(gè)BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮能得到正確的壓縮BCD碼的和數(shù)。碼的和數(shù)。 (1)十進(jìn)制調(diào)整問題)十進(jìn)制調(diào)整問題 對(duì)對(duì)BCD碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二進(jìn)制數(shù)加法原則上并不

41、適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)進(jìn)制數(shù)加法原則上并不適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)會(huì)產(chǎn)生錯(cuò)誤結(jié)果。例如:會(huì)產(chǎn)生錯(cuò)誤結(jié)果。例如:5960上述的上述的BCD碼運(yùn)算中:碼運(yùn)算中:(a)結(jié)果正確。)結(jié)果正確。(b)結(jié)果不正確,因?yàn)椋┙Y(jié)果不正確,因?yàn)锽CD碼中沒有碼中沒有1111這個(gè)編碼。這個(gè)編碼。(c)結(jié)果不正確,正確結(jié)果應(yīng)為)結(jié)果不正確,正確結(jié)果應(yīng)為17,而運(yùn)算結(jié)果卻是,而運(yùn)算結(jié)果卻是11??梢姡M(jìn)制數(shù)加法指令不能完全適用于可見,二進(jìn)制數(shù)加法指令不能完全適用于BCD碼十進(jìn)制數(shù)的加法運(yùn)碼十進(jìn)制數(shù)的加法運(yùn)算,要對(duì)結(jié)果做有條件的修正,這就是所謂的十進(jìn)制調(diào)整問題。算,要對(duì)結(jié)果做有條件的修正,這就是所謂的十進(jìn)制調(diào)

42、整問題。6061(2)出錯(cuò)原因和調(diào)整方法)出錯(cuò)原因和調(diào)整方法 出錯(cuò)原因在于出錯(cuò)原因在于BCD碼共有碼共有16個(gè)編碼,個(gè)編碼,但但只用其中的只用其中的10個(gè),個(gè),剩下剩下6個(gè)沒用到。這個(gè)沒用到。這6個(gè)個(gè)沒用到的編碼(沒用到的編碼(1010,1011,1100,1101,1110,1111)為為無效編碼。無效編碼。 在在BCD碼加運(yùn)算中,凡結(jié)果進(jìn)入或者跳過碼加運(yùn)算中,凡結(jié)果進(jìn)入或者跳過無效編碼無效編碼區(qū)區(qū)時(shí),結(jié)果出錯(cuò)。因此時(shí),結(jié)果出錯(cuò)。因此1位位BCD碼加法運(yùn)算出錯(cuò)的情況碼加法運(yùn)算出錯(cuò)的情況有有兩種:兩種:61 加結(jié)果加結(jié)果大于大于9,說明已經(jīng)說明已經(jīng)進(jìn)入進(jìn)入無效編碼區(qū)。無效編碼區(qū)。 加結(jié)果加結(jié)果

43、有進(jìn)位,有進(jìn)位,說明已經(jīng)說明已經(jīng)跳過跳過無效編碼區(qū)。無效編碼區(qū)。無論哪種錯(cuò)誤,都因?yàn)闊o論哪種錯(cuò)誤,都因?yàn)?個(gè)無效編碼個(gè)無效編碼造成的。因此,只造成的。因此,只要出現(xiàn)上述兩種情況之一,就必須調(diào)整。要出現(xiàn)上述兩種情況之一,就必須調(diào)整。方法是把運(yùn)算方法是把運(yùn)算結(jié)果結(jié)果加加6調(diào)整,調(diào)整,即即十進(jìn)制調(diào)整修正。十進(jìn)制調(diào)整修正。63十進(jìn)制調(diào)整方法如下:十進(jìn)制調(diào)整方法如下: 累加器累加器低低4位大于位大于9或或輔助進(jìn)位位輔助進(jìn)位位Ac=1,則低則低4位加位加6修修正。正。 累加器累加器高高4位大于位大于9或或進(jìn)位位進(jìn)位位Cy=1,則則高高4位加位加6修正。修正。 累加器累加器高高4位為位為9,低,低4位大于位

44、大于9,高高4位和低位和低4位分別加位分別加6修正。修正。上述調(diào)整修正,是上述調(diào)整修正,是通過執(zhí)行指令通過執(zhí)行指令“DA A”來自動(dòng)實(shí)現(xiàn)的來自動(dòng)實(shí)現(xiàn)的。63【例【例3-4】 (A)=56H,(R5)=67H,把它們看作兩個(gè)壓縮,把它們看作兩個(gè)壓縮的的BCD數(shù),進(jìn)行數(shù),進(jìn)行BCD加法。執(zhí)行指令:加法。執(zhí)行指令:ADD A,R5DA A高高4位和低位和低4位分別大于位分別大于9,所以,所以“DA A”指令要分別加指令要分別加6,對(duì)結(jié)果修正。,對(duì)結(jié)果修正。65結(jié)果為結(jié)果為(A)=23H,Cy=1。由上可見,由上可見,56+67=123,結(jié)果正確。,結(jié)果正確。65665帶借位的減法指令帶借位的減法指令

45、4條指令:條指令:SUBB A,Rn ; (A)-(Rn)-CyA,n =07SUBB A,direct ; (A)-(direct)-CyASUBB A,Ri ; (A)-(Ri)-CyA, i =0,1SUBB A,#data ; (A)-#data-CyA66 從從A的內(nèi)容減去指定變量和進(jìn)位標(biāo)志的內(nèi)容減去指定變量和進(jìn)位標(biāo)志Cy的值,結(jié)果的值,結(jié)果存在存在A中。中。 如果位如果位7需借位需借位則則Cy置置1,否則,否則Cy清清0; 如果位如果位3需借位需借位則則Ac置置1,否則,否則Ac清清0; 如果位如果位6借位而位借位而位7不借位,或者位不借位,或者位7借位而位借位而位6不借不借位,位

46、,則溢出標(biāo)志位則溢出標(biāo)志位OV置置“1”,否則,否則OV清清“0”。68【例【例3-5】 (A)=C9H,(R2)=54H,Cy=1,執(zhí)行指令,執(zhí)行指令SUBB A,R2運(yùn)算式為運(yùn)算式為 結(jié)果:結(jié)果: (A)=74H,Cy=0,Ac=0,OV=1(位(位6向位向位7借借位)。位)。68696減減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)志位,不影響標(biāo)志

47、位(P標(biāo)志除外)。標(biāo)志除外)。69【例【例3-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,執(zhí)行指令,執(zhí)行指令DEC A;(A)-1ADEC R7;(R7)-1R7DEC 30H;(30H)-130HDEC R1;(R1)-1(R1)結(jié)果:結(jié)果:(A)=0EH,(R7)=18H,(30H)=0FFH, (40H)=0FEH,P=1,不影響其他標(biāo)志。,不影響其他標(biāo)志。717乘法指令乘法指令MUL AB ;ABBA 積的積的低字節(jié)低字節(jié)在累加器在累加器A中,中,高字節(jié)高字節(jié)在在B中。如果積中。如果積大于大于255,則,則OV置置1,否則,否則O

48、V清清0。Cy標(biāo)志總是清標(biāo)志總是清0。71728除法指令除法指令 DIV AB ;A/BA(商商),余數(shù),余數(shù)B 商商(為整數(shù))存放在(為整數(shù))存放在A中,中,余數(shù)余數(shù)存放在存放在B中,且中,且Cy和溢出標(biāo)志位和溢出標(biāo)志位OV清清“0”。 如果如果B的內(nèi)容為的內(nèi)容為0(即除數(shù)為(即除數(shù)為0),則存放結(jié)果的),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位中的內(nèi)容不定,并溢出標(biāo)志位OV置置1?!纠纠?-7】 (A)=FBH,(B)=12H,執(zhí)行指令,執(zhí)行指令DIV AB結(jié)果:結(jié)果: (A)=0DH,(B)=11H,Cy=0,OV=0。723.4.3 邏輯操作類指令邏輯操作類指令1累加器累加器A

49、清清“0”指令指令CLR A累加器累加器A清清0。不影響。不影響Cy、Ac、OV等標(biāo)志位。等標(biāo)志位。2累加器累加器A求反指令求反指令CPL A將累加器將累加器A的內(nèi)容按位邏輯取反,不影響標(biāo)志位。的內(nèi)容按位邏輯取反,不影響標(biāo)志位。743左環(huán)移指令左環(huán)移指令 RLA功能是功能是A向左循環(huán)移位,位向左循環(huán)移位,位7循環(huán)移入位循環(huán)移入位0,不影響標(biāo)志,不影響標(biāo)志位,如圖位,如圖3-1所示。所示。74圖圖3-1 左環(huán)移操作左環(huán)移操作4帶進(jìn)位左環(huán)移指令帶進(jìn)位左環(huán)移指令RLC A將累加器將累加器A的內(nèi)容和進(jìn)位標(biāo)志位的內(nèi)容和進(jìn)位標(biāo)志位Cy一起向左環(huán)移一位,如一起向左環(huán)移一位,如圖圖3-2 所示。所示。圖圖3-

50、2 帶進(jìn)位左環(huán)移操作帶進(jìn)位左環(huán)移操作765右環(huán)移指令右環(huán)移指令 RR A這條指令的功能是這條指令的功能是A的內(nèi)容向右環(huán)移一位不影響其他標(biāo)的內(nèi)容向右環(huán)移一位不影響其他標(biāo)志位,如圖志位,如圖3-3所示。所示。76圖圖3-3 右環(huán)移操作右環(huán)移操作6帶進(jìn)位右環(huán)移指令帶進(jìn)位右環(huán)移指令RRC AA的內(nèi)容和進(jìn)位標(biāo)志的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,如圖一起向右環(huán)移一位,如圖3-4所示。所示。圖圖3-4 帶進(jìn)位右環(huán)移操作帶進(jìn)位右環(huán)移操作787累加器半字節(jié)交換指令累加器半字節(jié)交換指令 SWAP A 是將累加器是將累加器A的高半字節(jié)(的高半字節(jié)(Acc.7Acc.4)和低半字節(jié)(和低半字節(jié)(Acc.3Acc.

51、0)互換。)互換?!纠纠?-8】 (A)= 95H,執(zhí)行指令,執(zhí)行指令SWAP A 結(jié)果為結(jié)果為 (A)=59H。788邏輯與指令邏輯與指令A(yù)NL A,Rn;(A)(Rn)A,n=07 ANL A,direct;(A)(direct)AANL A,#data;(A)#dataAANL A,Ri;(A)(Ri)A,i =01ANL direct,A;(direct)(A)directANL direct,#data;(direct)#datadirect是在指定的變量之間以位為基礎(chǔ)進(jìn)行是在指定的變量之間以位為基礎(chǔ)進(jìn)行“邏輯與邏輯與”操作,操作,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中。結(jié)果存放

52、到目的變量所在的寄存器或存儲(chǔ)器中。80【例【例3-9】 (A)=07H,(R0)=0FDH,執(zhí)行指令,執(zhí)行指令 ANLA,R0運(yùn)算式為運(yùn)算式為結(jié)果:結(jié)果: (A)=05H。80819邏輯或指令邏輯或指令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í)行位的是在所指定的變量之間執(zhí)行位的“邏輯或邏輯或”操作,結(jié)果存操

53、作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。到目的變量寄存器或存儲(chǔ)器中。8182【例【例3-10】 (P1)=05H,(A)=33H,執(zhí)行指令,執(zhí)行指令 ORLP1,A運(yùn)算式為運(yùn)算式為結(jié)果:結(jié)果:(P1)=37H。828310邏輯異或指令邏輯異或指令XRL A,Rn ;(A) (Rn)A,n=07XRL A,direct ;(A) (direct)AXRL A,Ri ;(A) (Ri)A ,i =0,1XRL A,#data ;(A) #dataAXRL direct,A ;(direct) (A)directXRL direct,#data ;(direct) #data direct功能是在所指

54、定的變量之間執(zhí)行以功能是在所指定的變量之間執(zhí)行以位位的的“邏輯異或邏輯異或”操作,操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。結(jié)果存到目的變量寄存器或存儲(chǔ)器中。8384【例【例3-11】 (A)=90H,(R3)=73H,執(zhí)行指令,執(zhí)行指令 XRLA,R3運(yùn)算式為運(yùn)算式為結(jié)果:結(jié)果: (A)=E3H。84853.4.4 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令1長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令LJMPaddr16 指令執(zhí)行時(shí),把轉(zhuǎn)移的目的地址,即指令的第二和指令執(zhí)行時(shí),把轉(zhuǎn)移的目的地址,即指令的第二和第三字節(jié)分別裝入第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)的高位和低位字節(jié)中,無條件地轉(zhuǎn)向向addr16指定的目的

55、地址:指定的目的地址:64KB程序存儲(chǔ)器地址空間的程序存儲(chǔ)器地址空間的任何位置。任何位置。852相對(duì)轉(zhuǎn)移指令相對(duì)轉(zhuǎn)移指令SJMPrel 無條件轉(zhuǎn)移,無條件轉(zhuǎn)移,rel為相對(duì)偏移量,是一單字節(jié)的帶符為相對(duì)偏移量,是一單字節(jié)的帶符號(hào)號(hào)8位二進(jìn)制補(bǔ)碼數(shù),因此程序轉(zhuǎn)移是雙向的。位二進(jìn)制補(bǔ)碼數(shù),因此程序轉(zhuǎn)移是雙向的。rel如為如為正,正,向向地址增大地址增大的方向轉(zhuǎn)移;的方向轉(zhuǎn)移;rel如為負(fù),如為負(fù),向向地址減小地址減小的方向轉(zhuǎn)移。的方向轉(zhuǎn)移。87 執(zhí)行時(shí),在執(zhí)行時(shí),在PC加加2(本指令為(本指令為2B)之后,把指令的有符)之后,把指令的有符號(hào)的偏移量號(hào)的偏移量rel加到加到PC上,并計(jì)算出目的地址。

56、上,并計(jì)算出目的地址。 編程時(shí),只需寫上目的地址標(biāo)號(hào),編程時(shí),只需寫上目的地址標(biāo)號(hào), 相對(duì)偏移量由匯編程相對(duì)偏移量由匯編程序自動(dòng)計(jì)算。例如:序自動(dòng)計(jì)算。例如:LOOP:MOV A,R6 SJMP LOOP 匯編時(shí),跳到匯編時(shí),跳到LOOP處的偏移量由匯編程序自動(dòng)計(jì)算和填入處的偏移量由匯編程序自動(dòng)計(jì)算和填入873絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令A(yù)JMPaddr11指令雙字節(jié),格式如下:指令雙字節(jié),格式如下:89 指令指令提供提供11位地址位地址A10A0(即(即addr11),其中),其中A10A8則位于則位于第第1字節(jié)的高字節(jié)的高3位位,A7A0在在第第2字節(jié)字節(jié)。操作碼操作碼只占只占第第1字節(jié)的低字

57、節(jié)的低5位位。 指令構(gòu)造轉(zhuǎn)移目的地址:指令構(gòu)造轉(zhuǎn)移目的地址:執(zhí)行本指令,執(zhí)行本指令,PC加加2,然后把指令中的然后把指令中的11位位無符號(hào)整數(shù)地址無符號(hào)整數(shù)地址addr11(A10A0)送入送入PC.10PC.0,PC.15PC.11保持保持不變,不變,形成新形成新的的16位轉(zhuǎn)移目的地址。位轉(zhuǎn)移目的地址。90 需注意,目標(biāo)地址必須與需注意,目標(biāo)地址必須與AJMP指令的下一條指令首指令的下一條指令首地址的高地址的高5位地址碼位地址碼A15A11相同,否則將混亂。所以相同,否則將混亂。所以,是,是2KB范圍范圍內(nèi)的內(nèi)的無條件跳轉(zhuǎn)無條件跳轉(zhuǎn)指令。指令。4間接跳轉(zhuǎn)指令間接跳轉(zhuǎn)指令 JMP A+DPTR

58、 單字節(jié)轉(zhuǎn)移指令,單字節(jié)轉(zhuǎn)移指令,目的地址目的地址由由A中中8位無符號(hào)數(shù)與位無符號(hào)數(shù)與DPTR的的16位無符號(hào)數(shù)內(nèi)容之和來確定。以位無符號(hào)數(shù)內(nèi)容之和來確定。以DPTR內(nèi)容內(nèi)容為為基址,基址,A的內(nèi)容作為的內(nèi)容作為變址。變址。給給A賦予不同值,即可實(shí)賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移?,F(xiàn)多分支轉(zhuǎn)移。915條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 執(zhí)行指令時(shí),如執(zhí)行指令時(shí),如條件滿足,條件滿足,則轉(zhuǎn)移;則轉(zhuǎn)移;不滿足,則不滿足,則順序執(zhí)行下一指令。順序執(zhí)行下一指令。轉(zhuǎn)移目的地址轉(zhuǎn)移目的地址在以下一條指令在以下一條指令首地址為中心的首地址為中心的256B范圍范圍內(nèi)(內(nèi)(-128+127)。)。JZrel;如果累加器內(nèi)容

59、為;如果累加器內(nèi)容為0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移JNZ rel;如果累加器內(nèi)容非;如果累加器內(nèi)容非0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移926比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令CJNE A,direct,relCJNE A,#data,relCJNE Rn,#data,relCJNE Ri,#data,rel 比較前兩個(gè)操作數(shù)大小,如果值比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移,不相等則轉(zhuǎn)移,并轉(zhuǎn)并轉(zhuǎn)向目的地址。向目的地址。 如果第一操作數(shù)如果第一操作數(shù)(無符號(hào)整數(shù))(無符號(hào)整數(shù))小于第二操作數(shù)小于第二操作數(shù)(無(無符號(hào)整數(shù)),則進(jìn)位標(biāo)志位符號(hào)整數(shù)),則進(jìn)位標(biāo)志位Cy置置1,否則,否則Cy清清0。該指令。

60、該指令的執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。的執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。93 7減減1不為不為0轉(zhuǎn)移指令轉(zhuǎn)移指令把減把減1與條件轉(zhuǎn)移兩種功能合在一起。與條件轉(zhuǎn)移兩種功能合在一起。兩條:兩條:DJNZRn,rel;n =07DJNZdirect,rel 用于控制程序循環(huán)。用于控制程序循環(huán)。預(yù)先裝入循環(huán)次數(shù),預(yù)先裝入循環(huán)次數(shù),以減以減1后是否后是否為為“0”作為轉(zhuǎn)移條件,作為轉(zhuǎn)移條件,即實(shí)現(xiàn)按次數(shù)控制循環(huán)。即實(shí)現(xiàn)按次數(shù)控制循環(huán)。8調(diào)用子程序指令調(diào)用子程序指令(1)長(zhǎng)調(diào)用指令)長(zhǎng)調(diào)用指令 LCALL addr16 可調(diào)用可調(diào)用64KB范圍范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論