單片機(jī)原理及應(yīng)用陳燕第3章 指令系統(tǒng)_第1頁
單片機(jī)原理及應(yīng)用陳燕第3章 指令系統(tǒng)_第2頁
單片機(jī)原理及應(yīng)用陳燕第3章 指令系統(tǒng)_第3頁
單片機(jī)原理及應(yīng)用陳燕第3章 指令系統(tǒng)_第4頁
單片機(jī)原理及應(yīng)用陳燕第3章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第3章 at89s51單片機(jī)的 指令系統(tǒng)1第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)2at89s51at89s51單片機(jī)單片機(jī)使用使用mcs-51mcs-51指令系統(tǒng)指令系統(tǒng)。n介紹指令系統(tǒng)介紹指令系統(tǒng)尋址方式尋址方式n對對111111條條基本指令基本指令按功能分類詳細(xì)講解按功能分類詳細(xì)講解。指令指令-是是cpucpu按照人們的意圖來完成某種操作的命令,它以按照人們的意圖來完成某種操作的命令,它以英文名稱或縮寫形式作為英文名稱或縮寫形式作為助記符助記符。匯編語言指令匯編語言指令-用助記符、符號地址、標(biāo)號等表示的書寫用助記符、符號地址、標(biāo)號等表示的書寫程序的語

2、言。程序的語言。掌握匯編語言指令是程序設(shè)計(jì)的掌握匯編語言指令是程序設(shè)計(jì)的基礎(chǔ)?;A(chǔ)。內(nèi)容概要內(nèi)容概要第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)33.1 3.1 指令系統(tǒng)概述指令系統(tǒng)概述簡明、易掌握、效率較高的指令系統(tǒng),簡明、易掌握、效率較高的指令系統(tǒng),復(fù)雜指令集復(fù)雜指令集。按按所占字節(jié)分所占字節(jié)分,分,分三種三種:(1 1)單字節(jié)指令)單字節(jié)指令4949條;條;(2 2)雙字節(jié)指令)雙字節(jié)指令4545條;條;(3 3)三字節(jié)指令)三字節(jié)指令1717條。條。按按執(zhí)行時(shí)間來分執(zhí)行時(shí)間來分,分三種:,分三種:(1 1)1 1個(gè)個(gè)機(jī)器周期(機(jī)器周期(1212個(gè)時(shí)鐘振蕩

3、周期)的指令個(gè)時(shí)鐘振蕩周期)的指令6464條條;(2 2)2 2個(gè)個(gè)機(jī)器周期指令機(jī)器周期指令4545條條;(3 3)4 4個(gè)個(gè)機(jī)器周期機(jī)器周期乘、除指令。乘、除指令。12mhz12mhz晶振,每個(gè)機(jī)器周期為晶振,每個(gè)機(jī)器周期為1 1 s s。at89s51at89s51一大特點(diǎn)一大特點(diǎn)是在硬件結(jié)構(gòu)中有一個(gè)是在硬件結(jié)構(gòu)中有一個(gè)位處理機(jī)位處理機(jī),一個(gè)處理,一個(gè)處理位變量位變量的的指令子集指令子集。3第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)43.2 3.2 指令格式指令格式 指令格式:指令格式:指令的表示方法。指令的表示方法。指令通常由指令通常由兩部分兩部分組成:

4、組成:操作碼操作碼和和操作數(shù)操作數(shù)。操作碼操作碼指令進(jìn)行什么指令進(jìn)行什么操作操作。操作數(shù)操作數(shù)指令操作的指令操作的對象對象??赡苁且痪唧w數(shù)據(jù),也可能是指??赡苁且痪唧w數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號。出到哪里取得數(shù)據(jù)的地址或符號。指令長度不同,格式也就不同。指令長度不同,格式也就不同。(1 1)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。(2 2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù))雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。(3 3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)

5、占二個(gè)字節(jié)。4第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)53.3 3.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式尋址方式尋址方式在指令中說明操作數(shù)所在地址的方法。在指令中說明操作數(shù)所在地址的方法。一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,指令系統(tǒng)一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,指令系統(tǒng)就越復(fù)雜。就越復(fù)雜。尋址方式所要解決的主要問題尋址方式所要解決的主要問題就是如何在整個(gè)存儲器和寄存器的就是如何在整個(gè)存儲器和寄存器的尋址空間內(nèi)快速地尋址空間內(nèi)快速地找到指定的地址單元找到指定的地址單元。下面介紹指令系統(tǒng)下面介紹指令系統(tǒng)7 7種種尋址方式。尋址方

6、式。5第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)61 1寄存器尋址方式寄存器尋址方式指令中的操作數(shù)為某一寄存器的內(nèi)容。指令中的操作數(shù)為某一寄存器的內(nèi)容。例如:例如:movmova a,r rn n ;(r(rn n)a)a,n n =0=07 7把把r rn n中的源操作數(shù)送入到累加器中的源操作數(shù)送入到累加器a a中。由于指令指定了從寄存中。由于指令指定了從寄存器器r rn n中取得源操作數(shù),所以稱為寄存器尋址方式。中取得源操作數(shù),所以稱為寄存器尋址方式。本尋址方式的尋址范圍:本尋址方式的尋址范圍:(1 1)4 4組通用工作寄存區(qū)共組通用工作寄存區(qū)共3232個(gè)

