簡介:第二章單片機匯編語言及程序設計,對任何計算機,如果只有硬件(裸機),而沒有軟件(程序)的支持,就不能發(fā)揮其運算和控制功能。指令程序的最基本單位,指CPU所能進行的操作程序指完成某項任務的計算機指令的有序集合指令系統(tǒng)所有指令的集合。不同的CPU具有不同的指令系統(tǒng)。MCS51的指令系統(tǒng)共有111條指令計算機編程語言機器語言匯編語言高級語言,匯編,編譯,MCS51指令格式匯編語言級指令格式標號操作碼操作數(shù);注釋例LBMOVA,R2A←R2標號指令的標識,表示指令的首地址;操作碼操作的命令(指示機器執(zhí)行何種操作)操作數(shù)參與操作的數(shù)據(jù)(是操作碼的補充),分目的操作數(shù)和源操作數(shù)。注釋對指令功能的說明,便于程序閱讀和維護,不參與操作。,機器語言級指令格式機器語言指令是一種二進制代碼,具體包含兩個基本的部分操作碼和操作數(shù)。機器語言分為單字節(jié)、雙字節(jié)和三字節(jié)指令,具體格式分別為單字節(jié)指令例MOVA,R0對應的機器語言指令為E8H雙字節(jié)指令例MOVA,20H對應的機器語言指令為E520H三字節(jié)指令例MOV20H,46H對應的機器語言指令為752046H,操作碼,操作碼,操作數(shù),操作碼,第一操作數(shù),第二操作數(shù),一、MCS單片機尋址方式二、單片機常用指令類型三、單片機指令系統(tǒng)的幾個特點四、單片機中的偽指令五、匯編語言程序設計舉例,本章主要內(nèi)容,一、MCS51單片機尋址方式,尋址方式的“尋址”是指尋找參與操作的數(shù)據(jù)所在的存儲器單元的地址。注意MCS51指令系統(tǒng)的尋址方式及其對應的尋址空間,1、立即尋址,特點指令碼中直接含有操作數(shù)本身(立即數(shù))立即數(shù)可以是8位或16位立即數(shù)通常用DATA或DATA16表示立即數(shù)只能作為源操作數(shù)立即數(shù)同操作碼一起存放在程序存儲器中例如MOVA,3BH;A←3BHMOVDPTR,1828H;DPTR←1828H,,3BH,2、直接尋址,特點指令碼中含有操作數(shù)地址(8位二進制數(shù));可用于直接尋址的存儲空間是片內(nèi)RAM的低128字節(jié)和特殊功能寄存器SFR;直接尋址通常用DIRECT(操作數(shù)所在存儲單元的物理地址)表示;例MOV40H,A;(40H)←A對片內(nèi)高128B的RAM,DIRECT既可以使用SFR的物理地址,也可以用SFR的名稱符號。MOVA,81H;A←(81H)MOVA,SP;A←SP,可讀性好,,3BH,演示MOV40H,A;(40H)←A,3BH,3、寄存器尋址,特點操作數(shù)在R7R0,A,B,AB,DPTR中,指令碼中含有該操作數(shù)的寄存器號;操作數(shù)位于片內(nèi)RAM中MOVA,RN;A←RNINCRN;RN←RN1,,3BH,3BH,,,000,4、寄存器間接尋址,特點指令碼中含有存放該操作數(shù)地址的寄存器號;間址寄存器采用R0,R1,DPTR表示;R0,R1用于對片內(nèi)RAM和外部RAM(0000H00FFH)尋址,DPTR的尋址范圍是片外ROM/RAM的全部64KB區(qū)域;寄存器間址指令不能用于尋址SFRMOVA,R0;A←R0,,3BH,3BH,5、變址尋址,特點指令碼中隱含有作為基地址寄存器用的數(shù)據(jù)指針DPTR或程序計數(shù)器PC(存放基地址);指令碼中也隱含有累加器A(A中存放地址偏移量,00HFFH范圍內(nèi)的無符號數(shù));尋址空間是程序存儲器。MOVCA,APC;A←APCMOVCA,ADPTR;A←ADPTR例假設A中的內(nèi)容為05H,DPTR的內(nèi)容為0400H,程序存儲器0405H單元的內(nèi)容為2DH,則MOVCA,ADPTR執(zhí)行后A的內(nèi)容為2DH,,,,02,,2000H,A,IR,DPTR,ALU,,2002H,X2,,93,演示MOVCA,ADPTR;A←ADPTR,6、相對尋址,特點相對轉(zhuǎn)移指令的指令碼中含有相對地址偏移量;相對轉(zhuǎn)移指令分為短轉(zhuǎn)移指令和長轉(zhuǎn)移指令(分別為雙字節(jié)和三字節(jié));PC的當前值相對地址偏移量REL下一條要執(zhí)行指令的地址;PC的當前值是指相對轉(zhuǎn)移指令從程序存儲器中取出后的PC值。2000H8054HSJMPREL;PC←PC2REL,,,,,2000H,A,PC,ALU,2002H,54H,演示2000H8054HSJMP54H;PC←2056H,,,2056H,7、位尋址,特點位尋址指令的指令碼中含有位地址;位尋址指令中位地址用BIT表示(字節(jié)地址DIRECT);位尋址區(qū)片內(nèi)RAM位尋址區(qū)20H2FH和11個SFR;位地址的表示方法MOVC,7FH;CY←(7FH)MOVC,2FH7;CY←(7FH)MOVC,ACC7;CY←ACC7A1BIT7FH位地址賦值偽指令MOVC,A1CY←2FH7,A1為符號位地址,,,,7FH,00H,1,演示D200HSETB00H;00H←1,二、單片機常用指令類型,數(shù)據(jù)傳送指令(28條)將源地址中操作數(shù)傳送到目的地址的指令。算數(shù)運算指令(24條)對兩個操作數(shù)進行加、減、乘、除等運算的指令。邏輯操作和環(huán)移指令(25條)對兩個操作數(shù)進行邏輯乘、邏輯加、邏輯取反和異或等操作;對累加器A中數(shù)進行環(huán)移(左環(huán)移、右環(huán)移,帶進位、不帶進位)控制轉(zhuǎn)移指令(17條)條件轉(zhuǎn)移、無條件轉(zhuǎn)移、調(diào)用和返回等指令(改變PC中值為目標)位操作指令(布爾變量操作指令)(17條)位傳送、位置位、位運算和位控制轉(zhuǎn)移指令。,1、數(shù)據(jù)傳送指令(28條),此類指令不影響CY,AC,OV標志,只影響奇偶標志P。片內(nèi)RAM單元之間的數(shù)據(jù)傳送指令(15條)指令的源操作數(shù)和目的操作數(shù)地址都在單片機內(nèi)部,是片內(nèi)RAM或SFR的地址。立即尋址型傳送指令MOVA,DATAA←DATAMOVRN,DATARN←DATAMOVRI,DATARI←DATAMOVDIRECT,DATADIRECT←DATA,1、數(shù)據(jù)傳送指令(28條),直接尋址型傳送指令指令操作碼中至少含有一個操作數(shù)的直接地址。MOVA,DIRECTA←(DIRECT)MOVDIRECT,ADIRECT←AMOVRN,DIRECTRN←(DIRECT)MOVRI,DIRECTRI←(DIRECT)MOVDIRECT2,DIRECT1DIRECT2←DIRECT1注目的存儲單元有累加器A、工作寄存器和片內(nèi)RAM單元包括SFR的字節(jié)地址)。,1、數(shù)據(jù)傳送指令(28條),寄存器尋址型傳送指令MOVA,RNA←RNMOVRN,ARN←AMOVDIRECT,RNDIRECT←RN,1、數(shù)據(jù)傳送指令(28條),寄存器間址型傳送指令MOVA,RIA←RIMOVRI,ARI←AMOVDIRECT,RIDIRECT←RI,1、數(shù)據(jù)傳送指令,外部數(shù)據(jù)傳送指令(外部RAM/ROM)16位數(shù)傳送指令MOVDPTR,DATA16DPTR←DATA1616位立即數(shù)是外部RAM/ROM的地址,其高8位送入DPH,低8位送入DPL。外部ROM的字節(jié)傳送指令(查表指令)MOVCA,ADPTRA←ADPTR遠程查表MOVCA,APCPC←PC1,A←APC近程查表,1、數(shù)據(jù)傳送指令,外部RAM的字節(jié)傳送指令實現(xiàn)外部RAM和累加器A之間的數(shù)據(jù)傳送。MOVXA,RIA←RIMOVXRI,ARI←AMOVXA,DPTRA←DPTRMOVXDPTR,ADPTR←A注前面兩條指令訪問外部RAM0000H00FFH后面兩條指令訪問外部RAM0000HFFFFH,1、數(shù)據(jù)傳送指令,堆棧操作指令PUSHDIRECTSP←SP1,SP←(DIRECT)POPDIRECTDIRECT←SP,SP←SP1堆棧操作指令是直接尋址指令,書寫格式為PUSHACCPUSH00HPOPACCPOP00H注彈出指令不會改變堆棧區(qū)存儲器單元中的內(nèi)容。,1、數(shù)據(jù)傳送指令,數(shù)據(jù)交換指令XCHA,RNA?RNXCHA,DIRECT;A?DIRECTXCHA,RIA?RIXCHDA,RIA30?RI30注只是將累加器A中的內(nèi)容和片內(nèi)RAM單元內(nèi)容相互交換。,2、算術(shù)運算指令,加法指令(13條)不帶CY加法指令ADDA,RN;A←ARNADDA,DIRECT;A←A(DIRECT)ADDA,RI;A←A(RI)ADDA,DATA;A←ADATA對PSW標志位均有影響;計算機總是按帶符號數(shù)法則運算,產(chǎn)生PSW標志位。兩個帶符號數(shù)相加,運算結(jié)果是否溢出應判斷OV標志位。,2、算術(shù)運算指令,帶CY加法指令ADDCA,RN;A←ARNCYADDCA,DIRECT;A←A(DIRECT)CYADDCA,RI;A←A(RI)CYADDCA,DATA;A←ADATACYCY指令執(zhí)行前的CY值。常用于多字節(jié)無符號數(shù)的加法運算,2、算術(shù)運算指令,加1指令I(lǐng)NCA;A←A1INCRN;RN←RN1INCDIRECT;DIRECT←(DIRECT)1INCRI;RI←RI1INCDPTR;DPTR←DPTR1,只影響奇偶校驗標志位,2、算術(shù)運算指令,減法指令(8條)帶CY減法指令SUBBA,RN;A←A–RNCYSUBBA,DIRECT;A←A(DIRECT)CYSUBBA,RI;A←A(RI)CYSUBBA,DATA;A←A–DATACY對PSW標志位均有影響;計算機總是按帶符號數(shù)法則運算,產(chǎn)生PSW標志位。兩個帶符號數(shù)相減,運算結(jié)果是否溢出應判斷OV標志位。,2、算術(shù)運算指令,減1指令DECA;A←A1DECRN;RN←RN1DECDIRECT;DIRECT←(DIRECT)1DECRI;RI←RI1,只影響奇偶校驗標志位,2、算術(shù)運算指令,十進制調(diào)整指令(1條)DAA;若AC1或A3A09,則A←A06H若CY1或A7A49,則A←A60H通常緊跟在加法指令后使用,對A中的操作數(shù)進行十進制調(diào)整。專用于實現(xiàn)BCD運算。,2、算術(shù)運算指令,乘法、除法指令(2條)MULAB;ABBA,形成標志對標志位的影響CY0;若B不等于0,則OV1,否則OV0P由A中1的奇偶性確定。DIVABA÷BAB,形成標志對標志位的影響CY0;執(zhí)行過程中,若發(fā)現(xiàn)B等于0,則OV1P由A中1的奇偶性確定。,3、邏輯運算指令25條),邏輯操作指令共25條,所有指令均按位進行操作,無進位,一般不影響標志位。邏輯與運算指令ANLA,RN;A←A∧RNANLA,DIRECT;A←A∧DIRECTANLA,RI;A←A∧RIANLA,DATA;A←A∧DATAANLDIRECT,A;DIRECT←DIRECT∧AANLDIRECT,DATADIRECT←DIRECT∧DATA,3、邏輯運算指令25條),邏輯或運算指令ORLA,RN;A←A∨RNORLA,DIRECT;A←A∨DIRECTORLA,RI;A←A∨RIORLA,DATA;A←A∨DATAORLDIRECT,A;DIRECT←DIRECT∨AORLDIRECT,DATADIRECT←DIRECT∨DATA,3、邏輯運算指令25條),邏輯異或運算指令XRLA,RN;A←A⊕RNXRLA,DIRECT;A←A⊕DIRECTXRLA,RI;A←A⊕RIXRLA,DATA;A←A⊕DATAXRLDIRECT,A;DIRECT←DIRECT⊕AXRLDIRECT,DATADIRECT←DIRECT⊕DATA,3、邏輯運算指令25條),累加器A清零和取反指令CLRA;A←0CPLA;A←A移位指令RLAA7←A6←←A0←A7RRAA0→A7→→A1→A0RLCACY←A7←A6←←A0←CYRRCACY→A7→→A0→CYSWAPA;高4位和低4位交換指令,,4、控制轉(zhuǎn)移指令(17條),無條件轉(zhuǎn)移指令LJMPADDR16PC←ADDR16長轉(zhuǎn)移指令64K范圍內(nèi)轉(zhuǎn)移指令AJMPADDR11;PC←PC2,PC10PC0←ADDR11絕對轉(zhuǎn)移指令2K范圍內(nèi)轉(zhuǎn)移指令SJMPREL;PC←PC2,PC←PCREL短轉(zhuǎn)移指令126129范圍內(nèi)轉(zhuǎn)移指令,REL的取值范圍128127JMPADPTRPC←ADPTR間接轉(zhuǎn)移指令變址轉(zhuǎn)移指令,目標轉(zhuǎn)移地址的基地址送入DPTR,4、控制轉(zhuǎn)移指令(17條),條件轉(zhuǎn)移指令累加器A判零轉(zhuǎn)移指令JZREL若A0,則PC←PC2REL,否則PC←PC2JNZREL;注意都是雙字節(jié)相對轉(zhuǎn)移指令,REL為相對地址偏移量。,,4、控制轉(zhuǎn)移指令(17條),比較不相等轉(zhuǎn)移指令CJNEA,DATA,REL;若ADATA,則PC←PC3若A不等于DATA,則PC←PC3REL形成CY標志。CJNEA,DIRECT,REL;CJNERN,DATA,REL;CJNERI,DATA,REL;注意指令的相對轉(zhuǎn)移范圍為125130,,4、控制轉(zhuǎn)移指令(17條),減1非零轉(zhuǎn)移指令DJNZRN,REL;若RN1不等于0,則PC←PC2REL若RN10,則PC←PC2DJNZDIRECT,REL若,DIRECT1不等于0,則PC←PC3REL若,DIRECT10,則PC←PC3注意條件轉(zhuǎn)移指令均為相對轉(zhuǎn)移指令,因此指令的轉(zhuǎn)移范圍十分有限。,,4、控制轉(zhuǎn)移指令(17條),子程序調(diào)用和返回指令短調(diào)用指令ACALLADDR11PC←PC2SP←SP1,(SP)←PC7PC0SP←SP1,(SP)←PC15PC8PC100←ADDR11注意(1)短調(diào)用指令也稱為絕對調(diào)用指令;(2)本調(diào)用指令應與被調(diào)用子程序起始地址在同一個2KB范圍內(nèi)。,,4、控制轉(zhuǎn)移指令(17條),長調(diào)用指令LCALLADDR16PC←PC3SP←SP1,(SP)←PC7PC0SP←SP1,(SP)←PC15PC8PC150←ADDR16注意本調(diào)用指令是一個64KB范圍內(nèi)調(diào)用指令。返回指令RETPC15PC8←(SP),SP←SP1,PC7PC0←(SP),SP←SP1RETIPC15PC8←(SP),SP←SP1,PC7PC0←(SP),SP←SP1返回斷點的同時,釋放中斷邏輯,接受新的中斷請求空操作指令NOP;PC←PC1,,5、布爾變量操作指令(17條),MCS51單片機的一個最大的特點就是在硬件結(jié)構(gòu)上有一個布爾處理器,對應這個處理器,指令系統(tǒng)中設計了處理布爾變量的指令子集。該位操作指令共17條,所有的位操作指令均采用位尋址方式,在指令中位地址可用四種方式表示(1)直接尋址方式(2)點操作符表示方式(3)位名稱方式(4)標號表示(自定義地址)方式,位傳送指令MOVC,BITMOVBIT,C其中C為PSW中的CY;BIT為布爾變量的位地址。這組指令的其中一個操作數(shù)必須是進位標志C,另一個可以是位地址。,位置位和復位指令位置位指令SETBC;1→CYSETBBIT;1→BIT位復位指令CLRC;0→CYCLRBIT;0→BIT,位邏輯運算指令位邏輯“與”指令ANLC,BIT;C∧(BIT)→CANLC,/BIT;C∧/(BIT)→C位邏輯“或”指令ORLC,BIT;(C)∨(BIT)→CORLC,/BIT;(C)∨/(BIT)→C位邏輯“非”指令CPLC;/C→CCPLBIT;/BIT→BIT,位條件轉(zhuǎn)移指令累加器CY狀態(tài)判斷轉(zhuǎn)移指令JCREL;若CY1,則(PC)2REL→PC;若CY0,則(PC)2→PCJNCREL;若CY0,則(PC)2REL→PC;若CY1,則(PC)2→PC位狀態(tài)判斷轉(zhuǎn)移指令JBBIT,REL;若(BIT)1,則(PC)3REL→PC;若(BIT)0,則(PC)3→PCJNBBIT,REL;若(BIT)0,則(PC)3REL→PC;若(BIT)1,則(PC3→PCJBCBIT,REL;若(BIT)1,則PC3REL→PC,0→BIT;若(BIT)0,則PC3→PC,三、單片機指令系統(tǒng)的幾個特點,指令中的數(shù)據(jù)表示數(shù)據(jù)前加訪問外部數(shù)據(jù)存儲器指令MOVX訪問外部數(shù)據(jù)存儲器使用數(shù)據(jù)指針DPTR查表指令MOVCA,ADPTRMOVCA,APC調(diào)用和轉(zhuǎn)移指令都有幾種ACALLADDR11絕對調(diào)用(2KB內(nèi))LCALLADDR16長調(diào)用AJMPADDR11絕對跳轉(zhuǎn)(2KB內(nèi))LJMPADDR16長跳轉(zhuǎn)SJMPREL相對跳轉(zhuǎn),CJNE(目的),(源),REL目的字節(jié)與源字節(jié)比較,不等,則轉(zhuǎn)到REL處執(zhí)行,否則順序執(zhí)行。DJNZRN,REL和DJNZDIRECT,RELPUSH和POP指令為單字節(jié)操作,且棧指針向下。布爾(位)處理指令舉例MOVP12,CSETBP15JBACC3,LABELCPLCCLRP16JNBP17,LEBEL,四、單片機中的偽指令,名詞解釋匯編程序是一種由制造廠家或軟件公司提供的實用程序,能把“匯編語言源程序”翻譯成機器語言,供CPU執(zhí)行。例如MBUG匯編語言源程序設計者編寫的程序匯編語言是匯編語言語句的集合,是匯編語言源程序的基本元素。匯編語言語句分為指令性語句和指示性語句。,四、單片機中的偽指令,指令性語句指采用指令助記符構(gòu)成的匯編語言語句,是匯編語言語句的主體。每條指令性語句都有對應的指令代碼(機器碼)MCS51單片機有111條指令性語句指示性語句(又稱偽指令)不是真正的指令。不會在匯編時產(chǎn)生機器代碼匯編時供匯編程序識別和執(zhí)行,對匯編過程進行某種控制MCS51中常用的偽指令有8條,四、單片機中的偽指令,偽指令是在機器匯編時供匯編程序識別和執(zhí)行的命令,用于對匯編的過程進行控制。ORG指令代碼存儲起始地址ORG2000HSTARTMOVA,64HENDEND結(jié)束匯編偽指令每個源程序只能有一個END,且在程序的末尾。,四、單片機中的偽指令,EQU等值(賦值)語句字符名稱EQU數(shù)據(jù)或匯編符DAPORTEQU0C010H注先定義后使用,定義字符名稱不能在表達式中使用。DATA數(shù)據(jù)地址賦值語句字符名稱DATA表達式AADATA35H注表達式可為數(shù)據(jù)或地址,也可包含已定義的“字符名稱”,但不能是匯編符號。,四、單片機中的偽指令,DB定義字節(jié)標號DB項或項表把“項或項表”中的數(shù)據(jù)依次存放到以左邊標號為起始地址的存儲單元中例如ORG0600HSTARTMOVA64HTABDB3FH,68,01011010B,’5’,’A’END,四、單片機中的偽指令,DW定義雙字節(jié)數(shù)(字)(高8位放低地址單元)標號DW項或項表例如ORG1600HSTARTMOVA30HORG1620HHETABDW3F08H,68H,15END匯編后1620H3FH1622H00H1624H00H1621H08H1623H68H1625H0FH,四、單片機中的偽指令,DS定義存儲空間標號DS表達式從標號地址開始預留一定數(shù)量的內(nèi)存單元例如SPCDS08HBIT位地址賦值字符名稱BIT位地址例如A1BITP34A2BIT00H注BIT語句定義過的字符名稱是一個符號位地址。,五、匯編語言程序設計舉例,匯編語言程序設計步驟擬制設計任務書程序功能、技術(shù)指標、精度等級實施方案、工程進度、所需設備、研制費用和人員分工等建立數(shù)學模型可以是表達式,推理和判斷,運行狀態(tài)的模擬等確立算法同一數(shù)學模型往往有幾種不同的算法繪制程序流程圖設計程序結(jié)構(gòu)編制匯編語言源程序上機調(diào)試,匯編語言程序的匯編將匯編語言源程序轉(zhuǎn)換為機器語言的過程稱為“匯編”??梢圆捎靡韵聝煞N手段進行匯編人工匯編查手冊機器匯編匯編程序,例拆字程序設30H中存放待處理的數(shù)據(jù),要求將其拆成兩個字節(jié)數(shù),存放在31H和32H(高位)中。例如59H→05H和09HORG0500HCHAIZMOVR1,32HMOVR0,30HMOVA,R0ANLA,0F0HRRARRARRA,1簡單程序設計,注4個RRA指令可以用SWAPA指令代替。,RRAMOVR1,ADECR1MOVA,R0ANLA,0FHMOVR1,AEND,例將一個字節(jié)BCD碼變成相應的ASCAII碼,存入兩個RAM單元中。設BCD碼存在內(nèi)部RAM30H單元中,變換成ASCAII碼存入31H和32H中。ORG0500HMOVR0,32HMOVR0,00HMOVA,30HXCHDA,R0ORL32H,30HSWAPAORLA,30HMOV31H,AEND,或ORG0500HMOVR0,30HMOVA,R0MOVB,AANLA,0FHADDA,30HMOV32H,AMOVA,BSWAPAANLA,0FHADDA,30HMOV31H,AEND,例已知VAR單元內(nèi)有一變量X,請按右上式編程求Y值,并送入FUNC單元。求解(1)先分支后賦值ORG0100HVARDATA30HFUNCDATA31HMOVA,VARA←XJZDONE若X0,則DONEJNBACC7,POSI若X0,則POSIMOVA,0FFH若X0,則A←1SJMPDONE轉(zhuǎn)DONEPOSIMOVA,01HA←1DONEMOVFUNC,A存入FUNC單元SJMPEND,2分支程序設計,(2)先賦值后分支ORG0100HVARDATA30HFUNCDATA50HMOVA,VARA←XJZDONE若X0,則DONEMOVR0,0FFH若X≠0,則R0←1JBACC7,NEG若X0,則R0←1NEGMOVA,R0A←R0DONEMOVFUNC,A存入FUNC單元SJMPEND,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 75
大?。?2.7(MB)
子文件數(shù):