




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第3章 AT89S51單片機(jī)的 指令系統(tǒng)2第第3章章 目錄目錄3.1 指令系統(tǒng)概述指令系統(tǒng)概述3.2 指令格式指令格式3.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式3.4 AT89S51指令系統(tǒng)分類介紹指令系統(tǒng)分類介紹 3.4.1 數(shù)據(jù)傳送類指令 3.4.2 算術(shù)運(yùn)算類指令 3.4.3 邏輯操作類指令 3.4.4 控制轉(zhuǎn)移類指令 3.4.5 位操作類指令3.5 AT89S51指令匯總指令匯總3.6 某些指令的說明某些指令的說明AT89S51AT89S51單片機(jī)單片機(jī)使用使用MCS-51MCS-51指令系統(tǒng)指令系統(tǒng)。n介紹指令系統(tǒng)介紹指令系統(tǒng)尋址方式尋址方式n對對111111條條基本指令基本指令
2、按功能分類詳細(xì)講解按功能分類詳細(xì)講解。指令指令-是是CPUCPU按照人們的意圖來完成某種操作的命令,它以按照人們的意圖來完成某種操作的命令,它以英文名稱或縮寫形式作為英文名稱或縮寫形式作為助記符助記符。匯編語言指令匯編語言指令-用助記符、符號(hào)地址、標(biāo)號(hào)等表示的書寫用助記符、符號(hào)地址、標(biāo)號(hào)等表示的書寫程序的語言。程序的語言。掌握匯編語言指令是程序設(shè)計(jì)的掌握匯編語言指令是程序設(shè)計(jì)的基礎(chǔ)?;A(chǔ)。內(nèi)容概要內(nèi)容概要43.1 3.1 指令系統(tǒng)概述指令系統(tǒng)概述簡明、易掌握、效率較高的指令系統(tǒng),簡明、易掌握、效率較高的指令系統(tǒng),復(fù)雜指令集復(fù)雜指令集。按按所占字節(jié)分所占字節(jié)分,分,分三種三種:(1 1)單字節(jié)指
3、令)單字節(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í)鐘振蕩周期)的指令個(gè)時(shí)鐘振蕩周期)的指令6464條條;(2 2)2 2個(gè)個(gè)機(jī)器周期指令機(jī)器周期指令4545條條;(3 3)4 4個(gè)個(gè)機(jī)器周期機(jī)器周期乘、除指令。乘、除指令。512MHz12MHz晶振,每個(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è)處理位變
4、量位變量的的指令子集指令子集。3.2 3.2 指令格式指令格式 指令格式:指令格式:指令的表示方法。指令的表示方法。指令通常由指令通常由兩部分兩部分組成:組成:操作碼操作碼和和操作數(shù)操作數(shù)。操作碼操作碼指令進(jìn)行什么指令進(jìn)行什么操作操作。操作數(shù)操作數(shù)指令操作的指令操作的對象對象??赡苁且痪唧w數(shù)據(jù),也可能是??赡苁且痪唧w數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。指出到哪里取得數(shù)據(jù)的地址或符號(hào)。指令長度不同,格式也就不同。指令長度不同,格式也就不同。6(1 1)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。(2 2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)
5、是操作數(shù))雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。(3 3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。3.3 3.3 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式尋址方式尋址方式在指令中說明操作數(shù)所在地址的方法。在指令中說明操作數(shù)所在地址的方法。一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,指令系一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,指令系統(tǒng)就越復(fù)雜。統(tǒng)就越復(fù)雜。尋址方式所要解決的主要問題尋址方式所要解決的主要問題就是如何在整個(gè)存儲(chǔ)器和寄存器就是如何在整個(gè)存儲(chǔ)器和寄存器的尋址空間內(nèi)快速地的尋址空間內(nèi)快速地找到指定的地址單元找
6、到指定的地址單元。下面介紹指令系統(tǒng)下面介紹指令系統(tǒng)7 7種種尋址方式。尋址方式。71 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等。等。82 2直接尋址方式直接尋址方式指令中直接給出操作數(shù)的單元地址,該單元地址中的內(nèi)容就指令中直接給出操作數(shù)的單元地址,該單元地址中的內(nèi)容就是操作數(shù),直接的操作數(shù)單元地址用是操作數(shù),直接的操作數(shù)單元地址用“direct”direct”表示。表示。例如:例如: MOVM
8、OVA 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 direct1direct1,direct2direct29具體指令:具體指令:MOV 42HMOV 42
9、H,62H62H把片內(nèi)把片內(nèi)RAMRAM中中62H62H單元的內(nèi)容送到片內(nèi)單元的內(nèi)容送到片內(nèi)RAMRAM中的中的42H42H單元中。單元中。直接尋址直接尋址是訪問片內(nèi)所有特殊功能寄存器的是訪問片內(nèi)所有特殊功能寄存器的唯一尋址方式。唯一尋址方式。3. 3. 寄存器間接尋址方式寄存器間接尋址方式寄存器中存的是寄存器中存的是操作數(shù)地址操作數(shù)地址,即先從寄存器中找到操作數(shù)的地,即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù)。址,再按該地址找到操作數(shù)。為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器名稱前面加式中,應(yīng)在寄存
10、器名稱前面加前綴標(biāo)志前綴標(biāo)志“”。例如:例如:MOV AMOV A,RRi i ;i i=0=0或或1 110其中,其中, R Ri i的內(nèi)容為的內(nèi)容為40H40H,即把,即把內(nèi)部內(nèi)部RAM 40HRAM 40H地址單元中的內(nèi)容地址單元中的內(nèi)容傳送給傳送給A A。4 4立即數(shù)尋址方式立即數(shù)尋址方式直接在指令中給出操作數(shù)直接在指令中給出操作數(shù)也稱也稱立即數(shù)立即數(shù)。為了與直接尋址指。為了與直接尋址指令中的直接地址加以區(qū)別,令中的直接地址加以區(qū)別,需在操作數(shù)前加前綴標(biāo)志需在操作數(shù)前加前綴標(biāo)志“#”#”。例如:例如: MOV AMOV A,#40H#40H第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在
11、程序存儲(chǔ)第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在程序存儲(chǔ)器內(nèi)的常數(shù)。器內(nèi)的常數(shù)。115 5基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式以以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é)果是把程序存儲(chǔ)器序存
12、儲(chǔ)器0405H0405H單元的內(nèi)容傳送給單元的內(nèi)容傳送給A A。本尋址方式的本尋址方式的指令有指令有3 3條條:MOVCMOVCA A,A+DPTRA+DPTRMOVCMOVCA A,A+PCA+PCJMPJMPA A,A+DPTRA+DPTR前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。例如,例如,將固將固定的、按一定順序排列的定的、按一定順序排列的表格表格存放在程序存儲(chǔ)器中,在程序存放在程序存儲(chǔ)器中,在程序運(yùn)行中由運(yùn)行中由A A的動(dòng)態(tài)參量來確定讀取對應(yīng)的表格參數(shù)。的動(dòng)態(tài)參量來確定讀取對應(yīng)的表格參數(shù)。第第3 3條為條為散轉(zhuǎn)指令散轉(zhuǎn)指令,A A中內(nèi)容為程序
13、運(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)。6 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)移指令
14、字節(jié)數(shù)+rel+rel13其中,其中,偏移量偏移量relrel是帶符號(hào)是帶符號(hào)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之間。之間。例如,例如, LJMP relLJMP rel程序要轉(zhuǎn)移到該指令的程序要轉(zhuǎn)移到該指令的PCPC值加值加3 3再加上再加上relrel的目的地址處。編寫的目的地址處。編寫程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號(hào)。程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號(hào)。例如:例如: LJMP L
15、OOPLJMP LOOP “LOOP” “LOOP” 為目的地址標(biāo)號(hào)。匯編時(shí),由匯編程序自動(dòng)計(jì)算和為目的地址標(biāo)號(hào)。匯編時(shí),由匯編程序自動(dòng)計(jì)算和填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。147 7位尋址方式位尋址方式 對內(nèi)部對內(nèi)部RAMRAM和特殊功能寄存器具有位尋址功能的某位內(nèi)容進(jìn)行和特殊功能寄存器具有位尋址功能的某位內(nèi)容進(jìn)行置置1 1和清和清0 0操作。操作。位地址一般以位地址一般以直接位地址直接位地址給出,位地址符號(hào)為給出,位地址符號(hào)為“bit”bit”。例如:例如:MOV CMOV C,bitbit 其具體指令:其具體指令: MOV
16、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í)性。157 7種尋址方式種尋址方式已介紹完畢。已介紹完畢。問題:問題:當(dāng)一條指令給定后,如何來確定該指令的尋址方式?當(dāng)一條指令給定后,如何來確定該指令的尋址方式?例如例如: : MOV AMOV
17、 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”來來說,是屬于說,是屬于“寄存器尋址寄存器尋址”方式。方式。一般而言,一般而言,尋址方式指的是尋址方式指的是源操作數(shù)源操作數(shù),所以此例為立即數(shù)尋,所以此例為立即數(shù)尋址方式。址方式。對指令系統(tǒng)對指令系統(tǒng)7 7種尋址方式種尋址方式總結(jié),概括見總結(jié),概括見表表3-1
18、3-1。16序號(hào)序號(hào)尋址方式尋址方式尋址空間尋址空間1 1寄存器尋址寄存器尋址R0R0R7R7、A A、B B、C(C(位位) )、DPTRDPTR等等2 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基址寄存器加變址寄存器間基址寄存器加變址寄存器間接尋址接尋址讀程序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)讀程序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)6 6相對尋址相對尋址程序存儲(chǔ)器相對轉(zhuǎn)移程序存儲(chǔ)器相對轉(zhuǎn)移7 7位尋
19、址位尋址內(nèi)部內(nèi)部RAMRAM中的可尋址位、中的可尋址位、SFRSFR中的可中的可尋址位尋址位表表3-1 3-1 7 7種尋址方式及其尋址空間種尋址方式及其尋址空間173.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)移類()控制轉(zhuǎn)移類(1717條)條)(5 5)位操作類()位操作類(1717條)條)先簡單介紹指令用到的符號(hào)。先簡單介紹指令
20、用到的符號(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)。18directdirect直接地址,即8位內(nèi)部數(shù)據(jù)存儲(chǔ)器單元或特殊功能寄存器的地址。#data#data指令中的8位立即數(shù)。#data1#data16 6指令中的16位立即數(shù)。relrel偏移量,8位的帶符號(hào)補(bǔ)碼數(shù)。DPTRDPTR數(shù)據(jù)指針,可用作16位數(shù)據(jù)存儲(chǔ)器單元地址的寄存器。bitbit內(nèi)部RAM或特殊功能寄存器中的直接尋址位。C C或或CyCy進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。
21、addr11addr1111位目的地址。addr16addr1616位目的地址。 間接尋址寄存器前綴,如Ri,A+DPTR。()()表示地址單元或寄存器中的內(nèi)容。()表示以單元或寄存器中的內(nèi)容作為地址間接尋址單元的內(nèi)容。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。193.4.1 3.4.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令使用最頻繁使用最頻繁。一般數(shù)據(jù)傳送類指令的助記符為。一般數(shù)據(jù)傳送類指令的助記符為“MOV”MOV”,通用通用格式格式如下:如下: MOV MOV , 數(shù)據(jù)傳送類指令是數(shù)據(jù)傳送類指令是把把源操作數(shù)源操作數(shù)傳送傳送到到目的操作數(shù)目的操作數(shù)。指令執(zhí)行之。指令執(zhí)行之后,源操作數(shù)不改變,目的操作
22、數(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。201以累加器為目的操作數(shù)的指令以累加器為目的操作數(shù)的指令MOVA,Rn; (Rn)A,n =07MOVA, R Ri i ; (R Ri i)A i =0,1MOVA,direct ; (direct)AMOVA,#data ; #dataA把源操作數(shù)內(nèi)容送累加器把源操作數(shù)內(nèi)容送累加器A,源操作數(shù)源操作數(shù)有寄存器尋址、
23、直接尋有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式,例如:址、間接尋址和立即數(shù)尋址等方式,例如:MOVA,R6;(R6)A,寄存器尋址,寄存器尋址MOVA,R0;(R0)A,間接尋址,間接尋址MOVA,70H ;(70H)A,直接尋址,直接尋址MOVA,#78H;78HA,立即數(shù)尋址,立即數(shù)尋址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;#
24、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)direct(A)directMOV directMOV direct,Rn ; ( (Rn)direct)direct,n n =0=07 7MOV direct1MOV direct1,direct2 direct2 ;(direct2)direct1(direct2)direct1MOV dir
25、ectMOV direct, Ri ; (Ri)direct)direct,i i =0=0,1 1MOV directMOV direct,#data #data ; #datadirect#datadirect22把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。directdirect指的是內(nèi)指的是內(nèi)部部RAMRAM或或SFRSFR地址。地址。4 4以寄存器間接地址為目的操作數(shù)的指令以寄存器間接地址為目的操作數(shù)的指令MOVMOVRRi i,A A;(A)(R(A)(Ri i), i i=0=0,1 1MOVMOVRRi i,direct direct ;(dir
26、ect)(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)容送入R0R0或或R1R1指定的存儲(chǔ)單元中。指定的存儲(chǔ)單元中。5 51616位數(shù)傳送指令位數(shù)傳送指令MOVMOVDPTRDPTR,#data16#data16;#data16DPTR #data16DPTR 功能是把功能是把1616位立即數(shù)送入位立即數(shù)送入DPTRDPTR,用來設(shè)置數(shù)據(jù)存儲(chǔ)器的地址,用來設(shè)置數(shù)據(jù)存儲(chǔ)器的地址指針。指針。AT89S51AT89S51有兩個(gè)有兩個(gè)DPT
27、RDPTR,通過設(shè)置,通過設(shè)置特殊功能寄存器特殊功能寄存器AUXR1AUXR1中的中的DPSDPS位位來選擇。當(dāng)來選擇。當(dāng)DPS=1DPS=1,則指令中的,則指令中的DPTRDPTR即為即為DPTR1DPTR1,DPTR0DPTR0被被屏蔽,反之亦然。屏蔽,反之亦然。DPTRDPTR為為1616位的數(shù)據(jù)指針,分為位的數(shù)據(jù)指針,分為DPHDPH和和DPLDPL。操作十分靈活方便。操作十分靈活方便。設(shè)有兩個(gè)設(shè)有兩個(gè)DPTRDPTR后,就可避免頻繁的出入堆棧操作后,就可避免頻繁的出入堆棧操作。對于所有對于所有MOVMOV類指令,累加器類指令,累加器A A是一個(gè)特別重要的是一個(gè)特別重要的8 8位寄存器
28、,位寄存器,CPUCPU對它具有其他寄存器所沒有的操作指令。后面將要介紹對它具有其他寄存器所沒有的操作指令。后面將要介紹的加、減、乘、除指令都是以的加、減、乘、除指令都是以A A作為目的操作數(shù)。作為目的操作數(shù)。24R Rn n為所選擇的寄存器組中的為所選擇的寄存器組中的R0R0R7R7,直接地址直接地址directdirect為內(nèi)部為內(nèi)部RAMRAM的的00H00H7FH7FH和特殊功能寄存器(地址范圍和特殊功能寄存器(地址范圍80H80HFFHFFH)在間接地址中,用在間接地址中,用R0R0或或R1R1作為內(nèi)部作為內(nèi)部RAMRAM的地址指針,可訪問的地址指針,可訪問內(nèi)部內(nèi)部RAMRAM的的0
29、0H00H7FH7FH共共128128個(gè)單元。個(gè)單元。6 6堆棧操作指令堆棧操作指令內(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)有兩條堆棧操作指令。25(1)進(jìn)棧指令)進(jìn)棧指令PUSH direct首先將棧指針首先將棧指針SP加加1
30、,然后把,然后把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)61HPUSHB;(SP)+1=62HSP,(B)62H結(jié)果:結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H。(2)出棧指令)出棧指令POPdirect將將SP指示的棧頂單元的內(nèi)容送入指示的棧頂單元的內(nèi)容送入direct字節(jié)中,字節(jié)中,SP減減1。26例如:例如:當(dāng)當(dāng)(SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(
31、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。7 7累加器累加器A A與外部數(shù)據(jù)存儲(chǔ)器與外部數(shù)據(jù)存儲(chǔ)器RAM/IORAM/IO傳送指令傳送指令MOVX AMOVX A,DPTR DPTR ;(DPTR)A(DPTR)A,讀外部,讀外部RAM/IORAM/IOMOVX AMOVX A,RRi i ;(R(
32、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/IO27MOVMOV的后面加的后面加“X”X”,表示訪問的是片外,表示訪問的是片外RAMRAM或或I/OI/O口,在執(zhí)行前兩口,在執(zhí)行前兩條指令,條指令, (P3.7P3.7)有效;后兩條指令,有效;后兩條指令, (P3.6P3.6)有效有效。采用采用1616位的位的 DPTRDPTR間接尋址間接尋址,可尋
33、址整個(gè),可尋址整個(gè)64KB64KB片外數(shù)據(jù)存儲(chǔ)器空片外數(shù)據(jù)存儲(chǔ)器空間,高間,高8 8位地址(位地址(DPHDPH)由)由P2P2口輸出,低口輸出,低8 8位地址(位地址(DPLDPL)由)由P0P0口輸出??谳敵觥2捎貌捎肦 Ri i(i i =0=0,1 1)進(jìn)行間接尋址,)進(jìn)行間接尋址,可尋址片外可尋址片外256256個(gè)單元的數(shù)據(jù)個(gè)單元的數(shù)據(jù)存儲(chǔ)器。存儲(chǔ)器。8 8位地址由位地址由P0P0口輸出,鎖存在地址鎖存器中,然后口輸出,鎖存在地址鎖存器中,然后P0P0口再作為口再作為8 8位數(shù)據(jù)口。位數(shù)據(jù)口。8 8查表指令查表指令共共兩條兩條,僅有的僅有的兩條兩條讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令讀程序存
34、儲(chǔ)器中表格數(shù)據(jù)的指令。由于程序。由于程序RDWR28存儲(chǔ)器只讀存儲(chǔ)器只讀不寫,因此傳送為單向,從程序存儲(chǔ)器中讀出不寫,因此傳送為單向,從程序存儲(chǔ)器中讀出數(shù)據(jù)到數(shù)據(jù)到A中。兩條查表指令均采用基址寄存器加變址寄存器間中。兩條查表指令均采用基址寄存器加變址寄存器間接尋址方式。接尋址方式。(1)MOVC A,A+PC以以PC作為基址寄存器作為基址寄存器,A的內(nèi)容的內(nèi)容(無符號(hào)數(shù)無符號(hào)數(shù))和和PC的當(dāng)前值(下的當(dāng)前值(下一條指令的起始地址)相加后得到一個(gè)一條指令的起始地址)相加后得到一個(gè)新的新的16位地址位地址,把該,把該地址的內(nèi)容送到地址的內(nèi)容送到A。例如:例如:當(dāng)當(dāng) (A)=30H時(shí),執(zhí)行地址時(shí),執(zhí)
35、行地址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)容就可以取出表格中的常數(shù)。可以取出表格中的常數(shù)。缺點(diǎn):缺點(diǎn):表格只能存放在表格只能存放在該條查表指令所在地址的該條查表指令所在地址的+256個(gè)單元個(gè)單元之內(nèi)之內(nèi),表格大小受到限制,且表格只能被一段程序
36、所用。,表格大小受到限制,且表格只能被一段程序所用。(2)MOVC A,A+DPTRDPTR為基址寄存器,為基址寄存器,A的內(nèi)容的內(nèi)容(無符號(hào)數(shù)無符號(hào)數(shù))和和DPTR的內(nèi)容相的內(nèi)容相加得到一個(gè)加得到一個(gè)16位地址,把由該地址指定的程序存儲(chǔ)器單位地址,把由該地址指定的程序存儲(chǔ)器單30元的內(nèi)容送到累加器元的內(nèi)容送到累加器A。例如:例如:(DPTR)=8100H,(A)=40H,執(zhí)行指令,執(zhí)行指令 MOVC A,A+DPTR將程序存儲(chǔ)器中將程序存儲(chǔ)器中8140H單元單元內(nèi)容送入內(nèi)容送入A中。中。本指令執(zhí)行結(jié)果只與指針本指令執(zhí)行結(jié)果只與指針DPTR及累加器及累加器A的內(nèi)容有關(guān),與該指的內(nèi)容有關(guān),與該指
37、令存放的地址及常數(shù)表格存放的地址無關(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ī)的 引腳信號(hào)(程序存引腳信號(hào)(程序存儲(chǔ)器讀)有效,這一點(diǎn)讀者要牢記。儲(chǔ)器讀)有效,這一點(diǎn)讀者要牢記。9字節(jié)交換指令字節(jié)交換指令XC
38、HA,Rn ; (A) ( Rn),n =07XCHA,direct ; (A) ( direct)XCHA,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í)行下列指令:PSENXCHA,R7 ;(A) (R7)XCHA,40H ;(A) (40H)XCHA,R0
39、;(A) (R0)結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。10半字節(jié)交換指令半字節(jié)交換指令XCHD A,Ri累加器的低4位與內(nèi)部RAM低4位交換。例如:例如:(R0)=60H,(60H)=3EH,(A)=59H,執(zhí)行完“XCHD A,R0”指令,則(A)=5EH,(60H)=39H。333.4.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令,算術(shù)運(yùn)算功能比較強(qiáng)。算術(shù)運(yùn)算指令都是針對8位二進(jìn)制無符號(hào)數(shù)的,如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體
40、的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。算術(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)志。341加法指令加法指令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)+#dataA8位加法指令的一個(gè)加數(shù)一個(gè)加數(shù)總是來自累加器A,而另一個(gè)加數(shù)另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋址方式得到。加的結(jié)果總是放在累加器A中。使
41、用本指令時(shí),要注意累加器A中的運(yùn)算結(jié)果對各個(gè)標(biāo)志位的影響:(1)如果位7有進(jìn)位,則進(jìn)位標(biāo)志Cy置1,否則Cy清0。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),只有帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。當(dāng),只有帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。當(dāng)兩個(gè)帶符號(hào)數(shù)相加時(shí),兩個(gè)帶符號(hào)數(shù)相加時(shí),OV=1
42、,表示加法運(yùn)算超出了累加器,表示加法運(yùn)算超出了累加器A所能表示的帶符號(hào)數(shù)的有效范圍(所能表示的帶符號(hào)數(shù)的有效范圍(-128+127),即產(chǎn)生了),即產(chǎn)生了溢出,表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無溢溢出,表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無溢出產(chǎn)生。出產(chǎn)生。36【例【例3-1】 (A)=53H,(R0)=FCH,執(zhí)行指令A(yù)DDA,R0運(yùn)算式為 結(jié)果:結(jié)果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中1的位數(shù)為奇數(shù))。注意:注意:在上面的運(yùn)算中,由于位6和位7同時(shí)有進(jìn)位,所以標(biāo)志位OV=0。37【例【例3-2】 (A)= 85H,(R0)=20H,(20H)=AFH
43、,執(zhí)行指令A(yù)DD A,R0 運(yùn)算式為 結(jié)果結(jié)果:(A)=34H,Cy=1,Ac=1,OV=1,P=1。注意:注意:由于位7有進(jìn)位,而位6無進(jìn)位,所以標(biāo)志位OV=1。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”,否則,
44、否則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”。39【例【例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,P=1 (A中1的位數(shù)為奇數(shù)。)。403增增1指令指令5條指令:INC AINC Rn ;n=07INC direct INC Ri ;i
45、 =0,1 INC DPTR把指令中所指出的變量增1,且不影響PSW中的任何標(biāo)志。指令“INC DPTR”,16位數(shù)增1指令。首先對低8位指針DPL執(zhí)行加1,當(dāng)溢出時(shí),就對DPH的內(nèi)容進(jìn)行加1,不影響標(biāo)志Cy。414十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令用于對BCD碼加法運(yùn)算結(jié)果的內(nèi)容修正,指令格式為: DA A是對壓縮的BCD碼(一個(gè)字節(jié)存放2位BCD碼)的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個(gè)BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮BCD碼的和數(shù)。(1)十進(jìn)制調(diào)整問題)十進(jìn)制調(diào)整問題對BCD碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二進(jìn)制數(shù)加法原則上并不適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)會(huì)產(chǎn)生錯(cuò)
46、誤結(jié)果。例如:42上述的BCD碼運(yùn)算中:(a)結(jié)果正確。(b)結(jié)果不正確,因?yàn)锽CD碼中沒有1111這個(gè)編碼。(c)結(jié)果不正確,正確結(jié)果應(yīng)為17,而運(yùn)算結(jié)果卻是11。可見,二進(jìn)制數(shù)加法指令不能完全適用于BCD碼十進(jìn)制數(shù)的加法運(yùn)算,要對結(jié)果做有條件的修正,這就是所謂的十進(jìn)制調(diào)整問題。43(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)算中,
47、凡結(jié)果進(jìn)入或者跳過碼加運(yùn)算中,凡結(jié)果進(jìn)入或者跳過無效編碼區(qū)無效編碼區(qū)時(shí),結(jié)果時(shí),結(jié)果出錯(cuò)。因此出錯(cuò)。因此1位位BCD碼加法運(yùn)算出錯(cuò)的情況有碼加法運(yùn)算出錯(cuò)的情況有兩種兩種: 加結(jié)果加結(jié)果大于大于9,說明已經(jīng),說明已經(jīng)進(jìn)入進(jìn)入無效編碼區(qū)。無效編碼區(qū)。 加結(jié)果加結(jié)果有進(jìn)位有進(jìn)位,說明已經(jīng),說明已經(jīng)跳過跳過無效編碼區(qū)。無效編碼區(qū)。無論哪種錯(cuò)誤,都因?yàn)闊o論哪種錯(cuò)誤,都因?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)整修正。44十進(jìn)制調(diào)整方法如下:
48、累加器低4位大于9或輔助進(jìn)位位Ac=1,則低4位加6修正。 累加器高4位大于9或進(jìn)位位Cy=1,則高4位加6修正。 累加器高4位為9,低4位大于9,高4位和低4位分別加6修正上述調(diào)整修正,是通過執(zhí)行指令“DA A”來自動(dòng)實(shí)現(xiàn)的。【例【例3-4】 (A)=56H,(R5)=67H,把它們看作兩個(gè)壓縮的BCD數(shù),進(jìn)行BCD加法。執(zhí)行指令:ADD A,R5DA A高4位和低4位分別大于9,所以“DA A”指令要分別加6,對結(jié)果修正。45結(jié)果為(A)=23H,Cy=1。由上可見,56+67=123,結(jié)果正確。465帶借位的減法指令帶借位的減法指令4條指令:SUBB A,Rn ; (A)-(Rn)-Cy
49、A,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)志Cy的值,結(jié)果存在A中。如果位7需借位則Cy置1,否則Cy清0;如果位3需借位則Ac置1,否則Ac清0;如果位6借位而位7不借位,或者位7借位而位6不借位,則溢出標(biāo)志位OV置“1”,否則OV清“0”。47【例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借
50、位)。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)志位(P標(biāo)志除外)?!纠纠?-6】 (A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,執(zhí)行指令DEC A;(A)-1ADEC R7;(R7)-1R7DEC 30H;(30H)-130HDEC R1;(R1)-1(R1)49結(jié)果:結(jié)果:(A)=0EH,(R7)=18H,(30H)=0FFH,
51、(40H)=0FEH,P=1,不影響其他標(biāo)志。7乘法指令乘法指令MUL AB ;ABBA 積的低字節(jié)在累加器A中,高字節(jié)在B中。如果積大于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。50【例【例3-7】 (A)=FBH,(B)=12H,執(zhí)行指令DIV AB結(jié)果:結(jié)果: (A)=0DH,(B)=11H,Cy=0,OV=0。3.4.3 邏輯操作類指令邏輯操作類指令1累加器
52、累加器A 清清“0”指令指令CLRA累加器A清0。不影響Cy、Ac、OV等標(biāo)志位。2累加器累加器A求反指令求反指令CPL A將累加器A的內(nèi)容按位邏輯取反,不影響標(biāo)志位。513左環(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 所示。圖3-1 左環(huán)移操作左環(huán)移操作圖3-2 帶進(jìn)位左環(huán)移操作帶進(jìn)位左環(huán)移操作525右環(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 A
53、A的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,如圖3-4所示。圖3-3 右環(huán)移操作右環(huán)移操作圖3-4 帶進(jìn)位右環(huán)移操作537累加器半字節(jié)交換指令累加器半字節(jié)交換指令SWAP A是將累加器A的高半字節(jié)(Acc.7Acc.4)和低半字節(jié)(Acc.3Acc.0)互換。【例3-8】 (A)= 95H,執(zhí)行指令SWAP A 結(jié)果為結(jié)果為 (A)=59H。8邏輯與指令邏輯與指令A(yù)NLA,Rn;(A)(Rn)A,n=07 ANLA,direct;(A)(direct)AANLA,#data;(A)#dataAANLA,Ri;(A)(Ri)A,i =01ANLdirect,A;(direct)(A)directAN
54、Ldirect,#data;(direct)#datadirect54是在指定的變量之間以位為基礎(chǔ)進(jìn)行“邏輯與”操作,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中?!纠纠?-9】 (A)=07H,(R0)=0FDH,執(zhí)行指令A(yù)NLA,R0運(yùn)算式為結(jié)果:結(jié)果: (A)=05H。559邏輯或指令邏輯或指令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)#data
55、direct是在所指定的變量之間執(zhí)行位的“邏輯或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。56【例【例3-10】 (P1)=05H,(A)=33H,執(zhí)行指令ORLP1,A運(yùn)算式為結(jié)果:結(jié)果:(P1)=35H。5710邏輯異或指令邏輯異或指令XRLA,Rn ;(A) (Rn)A,n=07XRLA,direct ;(A) (direct)AXRLA,Ri ;(A) (Ri)A ,i =0,1XRLA,#data ;(A) #dataAXRLdirect,A ;(direct) (A)directXRLdirect,#data ;(direct) #data direct功能是在所指定的變量之間執(zhí)行
56、以位位的“邏輯異或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。58【例【例3-11】 (A)=90H,(R3)=73H,執(zhí)行指令XRLA,R3運(yùn)算式為結(jié)果:結(jié)果: (A)=E3H。593.4.4 3.4.4 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令1 1長轉(zhuǎn)移指令長轉(zhuǎn)移指令LJMPLJMPaddr16addr16指令執(zhí)行時(shí),把轉(zhuǎn)移的目的地址,即指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)向addr16指定的目的地址:64KB程序存儲(chǔ)器地址空間的任何位置。2 2相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令SJMPSJMPrelrel無條件轉(zhuǎn)移,rel為相對偏移量,是一單字節(jié)的帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù),因此程序轉(zhuǎn)移
57、是雙向的。relrel如為正如為正,向地址增大的方向轉(zhuǎn)移;relrel如為負(fù)如為負(fù),向地址減小的方向轉(zhuǎn)移。60執(zhí)行時(shí),在PC加2(本指令為2B)之后,把指令的有符號(hào)的偏移量rel加到PC上,并計(jì)算出目的地址。編程時(shí),只需寫上目的地址標(biāo)號(hào), 相對偏移量由匯編程序自動(dòng)計(jì)算。例如:LOOP:MOV A,R6 SJMP LOOP 匯編時(shí),跳到LOOP處的偏移量由匯編程序自動(dòng)計(jì)算和填入。3絕對轉(zhuǎn)移指令絕對轉(zhuǎn)移指令A(yù)JMPaddr11指令雙字節(jié),格式如下:指令雙字節(jié),格式如下:指令指令提供提供11位地址位地址A10A0(即(即addr11),其中),其中A10A8則則位于位于第第1字節(jié)的高字節(jié)的高3位位,
58、A7A0在在第第2字節(jié)字節(jié)。操作碼操作碼只占只占第第1字節(jié)的低字節(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)移目的地址。址。需注意,目標(biāo)地址必須與需注意,目標(biāo)地址必須與AJMP指令的下一條指令首地址的指令的下一條指令首地址的高高5位地址碼位地址碼A15A11相同,否則將混亂。所以,是相同,否則將混亂。所以,是2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令。范圍內(nèi)的無條件
59、跳轉(zhuǎn)指令。4間接跳轉(zhuǎn)指令間接跳轉(zhuǎn)指令JMP A+DPTR單字節(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í)現(xiàn)多分支轉(zhuǎn)移。賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移。5條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令執(zhí)行指令時(shí),如執(zhí)行指令時(shí),如條件滿足條件滿足,則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一,則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一指令。指令。轉(zhuǎn)移目的地址轉(zhuǎn)移目的地址在以下一條指令首地址為中心的在以下一條指令首地址為中心的256B范圍內(nèi)(范圍內(nèi)(-1
60、28+127)。)。JZrel;如果累加器內(nèi)容為;如果累加器內(nèi)容為0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移JNZrel;如果累加器內(nèi)容非;如果累加器內(nèi)容非0,則執(zhí)行轉(zhuǎn)移,則執(zhí)行轉(zhuǎn)移6比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令CJNEA,direct,relCJNEA,#data,relCJNE Rn,#data,relCJNE Ri,#data,rel比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移不相等則轉(zhuǎn)移,并轉(zhuǎn)向目的地址。如果第一操作數(shù)(無符號(hào)整數(shù))小于第二操作數(shù)如果第一操作數(shù)(無符號(hào)整數(shù))小于第二操作數(shù)(無符號(hào)整數(shù)),則進(jìn)位標(biāo)志位Cy置1,否則Cy清0。該指令的執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。7減減1不為不為0轉(zhuǎ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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級活動(dòng)的評價(jià)與反饋機(jī)制計(jì)劃
- 優(yōu)化手術(shù)室管理的工作思路計(jì)劃
- 初心不改為孩子的夢想助力計(jì)劃
- 品牌與藝術(shù)的跨界合作計(jì)劃
- 幼兒園社會(huì)責(zé)任意識(shí)培養(yǎng)計(jì)劃
- 超聲科團(tuán)隊(duì)建設(shè)的領(lǐng)導(dǎo)力培養(yǎng)計(jì)劃
- 企業(yè)形象塑造與品牌建設(shè)計(jì)劃
- 七年級必須收藏:名著《西游記》每回檢測題(16至20回)
- 幼兒園健康教育的有效實(shí)現(xiàn)計(jì)劃
- 制定多元化發(fā)展戰(zhàn)略的工作計(jì)劃
- 中國銀行海爾多聯(lián)機(jī)方案書
- 涂布機(jī)初級操作技術(shù)與維修培訓(xùn)課件
- GB/T 8417-2003燈光信號(hào)顏色
- GB/T 7984-2001輸送帶具有橡膠或塑料覆蓋層的普通用途織物芯輸送帶
- GB/T 7631.10-2013潤滑劑、工業(yè)用油和有關(guān)產(chǎn)品(L類)的分類第10部分:T組(渦輪機(jī))
- GB/T 7324-2010通用鋰基潤滑脂
- GB/T 28114-2011鎂質(zhì)強(qiáng)化瓷器
- GB/T 15566.1-2020公共信息導(dǎo)向系統(tǒng)設(shè)置原則與要求第1部分:總則
- 三菱電梯LEHY-II、LEGY緊急救援的盤車裝置切換說明
- 新編物理基礎(chǔ)學(xué)(上下冊1-17章)課后習(xí)題(每題都有)詳細(xì)答案
- 現(xiàn)代漢語常用詞匯表(兩字)
評論
0/150
提交評論