7、工作寄存器。但只對個(gè)工作寄存器。但只對當(dāng)前工當(dāng)前工作寄存器區(qū)作寄存器區(qū)的的8 8個(gè)工作寄存器尋址,指令中的寄存器名稱只個(gè)工作寄存器尋址,指令中的寄存器名稱只能是能是r0r0r7r7。(2 2)部分特殊功能寄存器,如累加器)部分特殊功能寄存器,如累加器a a、寄存器、寄存器b b以及數(shù)據(jù)指以及數(shù)據(jù)指針寄存器針寄存器dptrdptr等。等。6第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)72 2直接尋址方式直接尋址方式指令中直接給出操作數(shù)的單元地址,該單元地址中的內(nèi)容就指令中直接給出操作數(shù)的單元地址,該單元地址中的內(nèi)容就是操作數(shù),直接的操作數(shù)單元地址用是操作數(shù),直接的

8、操作數(shù)單元地址用“direct”direct”表示。表示。例如:例如: movmova a,directdirect “direct”“direct”就是操作數(shù)的單元地址。就是操作數(shù)的單元地址。例如:例如: movmova a,40h40h 表示把內(nèi)部表示把內(nèi)部ram 40hram 40h單元(單元(directdirect)的內(nèi)容傳送到)的內(nèi)容傳送到a a。指令中。指令中源操作數(shù)(右邊的操作數(shù))采用的是源操作數(shù)(右邊的操作數(shù))采用的是直接尋址方式直接尋址方式。指令中兩個(gè)操作數(shù)都可由直接尋址方式給出。指令中兩個(gè)操作數(shù)都可由直接尋址方式給出。例如:例如: movmov direct1direct

9、1,direct2direct2具體指令:具體指令:mov 42hmov 42h,62h62h把片內(nèi)把片內(nèi)ramram中中62h62h單元的內(nèi)容送到片內(nèi)單元的內(nèi)容送到片內(nèi)ramram中的中的42h42h單元中。單元中。直接尋址直接尋址是訪問片內(nèi)所有特殊功能寄存器的是訪問片內(nèi)所有特殊功能寄存器的唯一尋址方式。唯一尋址方式。7第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)83. 3. 寄存器間接尋址方式寄存器間接尋址方式寄存器中存的是寄存器中存的是操作數(shù)地址操作數(shù)地址,即先從寄存器中找到操作數(shù)的地,即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù)。址,再按該地址找

10、到操作數(shù)。為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器名稱前面加式中,應(yīng)在寄存器名稱前面加前綴標(biāo)志前綴標(biāo)志“”。例如:例如:mov amov a,rri 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。8第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)94 4立即數(shù)尋址方式立即數(shù)尋址方式直接在指令中給出操作數(shù)直接在指令中給出操作數(shù)也稱也稱立即數(shù)立即數(shù)。為

11、了與直接尋址指。為了與直接尋址指令中的直接地址加以區(qū)別,令中的直接地址加以區(qū)別,需在操作數(shù)前加前綴標(biāo)志需在操作數(shù)前加前綴標(biāo)志“#”#”。例如:例如: mov amov a,#40h#40h表示把立即數(shù)表示把立即數(shù)40h40h送給送給a a,40h40h這個(gè)常數(shù)是指令代碼的一部分。這個(gè)常數(shù)是指令代碼的一部分。第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在程序存第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在程序存儲器內(nèi)的常數(shù)。儲器內(nèi)的常數(shù)。9第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)105 5基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式以以

12、dptrdptr或或pcpc作為作為基址寄存器基址寄存器,以累加器,以累加器a a作為作為變址寄存器變址寄存器,以兩者內(nèi)容相加形成的以兩者內(nèi)容相加形成的1616位地址作為目的地址進(jìn)行尋址。位地址作為目的地址進(jìn)行尋址。例如指令:例如指令: movcmovc a a,a+dptra+dptr 其中,(其中,(a a)=05h=05h,(,(dptrdptr)=0400h=0400h,指令執(zhí)行結(jié)果是把程,指令執(zhí)行結(jié)果是把程序存儲器序存儲器0405h0405h單元的內(nèi)容傳送給單元的內(nèi)容傳送給a a。本尋址方式的本尋址方式的指令有指令有3 3條條:movcmovca a,a+dptra+dptrmovc

13、movca a,a+pca+pcjmpjmpa+dptra+dptr前兩條指令適用于讀程序存儲器中固定的數(shù)據(jù)。前兩條指令適用于讀程序存儲器中固定的數(shù)據(jù)。10第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)11例如,例如,將固定的、按一定順序排列的將固定的、按一定順序排列的表格表格存放在程序存儲器存放在程序存儲器中,在程序運(yùn)行中由中,在程序運(yùn)行中由a a的動態(tài)參量來確定讀取對應(yīng)的表格的動態(tài)參量來確定讀取對應(yīng)的表格參數(shù)。參數(shù)。第第3 3條為條為散轉(zhuǎn)指令散轉(zhuǎn)指令,a a中內(nèi)容為程序運(yùn)行后的動態(tài)結(jié)果,可根中內(nèi)容為程序運(yùn)行后的動態(tài)結(jié)果,可根據(jù)據(jù)a a中不同內(nèi)容,實(shí)現(xiàn)跳向不同程

14、序入口的跳轉(zhuǎn)。中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)126 6相對尋址方式相對尋址方式解決程序轉(zhuǎn)移。該尋址是以該轉(zhuǎn)移指令的地址(解決程序轉(zhuǎn)移。該尋址是以該轉(zhuǎn)移指令的地址(pcpc值)加上值)加上它的字節(jié)數(shù),再加上它的字節(jié)數(shù),再加上相對偏移量(相對偏移量(relrel),),形成形成新的轉(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ù)+re

15、l+rel其中,其中,偏移量偏移量relrel是帶符號是帶符號8 8位二進(jìn)制補(bǔ)碼數(shù),位二進(jìn)制補(bǔ)碼數(shù),128128+127+127。程序轉(zhuǎn)移范圍程序轉(zhuǎn)移范圍是以轉(zhuǎn)移指令的是以轉(zhuǎn)移指令的下條指令首地址下條指令首地址為基準(zhǔn)地址,為基準(zhǔn)地址,相對偏移在相對偏移在128128+127+127之間。之間。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)13例如,例如, ljmp relljmp rel程序要轉(zhuǎn)移到該指令的程序要轉(zhuǎn)移到該指令的pcpc值加值加3 3再加上再加上relrel的目的地址處。編寫的目的地址處。編寫程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號。程序時(shí),只

16、需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號。例如:例如: ljmp loopljmp loop “l(fā)oop” “l(fā)oop” 為目的地址標(biāo)號。匯編時(shí),由匯編程序自動計(jì)算和為目的地址標(biāo)號。匯編時(shí),由匯編程序自動計(jì)算和填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。13第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)147 7位尋址方式位尋址方式 對內(nèi)部對內(nèi)部ramram和特殊功能寄存器具有位尋址功能的某位內(nèi)容進(jìn)行和特殊功能寄存器具有位尋址功能的某位內(nèi)容進(jìn)行置置1 1和清和清0 0操作。操作。位地址一般以位地址一般以直接位地址直接

17、位地址給出,位地址符號為給出,位地址符號為“bit”bit”。例如:例如:mov cmov c,bitbit 其具體指令:其具體指令: mov cmov c,40h40h把位地址為把位地址為40h40h的值送到進(jìn)位位的值送到進(jìn)位位c c。由于由于at89s51at89s51具有位處理功能,可直接對數(shù)據(jù)位方便地實(shí)現(xiàn)置具有位處理功能,可直接對數(shù)據(jù)位方便地實(shí)現(xiàn)置1 1、清、清0 0、求反、傳送、判跳和邏輯運(yùn)算等操作,為測控系、求反、傳送、判跳和邏輯運(yùn)算等操作,為測控系統(tǒng)的應(yīng)用提供了最佳代碼和速度,增強(qiáng)了實(shí)時(shí)性。統(tǒng)的應(yīng)用提供了最佳代碼和速度,增強(qiáng)了實(shí)時(shí)性。14第第3 3章章 at89s51at89s5

18、1單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)157 7種尋址方式種尋址方式已介紹完畢。已介紹完畢。問題:問題:當(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”來來說,是屬于說,是屬于“寄存器尋址

19、寄存器尋址”方式。方式。一般而言,一般而言,尋址方式指的是尋址方式指的是源操作數(shù)源操作數(shù),所以此例為立即數(shù)尋,所以此例為立即數(shù)尋址方式。址方式。對指令系統(tǒng)對指令系統(tǒng)7 7種尋址方式種尋址方式總結(jié),概括見總結(jié),概括見表表3-13-1。15第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)1616序號序號1 12 23 34 45 56 67 7尋址方式尋址方式寄存器尋址寄存器尋址直接尋址直接尋址寄存器間接尋址寄存器間接尋址立即數(shù)尋址立即數(shù)尋址基址寄存器加變址寄存器間基址寄存器加變址寄存器間接尋址接尋址相對尋址相對尋址位尋址位尋址尋址空間尋址空間r0r0r7r7、a a、

20、b b、c(c(位位) )、dptrdptr等等內(nèi)部內(nèi)部128128字節(jié)字節(jié)ramram、特殊功能寄存器、特殊功能寄存器片內(nèi)數(shù)據(jù)存儲器、片外數(shù)據(jù)存儲器片內(nèi)數(shù)據(jù)存儲器、片外數(shù)據(jù)存儲器程序存儲器中的立即數(shù)程序存儲器中的立即數(shù)讀程序存儲器固定數(shù)據(jù)和程序散轉(zhuǎn)讀程序存儲器固定數(shù)據(jù)和程序散轉(zhuǎn)程序存儲器相對轉(zhuǎn)移程序存儲器相對轉(zhuǎn)移內(nèi)部內(nèi)部ramram中的可尋址位、中的可尋址位、sfrsfr中的可中的可尋址位尋址位表表3-1 3-1 7 7種尋址方式及其尋址空間種尋址方式及其尋址空間第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)173.4 at89s513.4 at89s51指令系

21、統(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)移類()控制轉(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)。17

22、第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)1818directdirect#data#data#data1#data16 6relreldptrdptrbitbitc c或或cycyaddr11addr11addr16addr16 直接地址,即直接地址,即8 8位位內(nèi)部數(shù)據(jù)存儲器單元或特殊功能寄存器內(nèi)部數(shù)據(jù)存儲器單元或特殊功能寄存器的地址。的地址。指令中的指令中的8 8位立即數(shù)。位立即數(shù)。指令中的指令中的1616位立即數(shù)。位立即數(shù)。偏移量,偏移量,8 8位的帶符號補(bǔ)碼數(shù)。位的帶符號補(bǔ)碼數(shù)。數(shù)據(jù)指針,可用作數(shù)據(jù)指針,可用作1616位數(shù)據(jù)存儲器單元地址的寄存器。位

23、數(shù)據(jù)存儲器單元地址的寄存器。內(nèi)部內(nèi)部ramram或特殊功能寄存器中的直接尋址位?;蛱厥夤δ芗拇嫫髦械闹苯訉ぶ肺?。進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。1111位目的地址。位目的地址。1616位目的地址。位目的地址。間接尋址寄存器前綴,如間接尋址寄存器前綴,如rri i,a+dptra+dptr。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)193.4.1 3.4.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令使用最頻繁使用最頻繁。一般數(shù)據(jù)傳送類指令的助記符為。一般數(shù)據(jù)傳送類指令的助記符為“mov”mov”,通用通用格式格式如下:如下: mov mov

24、, 數(shù)據(jù)傳送類指令是數(shù)據(jù)傳送類指令是把把源操作數(shù)源操作數(shù)傳送傳送到到目的操作數(shù)目的操作數(shù)。指令執(zhí)行之。指令執(zhí)行之后,源操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)后,源操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)據(jù)傳送類操作屬據(jù)傳送類操作屬“復(fù)制復(fù)制”性質(zhì),性質(zhì),而不是而不是“搬家搬家”。本類指令本類指令不影響標(biāo)志位不影響標(biāo)志位: :cycy、acac和和ovov,但,但不包括不包括奇偶標(biāo)志位奇偶標(biāo)志位p p。19第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)201以累加器為目的操作數(shù)的指令以累加器為目的操作數(shù)的指令mova,rn; (rn)a,n =07mo

25、va, r ri i ; (r ri i)a i =0,1mova,direct ; (direct)amova,#data ; #dataa把源操作數(shù)內(nèi)容送累加器把源操作數(shù)內(nèi)容送累加器a,源操作數(shù)源操作數(shù)有寄存器尋址、直接尋有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式,例如:址、間接尋址和立即數(shù)尋址等方式,例如:mova,r6;(r6)a,寄存器尋址,寄存器尋址mova,r0;(r0)a,間接尋址,間接尋址mova,70h ;(70h)a,直接尋址,直接尋址mova,#78h;78ha,立即數(shù)尋址,立即數(shù)尋址20第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系

26、統(tǒng)212 2以以rnrn為目的操作數(shù)的指令為目的操作數(shù)的指令mov mov rn ,a a ;(a)(a)rn ,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)d

27、irect(a)directmov directmov direct,rn ; ( (rn)direct)direct,n n =0=07 7mov direct1mov direct1,direct2 direct2 ;(direct2)direct1(direct2)direct1mov directmov direct, ri ; (ri)direct)direct,i i =0=0,1 1mov directmov direct,#data #data ; #datadirect#datadirect把源操作數(shù)送入直接地址指定的存儲單元。把源操作數(shù)送入直接地址指定的存儲單元。direc

28、tdirect指的是內(nèi)指的是內(nèi)部部ramram或或sfrsfr地址。地址。21第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)224 4以寄存器間接地址為目的操作數(shù)的指令以寄存器間接地址為目的操作數(shù)的指令movmovrri i,a a;(a)(r(a)(ri i), i i=0=0,1 1movmovrri i,direct direct ;(direct)(r(direct)(ri i),i i=0=0,1 1movmovrri i,#data #data ;#data(r#data(ri i), i i=0=0,1 1功能是把源操作數(shù)內(nèi)容送入功能是把源操作數(shù)內(nèi)容

29、送入r0r0或或r1r1指定的存儲單元中。指定的存儲單元中。5 51616位數(shù)傳送指令位數(shù)傳送指令movmovdptrdptr,#data16#data16;#data16dptr #data16dptr 功能是把功能是把1616位立即數(shù)送入位立即數(shù)送入dptrdptr,用來設(shè)置數(shù)據(jù)存儲器的地址,用來設(shè)置數(shù)據(jù)存儲器的地址指針。指針。at89s51at89s51有兩個(gè)有兩個(gè)dptrdptr,通過設(shè)置,通過設(shè)置特殊功能寄存器特殊功能寄存器auxr1auxr1中的中的dpsdps位位來選擇。當(dāng)來選擇。當(dāng)dps=1dps=1,則指令中的,則指令中的dptrdptr即為即為dptr1dptr1,dptr

30、0dptr0被被屏蔽,反之亦然。屏蔽,反之亦然。22第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)23dptrdptr為為1616位的數(shù)據(jù)指針,分為位的數(shù)據(jù)指針,分為dphdph和和dpldpl。操作十分靈活方便。操作十分靈活方便。設(shè)有兩個(gè)設(shè)有兩個(gè)dptrdptr后,就可避免頻繁的出入堆棧操作后,就可避免頻繁的出入堆棧操作。對于所有對于所有movmov類指令,累加器類指令,累加器a a是一個(gè)特別重要的是一個(gè)特別重要的8 8位寄存器,位寄存器,cpucpu對它具有其他寄存器所沒有的操作指令。后面將要介紹對它具有其他寄存器所沒有的操作指令。后面將要介紹的加、減、乘、除

31、指令都是以的加、減、乘、除指令都是以a a作為目的操作數(shù)。作為目的操作數(shù)。r rn n為所選擇的寄存器組中的為所選擇的寄存器組中的r0r0r7r7,直接地址直接地址directdirect為內(nèi)部為內(nèi)部ramram的的00h00h7fh7fh和特殊功能寄存器(地址范圍和特殊功能寄存器(地址范圍80h80hffhffh)在間接地址中,用在間接地址中,用r0r0或或r1r1作為內(nèi)部作為內(nèi)部ramram的地址指針,可訪問內(nèi)的地址指針,可訪問內(nèi)部部ramram的的00h00h7fh7fh共共128128個(gè)單元。個(gè)單元。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)246 6

32、堆棧操作指令堆棧操作指令內(nèi)部內(nèi)部ramram中設(shè)定一個(gè)中設(shè)定一個(gè)后進(jìn)先出后進(jìn)先出(lifolifo,last in first outlast in first out)的)的區(qū)域,稱為區(qū)域,稱為堆棧堆棧。在特殊功能寄存器中有一個(gè)。在特殊功能寄存器中有一個(gè)堆棧指針堆棧指針spsp,指示堆棧的棧頂位置。堆棧操作有進(jìn)棧和出棧兩種,因此,指示堆棧的棧頂位置。堆棧操作有進(jìn)棧和出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。(1)進(jìn)棧指令)進(jìn)棧指令push direct首先將棧指針首先將棧指針sp加加1,然后把,然后把direct中的內(nèi)容送到中的內(nèi)容送到sp指示的

33、內(nèi)指示的內(nèi)部部ram單元中。單元中。例如:例如:當(dāng)當(dāng)(sp)=60h,(a)=30h,(b)=70h時(shí),執(zhí)行下列指令時(shí),執(zhí)行下列指令pushacc;(sp)+1=61hsp,(a)61hpushb;(sp)+1=62hsp,(b)62h結(jié)果:結(jié)果:(61h)=30h,(62h)=70h,(sp)=62h。24第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)25(2)出棧指令)出棧指令popdirect將將sp指示的棧頂單元的內(nèi)容送入指示的棧頂單元的內(nèi)容送入direct字節(jié)中,字節(jié)中,sp減減1。例如:例如:當(dāng)當(dāng)(sp)=62h(sp)=62h,(62h)=70h(6

34、2h)=70h,(61h)=30h(61h)=30h時(shí),執(zhí)行指令時(shí),執(zhí)行指令pop dph pop dph ;(sp)dph(sp)dph,(sp)-1sp(sp)-1sppop dplpop dpl;(sp)dpl(sp)dpl,(sp)-1sp(sp)-1sp結(jié)果為結(jié)果為(dptr)=7030h(dptr)=7030h,(sp)=60h(sp)=60h。25第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)267 7累加器累加器a a與外部數(shù)據(jù)存儲器與外部數(shù)據(jù)存儲器ram/ioram/io傳送指令傳送指令movx amovx a,dptr dptr ;(dptr)

35、a(dptr)a,讀外部,讀外部ram/ioram/iomovx amovx a,rri i ;(r(ri i)a)a,讀外部,讀外部ram/ioram/iomovx dptrmovx dptr,a a ;(a)(dptr)(a)(dptr),寫外部,寫外部ram/io ram/io movx rmovx ri i ,a a ;(a)(r(a)(ri i),寫外部,寫外部ram/ioram/iomovmov的后面加的后面加“x”x”,表示訪問的是片外,表示訪問的是片外ramram或或i/oi/o口,在執(zhí)行前口,在執(zhí)行前兩條指令,兩條指令, (p3.7p3.7)有效;后兩條指令,有效;后兩條指令

36、, (p3.6p3.6)有效有效。采用采用1616位的位的 dptrdptr間接尋址間接尋址,可尋址整個(gè),可尋址整個(gè)64kb64kb片外數(shù)據(jù)存儲器空片外數(shù)據(jù)存儲器空間,高間,高8 8位地址(位地址(dphdph)由)由p2p2口輸出,低口輸出,低8 8位地址(位地址(dpldpl)由)由p0p0口輸出??谳敵?。采用采用r ri i(i i =0=0,1 1)進(jìn)行間接尋址,)進(jìn)行間接尋址,可尋址片外可尋址片外256256個(gè)單元的數(shù)個(gè)單元的數(shù)據(jù)存儲器。據(jù)存儲器。8 8位地址由位地址由p0p0口輸出,鎖存在地址鎖存器中,然后口輸出,鎖存在地址鎖存器中,然后p0p0口再作為口再作為8 8位數(shù)據(jù)口。位數(shù)

37、據(jù)口。26rdwr第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)278 8查表指令查表指令共共兩條兩條,僅有的僅有的兩條兩條讀程序存儲器中表格數(shù)據(jù)的指令讀程序存儲器中表格數(shù)據(jù)的指令。由于程序。由于程序存儲器只讀存儲器只讀不寫,因此傳送為單向,從程序存儲器中讀出不寫,因此傳送為單向,從程序存儲器中讀出數(shù)據(jù)到數(shù)據(jù)到a中。兩條查表指令均采用基址寄存器加變址寄存器間接中。兩條查表指令均采用基址寄存器加變址寄存器間接尋址方式。尋址方式。(1)movc a,a+pc以以pc作為基址寄存器作為基址寄存器,a的內(nèi)容的內(nèi)容(無符號數(shù)無符號數(shù))和和pc的當(dāng)前值(下的當(dāng)前值(下一條指令

38、的起始地址)相加后得到一個(gè)一條指令的起始地址)相加后得到一個(gè)新的新的16位地址位地址,把該,把該地址的內(nèi)容送到地址的內(nèi)容送到a。27第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)28例如:例如:當(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é)果把程序存儲器中器中1031h的內(nèi)容送入累加器的內(nèi)容送入累加器a。優(yōu)點(diǎn)優(yōu)點(diǎn):不改變特殊功能寄存器及不

39、改變特殊功能寄存器及pc的狀態(tài),根據(jù)的狀態(tài),根據(jù)a的內(nèi)容就可的內(nèi)容就可以取出表格中的常數(shù)。以取出表格中的常數(shù)。缺點(diǎn):缺點(diǎn):表格只能存放在表格只能存放在該條查表指令所在地址的該條查表指令所在地址的+256個(gè)單元之個(gè)單元之內(nèi)內(nèi),表格大小受到限制,且表格只能被一段程序所用。,表格大小受到限制,且表格只能被一段程序所用。28第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)29(2)movc a,a+dptrdptr為基址寄存器,為基址寄存器,a的內(nèi)容的內(nèi)容(無符號數(shù)無符號數(shù))和和dptr的內(nèi)容相的內(nèi)容相加得到一個(gè)加得到一個(gè)16位地址,把由該地址指定的程序存儲器單元位地址,把

40、由該地址指定的程序存儲器單元的內(nèi)容送到累加器的內(nèi)容送到累加器a。例如:例如:(dptr)=8100h,(a)=40h,執(zhí)行指令,執(zhí)行指令 movc a,a+dptr將程序存儲器中將程序存儲器中8140h單元單元內(nèi)容送入內(nèi)容送入a中。中。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)30本指令執(zhí)行結(jié)果只與指針本指令執(zhí)行結(jié)果只與指針dptr及累加器及累加器a的內(nèi)容有關(guān),與該指的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此令存放的地址及常數(shù)表格存放的地址無關(guān),因此表格的大小表格的大小和位置可以在和位置可以在64kb程序存儲器空間中任意安排程序存儲器空間中任

41、意安排,一個(gè)表格,一個(gè)表格可可以為各個(gè)程序塊公用以為各個(gè)程序塊公用。兩條指令的助記符都是在兩條指令的助記符都是在mov的后面加的后面加“c”,是是code的第一的第一個(gè)字母,即表示程序存儲器中的代碼。個(gè)字母,即表示程序存儲器中的代碼。執(zhí)行上述兩條指令時(shí),單片機(jī)的執(zhí)行上述兩條指令時(shí),單片機(jī)的 引腳信號(程序存儲器引腳信號(程序存儲器讀)有效,這一點(diǎn)讀者要牢記。讀)有效,這一點(diǎn)讀者要牢記。30psen第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)319字節(jié)交換指令字節(jié)交換指令xch a,rn ; (a) ( rn),n =07xch a,direct ; (a) (

42、direct)xch a,ri ; (a) ( ri),i=0,1這組指令的功能是將累加器這組指令的功能是將累加器a的內(nèi)容和源操作數(shù)的內(nèi)容相互的內(nèi)容和源操作數(shù)的內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等方式。例如:址等方式。例如: (a)=80h,(r7)=08h,(40h)=f0h (r0)=30h,(30h)=0fh執(zhí)行下列指令:執(zhí)行下列指令:xcha,r7 ;(a) (r7)xcha,40h ;(a) (40h)xcha,r0 ;(a) (r0)結(jié)果為結(jié)果為(a)=0fh,(r7)=80h,(40h)=08h,(30h

43、)=f0h。31第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)3210半字節(jié)交換指令半字節(jié)交換指令xchd a,ri累加器的低累加器的低4位與內(nèi)部位與內(nèi)部ram低低4位交換。位交換。例如:例如:(r0)=60h,(60h)=3eh,(a)=59h,執(zhí)行完,執(zhí)行完“xchd a,r0”指令,則指令,則(a)=5eh,(60h)=39h。第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)333.4.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令,算術(shù)運(yùn)算功指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令,算術(shù)運(yùn)算功能比較

44、強(qiáng)。能比較強(qiáng)。算術(shù)運(yùn)算指令都是算術(shù)運(yùn)算指令都是針對針對8位二進(jìn)制無符號數(shù)位二進(jìn)制無符號數(shù)的,如要進(jìn)行帶符的,如要進(jìn)行帶符號或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體的運(yùn)算程序,通過執(zhí)號或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。行程序?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)志位種標(biāo)志位置置1或清或清0。但增但增1和減和減1指令指令不影響這些標(biāo)志不影響這些標(biāo)志。33第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)341加法指令加法指令4條指令:條指令:add a,rn

45、;(a)+(rn)a ,n=07add a,direct;(a)+(direct)a add a,ri ;(a)+(ri)a,i=0,1add a,#data ;(a)+#dataa8位加法指令的位加法指令的一個(gè)加數(shù)一個(gè)加數(shù)總是來自累加器總是來自累加器a,而,而另一個(gè)加數(shù)另一個(gè)加數(shù)可可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋址方式得到。加的結(jié)果總是放在累加器等不同的尋址方式得到。加的結(jié)果總是放在累加器a中。中。使用本指令時(shí),要注意累加器使用本指令時(shí),要注意累加器a中的運(yùn)算結(jié)果中的運(yùn)算結(jié)果對各個(gè)標(biāo)志位對各個(gè)標(biāo)志位的影響:的影響

46、:(1)如果)如果位位7有進(jìn)位有進(jìn)位,則進(jìn)位標(biāo)志,則進(jìn)位標(biāo)志cy置置1,否則,否則cy清清0。34第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)35(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。溢出標(biāo)志位溢出標(biāo)志位ov的狀態(tài)的狀態(tài),只有帶符號數(shù)加法運(yùn)算時(shí)才有意義。當(dāng),只有帶符號數(shù)加法運(yùn)算時(shí)

47、才有意義。當(dāng)兩個(gè)帶符號數(shù)相加時(shí),兩個(gè)帶符號數(shù)相加時(shí),ov=1,表示加法運(yùn)算超出了累加器,表示加法運(yùn)算超出了累加器a所能表示的帶符號數(shù)的有效范圍(所能表示的帶符號數(shù)的有效范圍(-128+127),即產(chǎn)生了),即產(chǎn)生了溢出,表示運(yùn)算結(jié)果是錯誤的,否則運(yùn)算是正確的,即無溢溢出,表示運(yùn)算結(jié)果是錯誤的,否則運(yùn)算是正確的,即無溢出產(chǎn)生。出產(chǎn)生。35第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)36【例【例3-1】 (a)=53h,(r0)=fch,執(zhí)行指令,執(zhí)行指令adda,r0運(yùn)算式為運(yùn)算式為 結(jié)果:結(jié)果:(a)=4fh,cy=1,ac=0,ov=0,p=1(a中中1的位的

48、位數(shù)為奇數(shù))。數(shù)為奇數(shù))。注意:注意:在上面的運(yùn)算中,由于位在上面的運(yùn)算中,由于位6和位和位7同時(shí)有進(jìn)位,所以標(biāo)同時(shí)有進(jìn)位,所以標(biāo)志位志位ov=0。36第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)37【例【例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。37第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的

49、指令系統(tǒng)382帶進(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”;如果如果位位6有進(jìn)位有進(jìn)位而而位位7

50、沒有進(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”。38第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)39【例【例3-3】 (a)=85h,(20h)=ffh,cy=1,執(zhí)行指令,執(zhí)行指令addc a,20h運(yùn)算式為運(yùn)算式為 結(jié)果為結(jié)果為 (a)=85h,cy=1,ac=1,ov=0,p=1 (a中中1的位的位數(shù)為奇數(shù))。數(shù)為奇數(shù))。39第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)403增增1指令指令5條指令:條指令:inc ainc rn

51、 ;n=07inc direct inc ri ;i =0,1 inc dptr把指令中所指出的變量增把指令中所指出的變量增1,且不影響,且不影響psw中的任何標(biāo)志。中的任何標(biāo)志。指令指令“inc dptr”,16位數(shù)增位數(shù)增1指令。首先對低指令。首先對低8位指針位指針dpl執(zhí)行加執(zhí)行加1,當(dāng)溢出時(shí),就對,當(dāng)溢出時(shí),就對dph的內(nèi)容進(jìn)行加的內(nèi)容進(jìn)行加1,不,不影響標(biāo)志影響標(biāo)志cy。40第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)414十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令用于對用于對bcd碼加法運(yùn)算結(jié)果的內(nèi)容修正,指令格式為:碼加法運(yùn)算結(jié)果的內(nèi)容修正,指令格式為: da

52、a是對壓縮的是對壓縮的bcd碼(一個(gè)字節(jié)存放碼(一個(gè)字節(jié)存放2位位bcd碼)的加法結(jié)果碼)的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。進(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)整問題對對bcd碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二進(jìn)制碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二進(jìn)制數(shù)加法原則上并不適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)會產(chǎn)生數(shù)加法原則上并不適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)會產(chǎn)生錯誤結(jié)果。例如:錯誤結(jié)果。例如:41第第3 3章章 at89s51at89s5

53、1單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)42上述的上述的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。可見,二進(jìn)制數(shù)加法指令不能完全適用于可見,二進(jìn)制數(shù)加法指令不能完全適用于bcd碼十進(jìn)制數(shù)的碼十進(jìn)制數(shù)的加法運(yùn)算,要對結(jié)果做有條件的修正,這就是所謂的十進(jìn)加法運(yùn)算,要對結(jié)果做有條件的修正,這就是所謂的十進(jìn)制調(diào)整問題。制調(diào)整問題。42第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)4

54、3(2)出錯原因和調(diào)整方法)出錯原因和調(diào)整方法出錯原因在于出錯原因在于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é)果時(shí),結(jié)果出錯。因此出錯。因此1位位bcd碼加法運(yùn)算出錯的情況有碼加法運(yùn)算出錯的情況有兩種兩種: 加結(jié)果加結(jié)果大于大于9,說明已經(jīng),說明已經(jīng)進(jìn)入進(jìn)入無效編碼區(qū)。無效編碼區(qū)。 加結(jié)果加結(jié)果有進(jìn)位有進(jìn)位,說明已經(jīng),

55、說明已經(jīng)跳過跳過無效編碼區(qū)。無效編碼區(qū)。無論哪種錯誤,都因?yàn)闊o論哪種錯誤,都因?yàn)?個(gè)無效編碼個(gè)無效編碼造成的。因此,只要出現(xiàn)造成的。因此,只要出現(xiàn)上述兩種情況之一,就必須調(diào)整。上述兩種情況之一,就必須調(diào)整。方法是把運(yùn)算結(jié)果方法是把運(yùn)算結(jié)果加加6調(diào)調(diào)整整,即,即十進(jìn)制調(diào)整修正十進(jìn)制調(diào)整修正。43第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)44十進(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修

56、正。修正。 累加器高累加器高4位為位為9,低,低4位大于位大于9,高,高4位和低位和低4位分別加位分別加6修正修正上述調(diào)整修正,是上述調(diào)整修正,是通過執(zhí)行指令通過執(zhí)行指令“da a”來自動實(shí)現(xiàn)的來自動實(shí)現(xiàn)的。【例【例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,對,對結(jié)果修正。結(jié)果修正。44第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)45結(jié)果為結(jié)果

57、為(a)=23h,cy=1。由上可見,由上可見,56+67=123,結(jié)果正確。,結(jié)果正確。45第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)465帶借位的減法指令帶借位的減法指令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-cya從從a的內(nèi)容減去指定變量和進(jìn)位標(biāo)志的內(nèi)容減去指定變量和進(jìn)位標(biāo)志cy的值,結(jié)果存在的值,結(jié)果存在a中。中。如果位如果位7需借位需借位

58、則則cy置置1,否則,否則cy清清0;如果位如果位3需借位需借位則則ac置置1,否則,否則ac清清0;如果位如果位6借位而位借位而位7不借位不借位,或者,或者位位7借位而位借位而位6不借位不借位,則溢,則溢出標(biāo)志位出標(biāo)志位ov置置“1”,否則,否則ov清清“0”。46第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)47【例【例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借位)。借位)。47第第3 3章章 at89s51at89

59、s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)486減減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)志位(p標(biāo)志除外)。標(biāo)志除外)?!纠纠?-6】 (a)=0fh,(r7)=19h,(30h)=00h,(r1)=40h,(40h)=0ffh,執(zhí)行指令,執(zhí)行指令dec a;(a)-1adec r7;(r7)-1r7dec 30h;(30h)-13

60、0hdec r1;(r1)-1(r1)結(jié)果:結(jié)果:(a)=0eh,(r7)=18h,(30h)=0ffh,(40h)=0feh,p=1,不影響其他標(biāo)志。,不影響其他標(biāo)志。48第第3 3章章 at89s51at89s51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)497乘法指令乘法指令mul ab ;abba 積的低字節(jié)在累加器積的低字節(jié)在累加器a中,高字節(jié)在中,高字節(jié)在b中。如果積大于中。如果積大于255,則,則ov置置1,否則,否則ov清清0。cy標(biāo)志總是清標(biāo)志總是清0。8除法指令除法指令div ab ;a/ba(商商),余數(shù),余數(shù)b商(為整數(shù))存放在商(為整數(shù))存放在a中,余數(shù)存放在中,余數(shù)存放在b中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論